Laravel MVC Architecture Guide

Sales Invoice Create Page Architecture

/sales/create পেজটি ডেভেলপ ও কাস্টমাইজেশনের জন্য প্রয়োজনীয় সমস্ত ফাইল, ফাংশন, ডাটাবেজ মডেল এবং লজিকের সম্পূর্ণ হ্যান্ডবুক।

Target URL: http://localhost:81/seml/public/sales/create
Module: Sales Management
Primary Controller: SalesController.php
Primary View: sales/create.blade.php
Primary Model: Sales & SalesDetail

কিভাবে এই পেজটি কাজ করে (End-to-End Execution Flow)

Architectural Pipeline

ব্রাউজারে যখন ইউজার http://localhost:81/seml/public/sales/create হিট করে, তখন ব্যাকএন্ডে নিচের সিকোয়েন্সে ডাটা প্রসেস হয়ে পেজটি লোড হয় এবং ফর্ম সাবমিট করার পর ইনভয়েস সেভ হয়:

১
Route Hit

routes/web.php ফাইলের resource route sales.create রিকোয়েস্ট গ্রহণ করে।

২
Controller Logic

SalesController@create ব্রাঞ্চ, স্টোর, লেজার, ডিলার ডিসকাউন্ট ও ফর্ম সেটিংস লোড করে।

৩
Blade Render

backend.sales.create ভিউটি layouts.app এর ভেতরে রেন্ডার হয়ে ব্রাউজারে দৃশ্যমান হয়।

৪
Live AJAX Logic

বারকোড সার্চ, রিয়েলটাইম স্টক চেক ও ডিলার ডিসকাউন্ট পলিসি AJAX এর মাধ্যমে অটো হিসাব হয়।

৫
Save & Accounting

ফর্ম সাবমিট হলে SalesController@store সেলস, আইটেম স্টক ও ভাউচার লেজার সেভ করে।

পেজ লোডের সময় যা ঘটে (GET Request):
SalesController@create() মেথড ডাটাবেজ থেকে Branch, CostCenter, StoreHouse, AccountHead, SalesFormSetting, ItemCategory, Units, TransectionTerms এবং DealerInfo থেকে অ্যাক্টিভ ডিসকাউন্ট পলিসি ফেচ করে ভিউতে পাঠায়।
ফর্ম সেভ করার সময় যা ঘটে (POST Request):
সাবমিট করার পর SalesController@store() মেথডে রিকোয়েস্ট যায়। এটি মাস্টার তথ্য Sales টেবিলে, পণ্যসমূহ SalesDetail টেবিলে, পেমেন্ট অ্যাকাউন্ট SalesAccount টেবিলে সেভ করে, ItemInventory থেকে স্টক কমায় এবং স্বয়ংক্রিয়ভাবে অ্যাকাউন্টিং জার্নাল ভাউচার (VoucherMaster) জেনারেট করে।

১. Route ফাইল এবং সম্পর্কিত এন্ডপয়েন্টসমূহ

Routing Layer
ফাইল পাথ: routes/web.php

সেলস পেজের মূল এন্ট্রি পয়েন্ট এবং এই পেজের ভেতরে ব্যবহৃত সমস্ত AJAX কলের রাউট নিচে তালিকাভুক্ত করা হলো:

HTTP Method Route URL Controller Method ব্যবহার / কাজের বিবরণ
GET /sales/create SalesController@create মূল সেলস ক্রিয়েট ফর্ম পেজ ওপেন করে।
POST /sales SalesController@store নতুন সেলস ইনভয়েস ডাটাবেজে সাবমিট / সেভ করে।
GET /sales-setting-modal SalesController@formSettingAjax ফর্মের কোন কলামগুলো হাইড/শো হবে তার সেটিংস মোডাল লোড করে।
POST /sales-settings SalesController@Settings সেলস ফর্ম সেটিংস আপডেট সেভ করে।
GET /item-sales-search SalesController@itemSalesSearch ইনভয়েস টেবিলে আইটেমের নাম লিখে সার্চ করলে অটোসাজেশন দেয়।
GET /item-sales-barcode-search SalesController@itemSalesBarcodeSearch বারকোড স্ক্যানার দিয়ে স্ক্যান করা পণ্যটি সরাসরি টেবিলে আনে।
GET /check-available-qty SalesController@checkAvailableQty সিলেক্টেড স্টোরে উক্ত আইটেমের পর্যাপ্ত স্টক আছে কিনা ভ্যালিডেট করে।
GET /discount-rate-setup/applicable DiscountRateSetupController@getApplicableDiscount সিলেক্টেড ডিলার এবং ইনভয়েস তারিখ অনুযায়ী ডিসকাউন্ট রেট ক্যালকুলেট করে।
GET /sales-order-lookup-search SalesController@salesOrderLookupSearch আগে থেকে থাকা সেলস অর্ডার (SO) রেফারেন্স হিসেবে সার্চ করার সুবিধা।

২. Controller ফাইল এবং প্রয়োজনীয় মেথডসমূহ

Business Logic
ফাইল পাথ: app/Http/Controllers/SalesController.php
public function create()

লাইন নম্বর: SalesController.php-এর ১১৩০ নম্বর লাইন।

এই মেথডটি পেজটি রেন্ডার করতে প্রয়োজনীয় সকল ডাটা ডাটাবেজ থেকে নিয়ে আসে:

  • Auth::user() হতে ইউজারের পারমিটেড ব্রাঞ্চ ও স্টোর ফিল্টার করে।
  • AccountHead এবং Branch তালিকা তৈরি করে।
  • SalesFormSetting::first() দ্বারা ফর্মের ফিল্ড ভিজিবিলিটি আনে।
  • DealerInfo এবং DiscountRateSetup হতে ডিলারের জন্য নির্ধারিত ডিসকাউন্ট পলিসি রেট ক্যালকুলেট করে।
  • সব ডাটা সহ return view('backend.sales.create', compact(...)) রিটার্ন করে।
public function store(Request $request)

লাইন নম্বর: SalesController.php-এর ১৪১৮ নম্বর লাইন।

ইউজার ফর্ম সাবমিট করার পর এই মেথডটি চূড়ান্ত সেভ ও ট্রানজেকশন সম্পন্ন করে:

  • রিকোয়েস্ট ভ্যালিডেশন করে (তারিখ, ব্রাঞ্চ, মেইন লেজার ইত্যাদি)।
  • ক্যাশ কাস্টমারদের ক্ষেত্রে সম্পূর্ণ বিল পরিশোধ হয়েছে কিনা চেক করে (_cash_customer_check)।
  • ইনভয়েস মাস্টার রেকর্ড Sales মডেলে সেভ করে।
  • আইটেমের লুপ চালিয়ে SalesDetail মডেলে লাইন আইটেম সেভ করে।
  • ইনভেন্টরি ব্যালেন্স কমাতে ItemInventory আপডেট করে।
  • অ্যাকাউন্টিং ডাবল এন্ট্রি ব্যালেন্সিং নিশ্চিত করে VoucherMaster ও VoucherMasterDetail এন্ট্রি দেয়।

৩. Views (ব্লেড টেমপ্লেট ও মোডাল ফাইলসমূহ)

Presentation Layer
Main Blade মূল পেজ: resources/views/backend/sales/create.blade.php
  • এই পেজটিতে সম্পূর্ণ সেলস ফর্ম, ইনভয়েস হেডার, কাস্টমার সিলেক্ট, ডিলার পলিসি ড্রপডাউন এবং আইটেম এন্ট্রি টেবিল রয়েছে।
  • নিচের অংশে (Line 907-3108) লাইভ মোট টাকা, ভ্যাট, ডিলার ডিসকাউন্ট (DP), লাইন ডিসকাউন্ট এবং নিট টোটাল হিসাবের সম্পূর্ণ জাভাস্ক্রিপ্ট স্ক্রিপ্ট অন্তর্ভুক্ত।
Master Layout resources/views/backend/layouts/app.blade.php

মেইন সাইডবার, নেভিগেশন বার, সিএসএস ও জেকোয়েরি প্লাগইন লোড করার প্যারেন্ট লেআউট।

Settings Modal resources/views/backend/sales/form_setting_modal.blade.php

সেলস ফর্মের কলাম প্রদর্শন/লুকানোর চেকসবক্স কনফিগারেশন মোডাল।

Common Modal resources/views/backend/common-modal/item_ledger_modal.blade.php

পেজ রিফ্রেশ না করেই দ্রুত নতুন পণ্য বা নতুন একাউন্ট লেজার খোলার কুইক মোডাল।

Flash Alerts resources/views/backend/message/message.blade.php

ফর্ম সাবমিটের পরে এরর বা সাকসেস নোটিফিকেশন প্রদর্শনকারী পারশিয়াল ফাইল।

৪. Models এবং Database Tables

Data & Persistence

সেলস ইনভয়েস ক্রিয়েট ও সেভ করার ক্ষেত্রে নিচের মডেল ও ডাটাবেজ টেবিলগুলো ব্যবহৃত হয়:

Model Name & Path Database Table কাজের উদ্দেশ্য / Data Description
Sales
app/Models/Sales.php
sales মাস্টার ইনভয়েস রেকর্ড (ইনভয়েস নং, তারিখ, কাস্টমার আইডি, গ্র্যান্ড টোটাল, ইত্যাদি)।
SalesDetail
app/Models/SalesDetail.php
sales_details প্রতিটি পণ্যের লাইন আইটেম (আইটেম আইডি, পরিমাণ, রেট, ভ্যাট, ডিলার ডিসকাউন্ট, লাইন টোটাল)।
SalesAccount
app/Models/SalesAccount.php
sales_accounts কাস্টমার লেজার এবং ক্যাশ/ব্যাংক পেমেন্টের সমন্বিত ডেবিট-ক্রেডিট হিসাব।
SalesFormSetting
app/Models/SalesFormSetting.php
sales_form_settings ফর্মে বারকোড, ভ্যাট, ডিসকাউন্ট ইত্যাদি কলাম দৃশ্যমান থাকবে কিনা তার সেটিংস।
AccountLedger
app/Models/AccountLedger.php
account_ledgers কাস্টমার একাউন্ট এবং ব্যাংক/ক্যাশ পেমেন্ট লেজার সম্পর্কিত তথ্য।
ItemInventory
app/Models/ItemInventory.php
item_inventories পণ্য ডেলিভারি দেওয়ার সাথে সাথে ইনভেন্টরি স্টক হিস্ট্রি ও ব্যালেন্স আপডেট করে।
DealerInfo & DiscountRateSetup
app/Models/DealerInfo.php
dealer_infos, discount_rate_setups ডিলারদের জন্য অ্যাক্টিভ স্পেশাল ডিসকাউন্ট পার্সেন্টেজ নির্ধারণ ও ফেচ করা।
VoucherMaster & Detail
app/Models/VoucherMaster.php
voucher_masters, voucher_master_details বিক্রয় সম্পূর্ণ হলে স্বয়ংক্রিয়ভাবে তৈরি হওয়া ফাইন্যান্সিয়াল জার্নাল ভাউচার।
সাম্প্রতিক মাইগ্রেশন ফাইলসমূহ (Sales Table Customizations):
  • database/migrations/2026_10_21_183000_add_customer_credit_fields_to_sales_table.php (কাস্টমার ক্রেডিট লিমিট ফিল্ডসমূহ)
  • database/migrations/2026_10_21_163000_add_challan_no_and_gatepass_no_to_sales_table.php (চালান ও গেটপাস নং)
  • database/migrations/2026_10_01_233500_add_dealer_id_to_sales_table.php (ডিলার আইডি সংযোজন)

৫. অল-ইন-ওয়ান ফাইল রেফারেন্স ম্যাট্রিক্স

Cheat Sheet

/sales/create পেজে যে কোন কাজ বা মোডিফিকেশন করার জন্য নিচের টেবিলটি ফলো করলেই কাঙ্ক্ষিত ফাইল সহজে খুঁজে পাবেন:

লেয়ার ফাইলের আপেক্ষিক পাথ (File Path) মূল উদ্দেশ্য / আপনি যখন এডিট করবেন
Route routes/web.php নতুন URL বা AJAX এন্ডপয়েন্ট যোগ/পরিবর্তন করতে।
Controller app/Http/Controllers/SalesController.php ফর্মের ডাটা লোড করার কুয়েরি অথবা ডাটাবেজে সেভ লজিক এডিট করতে।
View resources/views/backend/sales/create.blade.php ফর্মের ডিজাইন, নতুন ইনপুট ফিল্ড, কলাম অথবা জাভাস্ক্রিপ্ট ফর্মুলা পরিবর্তন করতে।
View (Modal) resources/views/backend/sales/form_setting_modal.blade.php সেলস ফর্ম সেটিংসে নতুন কোনো ফিল্ডের টগল অপশন যুক্ত করতে।
View (Modal) resources/views/backend/common-modal/item_ledger_modal.blade.php কুইক আইটেম বা লেজার ক্রিয়েশন মোডাল মডিফাই করতে।
Model app/Models/Sales.php মাস্টার টেবিলের রিলেশনশিপ (যেমন: কাস্টমার, ইউজার, ব্রাঞ্চ) হ্যান্ডেল করতে।
Model app/Models/SalesDetail.php আইটেম রো-এর ইউনিট কনভার্সন, বারকোড বা আইটেম রিলেশন হ্যান্ডেল করতে।
Language resources/lang/en/label.php ফর্মের লেবেল বা টেক্সট পরিবর্তন ও নতুন ইংরেজি/বাংলা ট্রান্সলেশন দিতে।
CSS public/backend/new_style.css পেজের কার্ড, টেবিল বা বাটনের কাস্টম কালার ও সিএসএস স্টাইলিং পরিবর্তন করতে।