================================================================================
QuickHisab — পরবর্তী Live Update (Pending Changelog)
================================================================================

বেসলাইন: ২০২৬-০৭-০৩ (user confirmed — template email queue fix live-এ কাজ করছে)
- ২০২৬-০৬-২৮ পর্যন্তের কাজ + template email queue/Send Test fix — live-এ deploy হয়েছে
- **এই তারিখ পর** যা edit হবে → নিচে `PENDING CHANGES` সেকশনে যোগ হবে
- Agent প্রতিটি নতুন কাজ শেষে: `PENDING_LIVE_UPDATE.txt` + `ai/next-cpanel-upload.md` আপডেট করবে
- পরবর্তী একসাথে deploy: এই ফাইল + `New_Update_in_Cpanel.txt` চেকলিস্ট

--------------------------------------------------------------------------------
DEPLOYED ON LIVE (২০২৬-০৭-০৩ — user confirmed)
--------------------------------------------------------------------------------

[2026-07-03] — Template email queue + Send Test real status
  - Template email Communicator-এর মতো queue/CLI path
  - Send Test: Sent / Failed / Pending real status
  - Key files: SuperadminTemplateNotificationService.php, template_settings/index.blade.php, lang/en

--------------------------------------------------------------------------------
রেকর্ড ফরম্যাট (প্রতিটি পরিবর্তনের জন্য)
--------------------------------------------------------------------------------

[YYYY-MM-DD] — সংক্ষিপ্ত শিরোনাম
বর্ণনা:
  (কী পরিবর্তন, কেন)

পরিবর্তিত ফাইল:
  - path/to/file.php
  - path/to/another.blade.php

নতুন ফাইল:
  - (যদি থাকে)

Database migration:
  - (ফাইল নাম বা "নেই")

Live-এ ম্যানুয়াল কাজ:
  - (cron, .env, cache, IP whitelist ইত্যাদি — না থাকলে "নেই")

Deploy নোট:
  - (বিশেষ সতর্কতা বা টেস্ট পয়েন্ট)

--------------------------------------------------------------------------------
[2026-06-28] — Contact list: default active + Due Customer filter
বর্ণনা:
  - Customer/Supplier লিস্ট ডিফল্টভাবে শুধু Active দেখাবে
  - Status ফিল্টারে Active / Inactive / All (সব) অপশন
  - Customer লিস্টে Sell Due-র আগে "Due Customer" ফিল্টার (getContactDue > 0, Bulk SMS-এর মতো)

পরিবর্তিত ফাইল:
  - app/Http/Controllers/ContactController.php
  - resources/views/contact/index.blade.php
  - public/js/app.js
  - lang/en/lang_v1.php
  - lang/bn/lang_v1.php

Database migration:
  - নেই

Live-এ ম্যানুয়াল কাজ:
  - php artisan view:clear
  - ব্রাউজার cache clear (app.js)

Deploy নোট:
  - Customer list → Due Customer চেক → Bulk SMS Due Customers সংখ্যার কাছাকাছি হওয়া উচিত (active + mobile ছাড়া)
  - Status dropdown default Active যাচাই

[2026-06-28] — Superadmin notification templates: Add New Subscription button
বর্ণনা:
  - Template email/notification-এ "Add New Subscription" বাটন
  - {subscription_url} ও {subscription_button} placeholder — multi-domain URL সাপোর্ট
  - পুরনো DB টেমপ্লেট migration দিয়ে আপডেট

পরিবর্তিত ফাইল:
  - Modules/Superadmin/Utils/SuperadminTemplateNotificationService.php
  - Modules/Superadmin/Http/Controllers/TemplateSettingsController.php
  - Modules/Superadmin/Database/Migrations/2026_06_28_120000_add_subscription_button_to_notification_templates.php
  - Modules/Superadmin/Resources/lang/en/lang.php
  - Modules/Superadmin/Resources/lang/bn/lang.php

Database migration:
  - php artisan migrate --force (2026_06_28_120000_add_subscription_button_to_notification_templates)

Live-এ ম্যানুয়াল কাজ:
  - php artisan migrate --force

Deploy নোট:
  - Superadmin → Template Settings → Send test → email ও popup-এ বাটন যাচাই
  - প্রতিটি ডোমেনের .env APP_URL সঠিক থাকতে হবে (cron থেকে পাঠালে)

--------------------------------------------------------------------------------
PENDING CHANGES (এখনো live-এ যায়নি — পরবর্তী batch deploy)
--------------------------------------------------------------------------------

[2026-07-05] — Business upload: show legacy + new folder photos
বর্ণনা:
  - business_{id}/ ফোল্ডার তৈরি হলে পুরনো uploads/img/ ছবির URL ভুল scoped path দিত
  - relativePath() legacy + scoped resolve (legacy আগে check — কম disk stat)
  - Product list: business_upload_img_tag() — disk stat ছাড়া dual URL (legacy → scoped onerror)

পরিবর্তিত ফাইল:
  - app/Utils/BusinessUploadUtil.php
  - app/Http/helpers.php
  - app/Http/Controllers/ProductController.php

Database migration:
  - নেই

Live-এ ম্যানুয়াল কাজ:
  - শুধু ফাইল আপলোড

Deploy নোট:
  - jonony — পুরনো + নতুন photo একসাথে; 1000 entries load speed আগের মতো

[2026-07-05] — Ledger summary balance + Format 3 fix
বর্ণনা:
  - Account Summary "Balance due" ledger table final balance-এর সাথে মিলছিল না (discount দ্বিগুণ বিয়োগ)
  - Ledger Format 3 load হচ্ছিল না (sell_lines relation + DataTable re-init)

পরিবর্তিত ফাইল:
  - resources/views/contact/ledger.blade.php
  - resources/views/contact/ledger_format_3.blade.php
  - resources/views/contact/show.blade.php
  - app/Utils/TransactionUtil.php

Database migration:
  - নেই

Live-এ ম্যানুয়াল কাজ:
  - php artisan view:clear

Deploy নোট:
  - Contact #47346 — Summary Balance due = Table final balance (e.g. 102,095)
  - Format 3 radio select → line-item ledger loads

[2026-07-05] — Contact payment: ledger discount subtract from due
বর্ণনা:
  - Ledger-এ Add Discount দিলে Pay modal discount বাদ দিয়ে due দেখাত না
  - getPayContactDue + getContactDue — ledger_discount subtract (ledger-এর সাথে match)
  - Payment modal-এ ledger discount line + corrected due

পরিবর্তিত ফাইল:
  - app/Http/Controllers/TransactionPaymentController.php
  - app/Utils/Util.php
  - resources/views/transaction_payment/pay_supplier_due_modal.blade.php

Database migration:
  - নেই

Live-এ ম্যানুয়াল কাজ:
  - php artisan view:clear

Deploy নোট:
  - Customer with ledger discount (e.g. #47346 Mr Kobir Bapari) → Pay amount = invoice − paid − discount
  - Discount নেই এমন customer — আগের মতো same amount

[2026-07-03] — Template: expired_after logic (no active subscription businesses)
বর্ণনা:
  - "Expired (renew reminder)" Send Test — active subscription নেই এমন business-এও পাঠাবে
  - Scheduled cron: active subscription নেই এমন সব business-এ expired_after
  - resolveSubscriptionForSend() — event type অনুযায়ী আলাদা logic

পরিবর্তিত ফাইল:
  - Modules/Superadmin/Utils/SuperadminTemplateNotificationService.php
  - Modules/Superadmin/Resources/lang/en/lang.php
  - Modules/Superadmin/Resources/lang/bn/lang.php

Database migration:
  - নেই

Live-এ ম্যানুয়াল কাজ:
  - php artisan view:clear

Deploy নোট:
  - Ayat Traders (no sub) + Expired renew reminder → Send test success
  - Active subscription আছে এমন business-এ expired_after block message দেখাবে

[2026-07-03] — Branded email + in-app notification + anti-spam template copy
বর্ণনা:
  - Email: maroon/theme header + footer, company info (invoice_business_name, email, offline payment, WhatsApp)
  - In-app: qh-notification-card header/body/footer — dark/light mode (CSS vars)
  - Subject + header: `{app_name} - {notification_title}` (বড় হেডার টেক্সট)
  - Footer: `{company_name} | WhatsApp নম্বর | WhatsApp বাটন`
  - Template subject/body/SMS — account notice tone (discount/offer/marketing ভাষা নেই)
  - Placeholders: {subscription_help_box}, {company_name}, {company_email}

পরিবর্তিত ফাইল:
  - Modules/Superadmin/Utils/SuperadminNotificationBrandingUtil.php (নতুন)
  - Modules/Superadmin/Utils/SuperadminTemplateNotificationService.php
  - Modules/Superadmin/Utils/SuperadminCommunicatorUtil.php
  - Modules/Superadmin/Console/ProcessCommunicatorBatch.php
  - Modules/Superadmin/Http/Controllers/TemplateSettingsController.php
  - resources/views/emails/communicator.blade.php
  - resources/views/home/notification_modal.blade.php
  - resources/views/layouts/partials/css.blade.php
  - Modules/Superadmin/Resources/lang/en/lang.php
  - Modules/Superadmin/Resources/lang/bn/lang.php

নতুন ফাইল:
  - Modules/Superadmin/Utils/SuperadminNotificationBrandingUtil.php
  - Modules/Superadmin/Database/Migrations/2026_07_03_120000_refresh_notification_template_branding_copy.php

Database migration:
  - php artisan migrate --force
  - 2026_07_03_120000_refresh_notification_template_branding_copy.php

Live-এ ম্যানুয়াল কাজ:
  - php artisan migrate --force
  - php artisan view:clear && php artisan config:cache
  - (ঐচ্ছik) .env: NOTIFICATION_SUPPORT_WHATSAPP=+880...

Deploy নোট:
  - Superadmin Settings → invoice business name, email, offline payment details → email header/footer-এ দেখাবে
  - Template Send test → branded layout (স্ক্রিনশট স্টাইল), Gmail inbox check
  - In-app popup → dark + light mode check
  - Gmail spam: SPF/DKIM/DMARC + domain email still required
  - .env: NOTIFICATION_BKASH_NUMBER=01621181069, NOTIFICATION_SUPPORT_WHATSAPP=+880...
  - Live APP_URL=https://domain.com (public ছাড়া) — বাটন URL সঠিক হবে
  - (ঐচ্ছik) NOTIFICATION_APP_URL=https://qsale24.com — cron/CLI email link override
  - production/live env-এ APP_URL-তে /public থাকলে auto strip হয়
  - Renew templates: Add Subscription বাটন + renew help box; new sub: View subscription বাটন
  - Plain link fallback line removed

[2026-07-03] — Notification template user copy (BN/EN)
বর্ণনা:
  - Renewal (৫টি): user-provided Bengali copy + English translation
  - New subscription: আলাদা body + status help box + সাবস্ক্রিপশন দেখুন বাটন
  - Renew: Add Subscription বাটন + bKash নম্বর (NOTIFICATION_BKASH_NUMBER)
  - Subject/header: {app_name} - {notification_title}

পরিবর্তিত ফাইল:
  - Modules/Superadmin/Utils/SuperadminNotificationBrandingUtil.php
  - Modules/Superadmin/Utils/SuperadminTemplateNotificationService.php
  - Modules/Superadmin/Resources/lang/bn/lang.php
  - Modules/Superadmin/Resources/lang/en/lang.php

নতুন ফাইল:
  - Modules/Superadmin/Database/Migrations/2026_07_03_143000_update_notification_template_user_copy.php

Database migration:
  - 2026_07_03_143000_update_notification_template_user_copy.php

--------------------------------------------------------------------------------
PENDING CHANGES (২০২৬-০৬-২৮ batch — এখনো live-এ যায়নি)
--------------------------------------------------------------------------------

[2026-06-28] — Unit page: default unit protection + error fixes
বর্ণনা:
  - ডিফল্ট Pieces ইউনিট ডিলিট ব্লক (UI + backend)
  - প্রোডাক্ট/সাব-ইউনিট ব্যবহারে কাস্টম ইউনিট ডিলিট ব্লক + warning
  - মুছে ফেলা ডিফল্ট ইউনিট auto-restore (পেজ ক্র্যাশ প্রতিরোধ)
  - base_unit null এরর ফিক্স, delete JS this-bug ফিক্স

পরিবর্তিত ফাইল:
  - app/Http/Controllers/UnitController.php
  - public/js/app.js
  - lang/en/lang_v1.php
  - lang/bn/lang_v1.php

Database migration:
  - নেই

Live-এ ম্যানুয়াল কাজ:
  - ব্রাউজার cache clear (app.js)

Deploy নোট:
  - Unit পেজ → ডিফল্ট ইউনিটে Delete বাটন নেই
  - পণ্যে ব্যবহৃত ইউনিট ডিলিট করলে warning

[2026-06-28] — Bulk SMS: Due Customers UI + Draft auto-load
বর্ণনা:
  - Due Customers সিলেক্ট করলে info নোটিফিকেশনের বদলে শুধু কতজন কাস্টমার নির্বাচিত দেখাবে
  - Due Customers সিলেক্ট করলে due reminder ড্রাফট অটো লোড হবে (SMS টেক্সটবক্স + ড্রাফট dropdown)
  - ড্রাফট dropdown থেকে নাম বেছে নিলেই SMS টেক্সটবক্সে অটো চলে আসবে

পরিবর্তিত ফাইল:
  - Modules/BulkSms/Routes/web.php
  - Modules/BulkSms/Http/Controllers/BulkSmsCampaignController.php
  - Modules/BulkSms/Resources/views/campaign/partials/create_form.blade.php
  - Modules/BulkSms/Resources/views/campaign/partials/campaign_form_js.blade.php
  - Modules/BulkSms/Resources/lang/en/lang.php
  - Modules/BulkSms/Resources/lang/bn/lang.php

Database migration:
  - নেই

Live-এ ম্যানুয়াল কাজ:
  - php artisan route:cache (route cache থাকলে)
  - php artisan view:clear

Deploy নোট:
  - Bulk SMS → Send Quick SMS → Due Customers ট্যাব টেস্ট করুন
  - ড্রাফট dropdown change ও due draft auto-load যাচাই করুন

[2026-06-28] — Business storage & DB cleanup (uploads/business_{id}/)
বর্ণনা:
  - নতুন আপলোড (লোগো, img, documents, media, invoice_logos) business_{id}/ ফোল্ডারে সেভ
  - পুরনো shared uploads/ পাথে থাকা ফাইল legacy fallback দিয়ে কাজ করবে
  - Superadmin business delete → DB transaction + uploads/business_{id}/ ফোল্ডার auto-delete
  - Registration-এ লোগো legacy থেকে business ফোল্ডারে migrate

পরিবর্তিত ফাইল:
  - app/Utils/BusinessUploadUtil.php (নতুন)
  - app/Utils/BusinessUtil.php
  - app/Utils/Util.php
  - app/Utils/ProductUtil.php
  - app/Utils/TransactionUtil.php
  - app/Http/helpers.php
  - app/Product.php
  - app/Media.php
  - app/Transaction.php
  - app/TransactionPayment.php
  - app/Http/Controllers/BusinessController.php
  - app/Http/Controllers/InvoiceLayoutController.php
  - app/Http/Controllers/SellController.php
  - app/Http/Controllers/PurchaseController.php
  - app/Http/Controllers/PurchaseOrderController.php
  - app/Http/Controllers/ExpenseController.php
  - app/Http/Controllers/ReportController.php
  - app/Http/Controllers/TransactionPaymentController.php
  - Modules/Superadmin/Http/Controllers/BusinessController.php
  - Modules/Superadmin/Resources/views/business/show.blade.php
  - Modules/Connector/Transformers/BusinessResource.php
  - resources/views/sale_pos/partials/product_list.blade.php
  - resources/views/sale_pos/product_row.blade.php
  - resources/views/sale_pos/partials/guest_payment_form.blade.php

Database migration:
  - নেই

Live-এ ম্যানুয়াল কাজ:
  - php artisan view:clear

Deploy নোট:
  - পুরনো বিজনেসের ছবি/ডকুমেন্ট যাচাই (legacy path)
  - নতুন আপলোড uploads/business_{id}/ তে যাচ্ছে কিনা দেখুন
  - Superadmin test business delete → DB + ফোল্ডার ক্লিনআপ (production-এ সতর্কতা)

[2026-06-28] — Business upload URL performance fix
বর্ণনা:
  - relativePath() প্রতিটি URL-এ is_file() চালাত — POS/Product list স্লো হচ্ছিল
  - business_{id}/ ফোল্ডার না থাকলে legacy URL (ডিস্ক চেক ছাড়া)
  - per-request cache যোগ — একই ফাইল বারবার চেক হয় না

পরিবর্তিত ফাইল:
  - app/Utils/BusinessUploadUtil.php

Database migration:
  - নেই

Live-এ ম্যানুয়াল কাজ:
  - নেই

Deploy নোট:
  - POS ও Product list স্পিড আগের মতো যাচাই করুন

[2026-06-28] — Upload URL speed fix v2 (zero disk stat + N+1)
বর্ণনা:
  - business_{id}/ থাকলেও প্রতি ছবিতে is_file() চলত — POS/Product list এখনও slow ছিল
  - URL বানানোতে আর disk check নেই (শুধু delete/replace-এ absolutePath stat করে)
  - Product list: image_url accessor + N+1 DB query সরানো, eager-loaded media ব্যবহার
  - POS: session ছাড়া সরাসরি business_id দিয়ে URL
  - migrateAllBusinessUploads() — পুরনো legacy ফাইল business ফোল্ডারে সরাতে

পরিবর্তিত ফাইল:
  - app/Utils/BusinessUploadUtil.php
  - app/Product.php
  - app/Http/helpers.php
  - app/Http/Controllers/ProductController.php
  - app/Http/Controllers/SellPosController.php
  - resources/views/sale_pos/partials/product_list.blade.php
  - resources/views/sale_pos/product_row.blade.php

Database migration:
  - নেই

Live-এ ম্যানুয়াল কাজ:
  - পুরনো ছবি missing হলে একবার: php artisan tinker → BusinessUploadUtil::migrateAllBusinessUploads(BUSINESS_ID)

Deploy নোট:
  - POS + Product list speed পুনরায় টেস্ট করুন

[2026-06-28] — Product image: stop duplicate media + img storage
বর্ণনা:
  - variation image upload আগে media/ তে save + img/ তে copy হত (২টি ফাইল)
  - এখন media → img move, variation media DB row delete — শুধু ১টি ফাইল

পরিবর্তিত ফাইল:
  - app/Utils/ProductUtil.php

Database migration:
  - নেই

Live-এ ম্যানুয়াল কাজ:
  - আগের duplicate img+media ফাইল manually delete (ঐচ্ছik)

Deploy নোট:
  - Single product variation image upload → শুধু business_{id}/img/ তে ১টি ফাইল

[2026-06-28] — Superadmin business delete fix
বর্ণনা:
  - Delete order bug: business_locations transactions-এর আগে delete হচ্ছিল (FK error)
  - Wrong table names: barcode→barcodes, account→accounts
  - variation_location_details (no business_id column) removed from loop
  - permissions/roles delete শুধু business_id column থাকলে

পরিবর্তিত ফাইল:
  - app/Utils/BusinessUtil.php

Database migration:
  - নেই

Live-এ ম্যানুয়াল কাজ:
  - নেই

Deploy নোট:
  - Superadmin → All Businesses → test business delete যাচাই

================================================================================
Deploy করার সময় সংক্ষিপ্ত চেকলিস্ট
================================================================================
1. উপরের তালিকার সব ফাইল আপলোড
2. php artisan migrate --force (migration থাকলে)
3. php artisan config:clear && php artisan config:cache
4. php artisan view:clear && php artisan route:cache (প্রয়োজন হলে)
5. ম্যানুয়াল স্টেপ (উপরে লেখা) সম্পন্ন
6. টেস্ট → তারপর এই ফাইলে entry "DEPLOYED on YYYY-MM-DD" হিসেবে চিহ্নিত করুন

বিস্তারিত গাইড: New_Update_in_Cpanel.txt
