Changes.md
This is a changes.md file for repository testererplaravel11.
All notable changes to this repository will be documented in this file.
The format is based on Keep a Changelog
[Released]
1.6.0 - 2026-10-22
Security:
- แก้ช่องโหว่ PHP2Shell (CVE-2026-109618 / CVE-2026-109619, unauthenticated RCE): ทุก image (web, queue, scheduler) และ CI ใช้ PHP 8.4 (
phpswoole/swoole:php8.4-alpine, php:8.4.27-fpm) ซึ่งเป็นรุ่นที่แก้แล้ว — ก่อนหน้านี้ queue/scheduler ค้างที่ PHP 8.2 และ web ที่ 8.3
- อัปเดต dependency ที่มี security advisory (dompdf, guzzle, psr7, knp-snappy, league/commonmark, flysystem, livewire, maatwebsite/excel, phpspreadsheet, phpseclib, medialibrary, psysh, symfony/*) —
composer audit ไม่พบ advisory
Changed:
- อัปเกรด Laravel 11 → 13 (13.38) และ PHP ^8.4 (Laravel 11 หมด security support ตั้งแต่ 2026-03-12). อัปเกรด
phpunit 12, laravel/tinker 3, spatie/laravel-permission 8, barryvdh/laravel-debugbar 4, spatie/laravel-ciphersweet 1.9, octane, telescope, socialite, jwt-auth, excel, medialibrary, livewire. ตั้ง config.platform.php ใน composer.json เพื่อให้ lock ตรงกับ PHP ต่ำสุดที่ใช้งาน
- ลบ
spatie/laravel-activitylog และ config/activitylog.php (โค้ดไม่เคยเรียกใช้ — audit log ใช้ regulus/activity-log เหมือนเดิม; เพิ่ม ActivityLogWritesRowTest)
- Email OTP สำหรับทุกคนตั้งแต่ 2026-11-01 (
MFA_EMAIL_OTP_FROM, เวลา Asia/Bangkok): ทุก login (password และ SSO) ต้องใส่รหัสทางอีเมล, ไม่ใช้ Google Authenticator แล้ว; ลบตัวเลือกวิธี OTP, หน้า setpassword และการบังคับเปลี่ยนรหัสผ่านตามรอบ. session อยู่ได้ 30 วัน (SESSION_LIFETIME=43200)
- Admin: หน้า
user/{id}/sessions ดู session ของผู้ใช้ (อุปกรณ์, IP, ใช้งานล่าสุด) และ revoke ทีละอัน/ทั้งหมด (rotate remember_token ด้วย)
- Model HTML helper (
BackLog, BankGuaranteed, CorrectiveMaintenance, PMDetail, ฯลฯ) คืน HtmlString และ escape ข้อมูลผู้ใช้ด้วย e() เพื่อกัน XSS
CustomerPerson: ย้าย logic ไป CustomerPersonService พร้อม log การเปลี่ยนแปลง; อัปโหลดรูปโปรไฟล์พร้อม crop; ค้นหาลูกค้าด้วย id ได้; ปรับตัวกรองรายงานขายลูกค้า
Added:
- คำสั่ง
users:disable-inactive (รันทุกคืน): เตือนผู้ใช้วันที่ 23, แจ้ง admin ก่อนหนึ่งวัน, ปิดบัญชีที่ไม่ใช้งาน 30 วัน (ตัด session ทั้งหมด เก็บ role ไว้). รายงานอย่างเดียว จนกว่าจะตั้ง AUTO_DISABLE_INACTIVE_USERS=true; --dry-run บังคับรายงาน. admin ตั้งยกเว้นบัญชี service/API ได้ที่หน้า sessions
Fixed:
- GCS storage ใช้ไม่ได้บน Laravel 13 (
Call to undefined method League\Flysystem\Filesystem::gcsServiceAccount()): Laravel 13 bind callback ของ Storage::extend() กับ manager แทน provider; เพิ่ม GcsStorageDriverResolvesTest
- ปิดผู้ใช้ด้วยมือแล้ว session เดิมยังใช้ได้จน session หมดอายุ (นานสุด 30 วัน) และ role ถูกลบทำให้กู้คืนแล้วไม่มีสิทธิ์ — ตอนนี้ตัดทุก session/remember-me และเก็บ role ไว้
SearchEncrypted::searchEncryptedCollectionNoJoinTable มี default ก่อน parameter บังคับ (deprecation ขึ้นทุก test)
spatie/laravel-ciphersweet 1.9: ใช้ getCipherSweetEncryptedRow() แทน static property ใน BoonmeelabApiController, BoonmeelabLimitedService, ProjectController
ImageUploadService: สร้าง Intervention ImageManager ตรง ๆ เพราะ Laravel 13 ลงทะเบียน binding image ของตัวเอง
- Test:
AccountLetterofGuaranteeFilterTest สร้าง metaoptions เอง, PurchasePlanDomesticFundLimitTest ตรวจ error จริง (เดิมผ่านเพราะหน้า error แสดงโค้ด), แปลง @dataProvider เป็น attribute (PHPUnit 12)
Known issues:
convertStringToNumeric ไม่ตัด "บาท" ท้ายตัวเลข ทำให้เช็คเพดาน fund 9,999,999,999.99 ไม่ทำงาน — บันทึกไว้ที่ docs/backlogs/purchase-plan-fund-limit-text-suffix.md
Deploy notes:
- Rebuild image ด้วย
--pull --no-cache แล้ว restart web, queue, scheduler ทั้งสามตัว; ตรวจ php -v ต้องเป็น 8.4.27 ขึ้นไป. PHP2Shell: patch ไม่ลบ shell ที่ถูกฝังไว้ — ตรวจ log ช่วง 2026-10-20 เป็นต้นไปก่อนที่ pod เก่าจะหาย
- รัน
php artisan migrate (2 ไฟล์: 2026_10_20_000001_create_sessions_table — ข้ามถ้ามีตารางแล้ว, 2026_10_21_000001_add_inactivity_columns_to_users_table — ตั้งเวลานับ 30 วันของทุกคนเริ่มที่เวลา deploy)
- ต้องใช้
SESSION_DRIVER=database (หน้า sessions ทำงานกับ driver นี้เท่านั้น). อย่าเปลี่ยน APP_KEY และไม่ต้องเปลี่ยน session serialization
- ตั้ง
MFA_EMAIL_OTP_FROM ถ้าต้องการวัน cutover อื่น (ค่าเริ่มต้น 2026-11-01 00:00:00). AUTO_DISABLE_INACTIVE_USERS ให้ปล่อย false ไว้ประมาณหนึ่งสัปดาห์ ดูรายงานก่อนเปิด true
- ห้ามค้าง
config:cache / route:cache ใน bootstrap/cache/ (มีแค่ packages.php, services.php)
- เก็บ image tag เดิมไว้ rollback ได้ (ไม่มี migration ที่ทำให้ rollback ไม่ได้)
1.5.16 - 2026-10-16
Added:
- Boonmee Lab (Limited): API ในสัญญาเดิมของ Limited —
/api/v1/sitem/* (id เป็น string, level V → VIP, filter ครบ, ไม่รวมโครงการ power) ผ่าน BoonmeelabLimitedService เปิดด้วย flag boonmeelab_limited_contract (Limited เปิด, Corp ปิด). โค้ดชุดเดียวเสิร์ฟได้ทั้งสอง edition ตาม SITEM_TENANT ของแต่ละ server; URL /p/api/v1/sitem/* เดิมของ Corp ไม่เปลี่ยน
- Pojjaman (Limited): ความคืบหน้าแบบ %EV = ΣEV ÷ งบล่าสุด สำหรับโครงการที่ bind แล้ว (หน้า purchase, executive, Cost to Cost) และราคา oversea ที่ sync มาเป็น THB ใช้เป็นงบ — flag
pojjaman_ev_progress (ต้องเปิด pojjaman_integration ด้วย)
- Flag ใหม่
pojjaman_integration (Limited เปิด, Corp ปิด) ครอบ route Pojjaman ทั้งหมด (binding, snapshot, document return, billing, cost, alias /pjm2-test-*, outbound test, refresh-budget-commit) และ command pojjaman:backfill-nano-id — บน Corp route เหล่านี้ตอบ 404
- Product Alarm: validate ฟอร์มสร้าง (
StoreProductAlarmRequest), ออกรายงาน Excel และ PDF (PDFGenerateProductAlarms, ProductAlarmReportQuery), โหลดสินค้าในโครงการแบบ dynamic, ถอดรหัสข้อมูลก่อนแสดง
- อีเมล OTP: รหัสเป็นก้อนเดียวเลือก/คัดลอกได้สะอาด และช่องกรอกรองรับ autofill
one-time-code
- Sales Forecast: ปุ่มลบแถวลูกค้า/สินค้า (พร้อม tooltip), ข้ามแถวว่าง, ส่ง batch ที่ขาดไปหน้า
project/new
Fixed:
- คอลัมน์ที่เข้ารหัส (CipherSweet) สั้นเกินไป: ciphertext ยาวประมาณ
5 + 4/3 × (bytes + 40) ตัวอักษร จึงเกิด "Data too long" (หรือถูกตัดเงียบ) กับ varchar(20..255) — ภาษาไทย 3 byte/ตัวอักษร varchar(255) จึงเก็บได้ราว 50 ตัวอักษร. migration ขยาย 56 คอลัมน์เป็น TEXT (เก็บ nullability; คอลัมน์ที่มี index หรือ default เป็น varchar(700)) และเพิ่มคอลัมน์ servicetickets.contact_point / officer ที่ model เข้ารหัสแต่ไม่มี migration สร้าง
- Sales Forecast: ต้องเลือก
sales_account_id (แสดงข้อความไทย), โหลด noty.min.js ที่ขาดในหน้า demand (ยืนยันลบรูปได้), findOrFail เมื่อ id ไม่ถูกต้อง, ป้องกัน ProductItem เป็น null, SalesDemand::getAssociatedProject คืน HtmlString
- บัญชี - หนังสือค้ำประกัน (BG): แก้ 500
Undefined array key 'start_value' ตอนเพิ่มค่าใช้จ่าย (validate ครบ 8 field, ตัดเครื่องหมายคั่นหลักพัน, ค่า default), ปุ่มลบไฟล์เดิมเปิด/ดาวน์โหลดแทนที่จะลบ (route asset/{id}/cancel ถูกบังโดย show.asset), allowance ของ citys ไม่เคยบันทึกเพราะพิมพ์ผิด $itys, ลิงก์สีขาวบนแถวสีเข้ม
- สร้าง role / permission ไม่ได้:
Role ใช้ Eloquent model ธรรมดากับตาราง roles เดิมแทน Role ของ Spatie
- Excel รายงานเอกสารไม่ครบ (lack-document) ใช้ชื่อไฟล์ของรายงาน not-continuity
- Excel สรุป oversea ออกรายงานประเมินผู้รับเหมาแทน — ตอนนี้ใช้
ExcelGenerateSummaryPurchaseOversea พร้อมแก้ job ที่ไม่เคยรัน (ห่อแถวใต้ชื่อ sheet, import ProjectView, filter st[] แบบ OR และเช็ค vessel)
Changed:
- ลบฟีเจอร์ Article และ Withdrawal Money (route, controller, model, view, JS, เมนู, permission) พร้อม test กันไม่ให้เมนูที่ลบกลับมา
Deploy notes:
- รัน
php artisan migrate (2 ไฟล์: 2026_10_16_000001_widen_too_short_encrypted_columns, 2026_10_17_000001_widen_borderline_encrypted_columns) — ALTER 13 ตาราง (ใหญ่สุด: users, vendors, customerpersons, customerorganizations, products) ควรรันช่วงที่ไม่ค่อยมีคนใช้
- หลัง deploy เทียบ
SHOW CREATE TABLE ของคอลัมน์ที่ขยาย บน Corp และ Limited (Corp อาจถูกขยายมือไว้แล้ว — migration จะข้ามคอลัมน์ที่กว้างอยู่แล้ว)
- ตรวจ
.env ของ Limited: SITEM_TENANT=limited (ถ้าไม่ตั้งจะเป็น corp และ route Pojjaman / Boonmee Lab ของ Limited จะหายไป), SITEM_TENANT_NAME=Limited; route เลือกตอน boot ต้อง restart (Octane: octane:reload) หรือ config:clear
- Limited: รัน
php artisan contracts:backfill-search ก่อนเปิดให้ Boonmee Lab ค้นชื่อโครงการ (ใช้ name_search)
- ตั้ง
INTEGRATION_KEY_MAILREADER ทุก server (ค่าเดียวกับ DCIM_INTEGRATION_KEY / PP_INTEGRATION_KEY ของ EmailReader) คง INTEGRATION_ENFORCE=false จนกว่า log integration จะแสดง key_valid:true ทุกครั้ง แล้วจึงเปิด true; ถ้าเปิด enforce ต้องตั้ง key ของ SMS / SmartPass / Pojjaman ให้ครบก่อน
- Pojjaman (ยังเหมือนเดิม): ต้องได้ credential ใหม่ (
POJJAMAN_ACCESS_ID, POJJAMAN_ACCESS_TOKEN) และ rotate ของเก่าที่รั่ว
1.5.15 - 2026-10-14
Added:
- Pojjaman (NanoId): ผูกโครงการกับ Pojjaman ด้วย
nano_id (21 ตัวอักษร) — endpoint pjm2-confirmProjectBinding / pjm2-projectUnBinding (unbind = ยกเลิกแถวที่ sync มา ไม่ลบ; ปฏิเสธด้วย budget_data_in_use ถ้ามี PO แล้ว). ยอมรับทั้ง header X-Pojjaman-Token และ X-Integration-Key
- Pojjaman: รับ snapshot
syncBudgetRevision / syncWBSProgress แล้ว reconcile เข้า purchase plan (domestic/oversea) ด้วย wbs_code — แผนที่ถูกตัดออกจะถูก cancel/revive ตาม key ไม่ลบ/ไม่ insert ซ้ำ
- Pojjaman: field งบของแถวที่ Pojjaman ป้อนมาถูกล็อกในหน้าแก้ไข ERP (ฟอร์ม + allocation modal +
update_allowance/updateInterFund)
- Pojjaman: document return (PR/WR/PO/SC) เปลี่ยนสถานะแผนตามลำดับ
pending → have-pr → po และหาแผนด้วย SitemId หรือ BudgetLineCode/WBSCode; ลบ PO กลับเป็น have-pr; commit cost ที่ SitemId=0 map ตาม budget line
- Pojjaman: Form Request validation ให้ webhook ขาเข้า (document/billing/cost) — ข้อมูลไม่ครบตอบ HTTP 500 รูปแบบเดิม
{"response":"information missing",...}
- หน้าโครงการ: badge
nano_id + ปุ่ม copy, คอลัมน์ wbs/EV ในหน้า purchase, ปุ่ม Refresh Budget & Commit (throttle 30 วินาที) และสรุปแผน (เฉพาะโครงการที่ bind)
- F-DM-003/1 ใบขออนุมัติงบ (PDF) สำหรับ Limited โครงการที่ bind แล้ว — flag ใหม่
project_budget_approval_domestic (Limited เปิด, Corp ปิด); เปิด project_budget_actual_menu ให้ Limited
- Command
pojjaman:backfill-nano-id เติม nano_id ให้โครงการเดิม
- Command
service-customer-contact:repair-signatures (--apply จึงจะแก้จริง) ซ่อมลายเซ็นลูกค้า CM/PM ที่ไม่แสดง
Fixed:
- Security:
product_detail ของแผน oversea ถูก render แบบ raw และ reconciler เก็บข้อความจาก Pojjaman ดิบ — ตอนนี้ escape ก่อนเก็บ (แถวที่ sync ก่อนหน้านี้ยังเป็นข้อความดิบจนกว่าจะ re-sync)
PojjamanDocumentController: แก้ typo สถานะ 'purchase-proceed'
- ลายเซ็นลูกค้า CM/PM: กันกดบันทึกซ้ำ (ปิดปุ่มระหว่างส่ง), แสดงลายเซ็นล่าสุดเมื่อมีซ้ำหรือถูก soft-delete, จัดการ concurrency และ log รายละเอียดการบันทึก (
SignatureService)
memory_limit ใน TraitFunctionsCenter (ค้นหา CustomerPerson) เดิม ลด เป็น 256M ตอนนี้ยกขึ้นอย่างเดียว ไม่ลดค่าที่สูงกว่า
- หน้า log: เพิ่มตัวกรองประเภท log และจำประเภทที่เลือกไว้ตอนค้นหา
ProjectView (HTML helpers) คืน HtmlString ทำให้ {{ }} แสดง markup ถูกต้อง และ escape ข้อมูลจากผู้ใช้ (ชื่อ/ชื่อไฟล์) ด้วย e() ปิดช่อง stored XSS; ต้อง (string) ตอน serialize (gallery JSON, Excel GCF payload, Collection::implode)
Changed:
- ลบ upload แบบเก็บในดิสก์ local ที่ไม่มีหน้าไหนอ่าน/ส่งไฟล์มา: helper
newAttachment/setAttachment/addAttachment/makeDirectory, model FileAttachment, ProjectView::showAttachments, TheForm::showAttachmentList, route project/{id}/upload, product/{id}/upload-image, cm/{id}/upload-attachment และการเขียนไฟล์แนบใน marketing event/stock, fund/organize/stock, production, bank guarantee (หลายจุดเดิม 500 อยู่แล้ว). ไฟล์แนบ Bank Guarantee ใช้ระบบ Asset (bg_attachment/bg_attachment_out) เหมือน upload อื่น
stockmarketings.images เป็น nullable (migration ใหม่)
Deploy notes:
- รัน
php artisan migrate (1 ไฟล์: 2026_10_14_000001_make_stockmarketings_images_nullable)
- รัน
php artisan pojjaman:backfill-nano-id ทุก environment
- เทียบ
SHOW CREATE TABLE ของตาราง 2026_10_08_1000* กับ migration (ถ้า production มีตารางอยู่ก่อน)
- ตั้ง
INTEGRATION_KEY_POJJAMAN และคง INTEGRATION_ENFORCE=false (log-only) จนกว่าจะ UAT กับทีม Pojjaman เสร็จ
- โครงการที่เคย sync ด้วยเวอร์ชันก่อนหน้า: ให้ Pojjaman ส่ง budget revision ใหม่ เพื่อให้
product_detail ถูก escape
- แจ้งทีม Pojjaman: URL เดิมตอบ 500 "information missing" เมื่อข้อมูลไม่ครบ, reason ใหม่
not_bound / invalid_confirmed_at, commit cost ไม่สร้างแผนใหม่อีกต่อไป
- ตรวจบน UAT ว่าตาราง legacy ของ marketing event / organize / stock project / fund / production (ไม่มี migration) ไม่มีคอลัมน์ไฟล์แนบที่เป็น NOT NULL ไม่มี default
1.5.14 - 2026-10-12
Added:
- เพิ่ม alias ให้ Pojjaman callback ชื่อเดิม
/p/api/pjm2-test-* (scDocumentReturn, poDocumentReturn, prDocumentReturn, wrDocumentReturn, docUploadedby, updateARRV, cancelRV, cancelInvoiceAR, updateCommitCostLinebyProject, getCommitCostLineByProject/{id}) ชี้ไป controller /pjm2/* ใหม่ ใช้ audit + throttle ชุดเดียวกัน — Pojjaman ยังเรียกชื่อเดิม ~3,500 ครั้งตั้งแต่ ส.ค. ถ้าไม่มีจะ 404 ตอน cutover
- เพิ่ม migration แบบ guarded:
projects.name_search / projects.contract_review_search (ฐานข้อมูลที่ตาราง projects ถูก migrate ไปแล้ว เช่น Limited ไม่เคยได้คอลัมน์นี้ ทำให้ค้นหาชื่อ/เลขสัญญาไม่มีข้อมูล)
Fixed:
- Security: ลบ route สาธารณะ
GET /generate-link ที่คืน URL รีเซ็ตรหัสผ่านใช้งานได้ให้ทุกอีเมลโดยไม่ต้อง login (มีมาตั้งแต่ พ.ย. 2025) — ใช้ภายใน AuthController เท่านั้น. ลบ route นี้ยังแก้ชื่อ route temp-link.generate ซ้ำที่ทำให้ route:cache ล้มตอน deploy
- Security:
dt ของหน้า Sales Forecast และ Excel export ถูกต่อเข้า SQL ตรงๆ (SQL injection) — ตอนนี้ allow-list เหลือเฉพาะประเภทวันที่ที่กำหนด
- Google login/password recovery:
invalid_grant (code ใช้ซ้ำ/refresh หน้า callback) ไม่ 500 แล้ว แต่ redirect กลับพร้อมข้อความ. password recovery ผ่าน Google เคย login โดยข้าม 2FA — บัญชีที่เปิด Google Authenticator/OTP จะถูกส่งไป login ปกติแทน
- คืน
POST /p/api/testing-mail (รับอีเมลแจ้งเตือน Packet Power/EMX) ที่ถูกลบผิดพลาดใน 1.5.13 — ยังมีผู้เรียกบน production (ราว 15 นาที/ครั้ง) แต่ไม่ปรากฏใน log ของเซิร์ฟเวอร์ Limited เดิม. pbx/*, megvii/* API, test-webhook (Kentix) ยังถูกลบตามเดิม และลบ webhook() ของ Kentix ที่ไม่ใช้แล้ว
- บันทึกค่าใช้จ่าย Service Request Fund: ช่องที่ถูกล้างส่ง
NaN ทำให้ SQL error 1366 (500) — ฝั่ง server ตรวจว่าเป็นตัวเลข (422) และ JS ส่ง 0 แทน
JWT_LEEWAY / JWT_BLACKLIST_GRACE_PERIOD cast เป็น int (กัน Carbon TypeError ตอน login Smile เมื่อ env เป็น string)
- Migration
create_seorankings_table ข้ามถ้าตารางมีอยู่แล้ว (production clone จาก legacy มีตารางนี้ ทำให้ migrate ล้มด้วย error 1050 และบล็อก migration ถัดไป)
Deploy notes:
- รัน
php artisan migrate (migration ใหม่ 1 ไฟล์ แบบ guarded + seorankings ถูกแก้ให้ข้าม). เทียบ SHOW CREATE TABLE seorankings กับ migration ก่อน (ถ้าตาราง legacy คอลัมน์ต่างกัน dashboard SEO อาจต้องมี alter migration)
- Limited: หลัง migrate รัน
php artisan contracts:backfill-search เพื่อเติม name_search/contract_review_search ให้แถวเดิม
- ตรวจ access log หา
/generate-link ก่อน deploy นี้ และเทียบ temporaryurltokens (purpose some_action) กับคำขอ recovery จริง — ถ้ามีรายการผิดปกติให้บังคับรีเซ็ตรหัสผ่านผู้ใช้นั้น
- production ควร deploy
release ล่าสุดนี้ทั้งหมด (เดิมบางที่ยังรัน 1.5.3)
1.5.13 - 2026-10-09
Added:
- เพิ่ม middleware
integration.audit (โหมด log-only) ครอบ route สาธารณะที่เครื่องอื่นเรียก (SMS, SmartPass, EmailReader/DCIM, Pojjaman) บันทึกว่าใครเรียก route ไหน ลง log channel integration (เก็บ 60 วัน, ไม่บันทึก query string/body) — ตั้ง INTEGRATION_ENFORCE=true และ INTEGRATION_KEY_* ภายหลังเมื่อรู้ผู้เรียกครบ ดู docs/runbooks/integration-callers-audit.md
- Pojjaman callback (
/pjm2/*) ใช้ header X-Pojjaman-Token และจำกัด 60 request/นาที/IP
- เพิ่ม endpoint รับอีเมลแจ้งเตือน King Pigeon:
POST /p/api/testing-mail/dcim/king-pigeon (พอร์ตจาก SitemERP)
- เพิ่ม migration แบบ guarded สำหรับ Pojjaman:
projects.nano_id + คอลัมน์ผูก Pojjaman, ตาราง project_pojjaman_budget_revision/project_pojjaman_progress, คอลัมน์ wbs_code/pojjaman_ev ใน purchaseplans/purchaseplanoverseas และขยาย actual_progress เป็น DECIMAL(8,2) (ข้ามถ้ามีอยู่แล้ว ไม่มี down)
- เพิ่ม migration ขยาย
dcimlinemessagepatterns.unique_phrase เป็น TEXT (ข้อมูลที่เข้ารหัสยาวเกินคอลัมน์เดิม)
- เพิ่มตัวเลือก
TRUSTED_PROXIES (จำกัด proxy ที่เชื่อ forwarded header) และ TRUST_CLOUDFLARE_CLIENT_IP (ใช้ CF-Connecting-IP เป็น IP ผู้เรียก เฉพาะเมื่อมาจาก proxy ที่เชื่อ) — ค่าเริ่มต้นไม่เปลี่ยนพฤติกรรมเดิม
- เผยแพร่เอกสาร M1 encrypted field map (
docs/reviews/encrypted-field-map/), upload surface review, CipherSweet key plan, runbook ตรวจ caller ของ route สาธารณะ
- PDF ใบลาของพนักงาน, จำกัดรูปในรายงาน PDF ไม่เกิน 50 รูปล่าสุดพร้อมแจ้งเตือนเมื่อเกิน, รายงานใหม่และปรับ filter ของ project query
- เร่ง test suite จาก ~39 นาทีเหลือ ~3 นาที พร้อมรายงานเวลาต่อ test (
composer test:report)
Fixed:
- แก้ใบรับประกัน (warranty): สร้างรายการสินค้าไม่ได้ และ PDF พิมพ์โครงการแรกแทนโครงการที่เลือก
- แก้ DCIM: lookup category/alert ด้วย
unique_phrase ที่เข้ารหัสไม่เคย match (ใช้ whereBlind), ค้นหารายการ pattern ด้วยอีเมลไม่เคยเจอ
- แก้ค้นหา LINE message pattern ที่ไม่เคย match ฟิลด์ที่เข้ารหัส (เปลี่ยนเป็นกรองฝั่ง PHP หลังถอดรหัส)
- แก้การลงทะเบียนผู้ขาย (vendor accept) ที่ไม่เคยตรวจพบข้อมูลซ้ำ (ใช้ blind index)
- SmartPass
/p/api/temp-save-image จำกัดอัตรา 30/นาที/IP และ 120/นาที รวม และบันทึกผู้เรียก
- ไฟล์ที่ผู้ใช้อัปโหลดถูกส่งพร้อม
X-Content-Type-Options: nosniff และบังคับดาวน์โหลดสำหรับ html/svg/xml (กัน stored XSS)
- แก้ date-parsing null-safety ใน
TraitFunctionsCenter, แก้ namespace App\Trait\ เป็น App\Traits\
- แก้ filename/Content-Disposition ของ PDF ที่เป็นภาษาไทย (UTF-8), แก้ลบรูป (
cancel_image), validation ยกเลิกคำขอพร้อม comment, การเรียง/กรอง marketing demand, ปุ่มลบในหน้า product task, Excel รายงานลูกค้าฝ่ายขายให้ตรงกับ filter บนหน้าจอ, เลือกปีงบประมาณปัจจุบันอัตโนมัติในรายงานขาดเอกสาร
Changed:
- ลบ
BaseController ย้าย 47 controller ไปใช้ TraitFunctionsCenter โดยตรง, เพิ่ม RevisionController, เปลี่ยนชื่อ app/Trait เป็น app/Traits
- ลบไฟล์ view
Old-20260526_* ของ PM ที่ไม่ได้ใช้ และหน้า customer service live ที่ไม่ได้ใช้
- ลบ route สาธารณะที่ไม่มีผู้เรียกสำเร็จเลยใน 15 เดือน (จาก access log ของเซิร์ฟเวอร์ Limited เดิม):
pbx/* (ไม่ได้ต่อ PBX แล้ว), megvii/* API, test-webhook (Kentix), testing-mail แบบเดิม, alarms/generate-pdf-and-save (route สาธารณะ) พร้อมลบ PBXController/IntegrationWebhookController — สรุปผลที่ docs/runbooks/integration-callers-audit.md
Deploy notes:
- รัน
php artisan migrate (มี migration ใหม่ 5 ไฟล์ แบบ guarded). ก่อนรันบน production ควรเทียบตาราง projects, purchaseplans, purchaseplanoverseas, dcimlinemessagepatterns ด้วย SHOW CREATE TABLE (ถ้ามีคอลัมน์ชนิดต่างจากที่คาดไว้ migration จะข้ามโดยไม่แก้)
- ตัวแปร
.env ใหม่เป็น optional ทั้งหมด: INTEGRATION_ENFORCE, INTEGRATION_KEY_SMS|SMARTPASS|MAILREADER|POJJAMAN, TRUSTED_PROXIES, TRUST_CLOUDFLARE_CLIENT_IP. TRUSTED_PROXIES ต้องเป็น environment variable จริงของ container เมื่อ cache config
1.5.12 - 2026-09-28
Added:
- เพิ่ม
tenant_menu_extra helper และย้ายการ gate เมนู Limited-only จาก per-action abort_unless(tenant_menu_extra) มาเป็น menu.gate middleware ครอบคลุมเมนูกว่า 20 รายการ (รายงานลูกค้า, Demand, HR, ทะเบียนทรัพย์สิน/Office Asset, Marketing bidding, SEO ranking dashboard และอื่นๆ)
- พอร์ตเมนู Limitless HR module (ทะเบียนทรัพย์สิน, Office Asset, user menus) และ dashboard profit-summary พร้อม gate ด้วย tenant menu flag
- Vendor Portal: เพิ่ม JWT authentication สำหรับ
UserVendor model และ vendor ownership checks middleware
- เพิ่มฟีเจอร์ search พร้อม pagination/date filter สำหรับ sales merchandise withdrawal report, popup ยืนยันก่อนลบข้อมูลในหน้า PM/CM management, validation สำหรับ commission ticket request, Excel export สำหรับ marketing bidding และ SEO ranking dashboard
- เพิ่ม query parameter
created_start_date/created_end_date สำหรับ Boonmeelab /demand endpoint
setDate() รองรับ format วันที่ Y-m-d เพิ่มจาก d/m/Y เดิม
Fixed:
- แก้ปัญหา
whereRaw บนฟิลด์ที่เข้ารหัสหลายจุดใน DCIM: Bug 3 (EBO alert ถูก mapping ผิดใน imap_line_dcim()), Bug 5 (WIB-8000 null pattern ทำให้ fatal error), Bug 6 (Product.label ใน WIB-8000 handler) — ดูรายละเอียดที่ docs/reviews/dcim-audit.md
- แก้ withdrawal report 500 error และปัญหา encrypted project name, แก้
UserResponsibleController 500 error บนหน้า /user/responsible
- แก้ null-deref และ audit-trail bug บน vendor portal, แก้ cross-portal JWT confusion
- แก้ปัญหา sales target meta และ sales demand summary แสดงตัวเลขผิด (cast เป็น float, normalize ค่าที่ไม่ใช่ตัวเลข)
- แก้ HTML unescape และ avatar ไม่แสดงในหน้ารายงานสรุปการเข้าพบลูกค้า/Demand
- แก้
inter_fund ถูก copy จาก fund ผิดตอนสร้าง project ใหม่, แก้ nullable birthday field ใน store/update/report
- แก้ปัญหาส่งอีเมลโดยไม่มีผู้รับที่ถูกต้อง, กู้คืน route โครงการ rd-bd/av/security ที่หายไป
- ปรับปรุง escape ค่าที่กรอกใน TheForm text input/textarea กัน XSS
Changed:
- Refactor
LineEmailController/LineEmailDcimController/LineTestingController เป็น service classes (LineNotifyService, LineMessagePatternService, EmailAlertReportService, DcimAlertService) — LINE token/URL ย้ายจาก hardcode ไปที่ config/services.php + .env (ทุก deployment ต้องตั้งค่า .env ใหม่ก่อนขึ้น production)
- ลบ route ที่ตายแล้ว (ไม่มี controller จริงมาตั้งแต่แรก): np-timer,
/notice, /issues, purchase-plan other-fund sub-CRUD, PDPA incident form (prototype ที่ไม่เสร็จ) — รายละเอียดที่ docs/reviews/route-cleanup-2026-09-23.md
- ตัดสินใจให้ Corp และ Limited ใช้ schema และ encryption scope เดียวกันทั้งหมด (ไม่ลดฟิลด์ที่เข้ารหัสสำหรับ Limited อีกต่อไป) — ดู
docs/reviews/m1-encryption-recommendation.md (superseded)
- Refactor
ServiceCustomerContact model ให้ใช้ polymorphic relation แทนการซ้ำฟิลด์ใน CM/PM
1.5.11 - 2026-09-07
Added:
- เพิ่ม query parameter
review_start_date/review_end_date สำหรับกรอง contract_review_date ใน Boonmeelab /projects endpoint ให้ตรงกับ basis ของ report/sales/summary (ยกเว้นโครงการที่ available เป็น cancel/forecast/remove, type เป็น rd-bd, และ work_type เป็น sub)
1.5.10 - 2026-09-07
Added:
- เพิ่ม query parameter
po_start_date/po_end_date สำหรับกรอง customer_purchase_order_date ใน Boonmeelab /projects endpoint (ข้ามเงื่อนไข contract_review_date/work_type='power' เดิม เพื่อให้ตรงกับ semantic ของรายงานฝ่ายขายที่ใช้วันที่ PO)
Fixed:
- แก้ปัญหา Boonmeelab
/demand endpoint ไม่กรองตาม start_date/end_date ที่ส่งมา (เดิม endpoint รับ parameter แต่ไม่ได้นำไปใช้กรอง) และแยกกรณี zero-date (0000-00-00) ออกจากผลลัพธ์เมื่อกรองด้วย end_date
1.5.9 - 2026-09-04
Added:
- เพิ่มการตั้งค่า tenant configuration ใน
.env.example และ gate เมนู Actual Cost/Expenses ของ project/budget-actual ด้วย tenant_feature (มี global kill-switch และค่า default ต่อ tenant)
- เพิ่ม query parameter
include_ms_ss_ts สำหรับ Boonmeelab /projects และ /demand endpoints (ตามคำขอของ Kenttp ให้โครงการรหัส MS/SS/TS แสดงใน Dashboard)
- เพิ่ม query parameter
start_date/end_date สำหรับกรองวันที่ใน Boonmeelab /salestarget endpoint (แปลง พ.ศ. เป็น ค.ศ. ก่อนเปรียบเทียบและรวมยอดรายไตรมาส)
- ปรับ responsive design หน้า equipment data entry tab และปรับตำแหน่ง Action dropdown ให้ใช้งานบนมือถือได้ดีขึ้น
Fixed:
- แก้ปัญหาระบบส่งอีเมล project document letters ที่ไม่เคยส่งจริง (Mail::send เดิมถูก comment ไว้), แก้ payload ที่ขาด project_id ทำให้ ProcessOrderPDF error, แก้ EventServiceProvider queue listener ที่ error เมื่อ job property ไม่ public (ทำให้ job หยุดทำงานเงียบๆ), และทำให้ลิงก์อีเมลใช้ได้ครั้งเดียว (ลบไฟล์และซ่อนจาก /asset หลังดาวน์โหลด)
- ลบคำสั่ง CleanUpTempFolder/DeleteOldPdfFolderJob ที่ตายแล้ว (ยืนยันว่าไม่เคย schedule บน production), แยก generate_pdf_mail ไปเป็น PDFGenerateMailProjectShowManagement ให้เก็บ PDF เป็น Asset ถาวรผ่าน ProcessOrderPDF แทนการเขียนไฟล์ชั่วคราว (แก้ bug raw-bytes-vs-JSON ไปด้วย), ลิงก์อีเมลหมดอายุใน 3 วัน, แก้ null CustomerOrganization access และ literal
<br> ในหัวอีเมลที่พบระหว่างทดสอบ
- แก้ปัญหา password-expiry middleware ที่ block route เปลี่ยนรหัสผ่านของตัวเอง ทำให้ผู้ใช้ที่รหัสผ่านหมดอายุเปลี่ยนรหัสผ่านไม่ได้
- แก้ปัญหา null-asset crash บนหน้า public asset route, จำกัดตาราง CM/PM history บนหน้า product/service ให้แสดงล่าสุด 10 แถวพร้อม load more (เดิมโหลดทุกแถวทำให้หน้าโหลดช้า 12-24 วิ) และแก้ N+1 ของ Asset::find() ต่อแถว
- แก้ปัญหา uid ของ sales ที่มี zero-padding ต่างกัน (เช่น sales_014 กับ sales_14) ถูกนับแยกกันใน Boonmeelab salestarget aggregation ทำให้ dashboard แสดงแถวซ้ำ
- แก้ไข validation และการแสดงผลของแบบฟอร์ม carpar, serial number ในตาราง equipment data, และปรับปรุงการตั้งค่า database connection และการแจ้งเตือนอีเมล
- แก้ปัญหา password ที่สุ่มให้ผู้ใช้ใหม่ (Str::password) บางครั้งไม่มีตัวพิมพ์ใหญ่/ตัวเลข/สัญลักษณ์ครบทุกประเภท เปลี่ยนเป็น retry จนครบ 4 ประเภท
- ปรับ schema ให้ column ของหลายตาราง (set_passwords, smsretrievals, stockmarketinglogs, stockservices, subcontractorevaluateforms, subcontractorfailnoticerequests, tripleconnects, usercustomerallowances, usercustomers, userleaveforms, users, vendoravlregistrationforms, vendors) เป็น nullable ให้ตรงกับ schema จริงของ Database Sitem ERP Corp
- แก้ปัญหา actual_progress ของโครงการถูกล้างเป็นค่าว่างเมื่อ request ไม่ได้ส่งค่ามาด้วย (ตอนนี้คงค่าเดิมไว้ถ้าไม่ได้ส่ง)
1.5.8 - 2026-08-26
Added:
- เพิ่มปุ่มดาวน์โหลด laravel.log ในหน้า view-log (รองรับดาวน์โหลดของวันที่ย้อนหลังด้วย ไม่ใช่แค่วันนี้)
Fixed:
- แก้ปัญหา N+1 และ performance หน้า project/{id} ทุกแท็บ (index, purchase, customer, staff, products): ลบ ProjectShowController ที่เป็นแค่ตัวส่งต่อเปล่าๆ (ทำให้ dependency injection ของ sub-controller พังไปด้วย), เพิ่ม index ที่ขาดหายไปหลายตาราง, แก้ N+1 หลายจุด, ลบ query/logic ที่ตายแล้วออก
- แก้ปัญหา N+1 หน้า project/{id}/etc และ project/{id}/budget-actual (สูงสุด 29 query ต่อโหลด) พร้อมรวม logic การคำนวณ cost batch ที่ซ้ำกันทั้งสองหน้าเข้าเป็น ServiceRequestFundOptionService/LaborCostService ตัวเดียว
- แก้ปัญหา performance หน้า dashboard/service ที่ reload ทั้งหน้าทุก 60 วิ (รวม decrypt ทุกครั้ง) เปลี่ยนเป็น Livewire component แบบ polling พร้อม cache ผลลัพธ์ที่ decrypt แล้วร่วมกันทุกคนที่ดูพร้อมกัน
- แก้ปัญหา performance การสร้าง PM แบบ batch (POST project/pm) ที่ save ซ้ำสองรอบต่อ schedule (encrypt ซ้ำโดยไม่จำเป็น)
- แก้ปัญหา performance หน้าแก้ไขผู้ใช้ smile-apps (decrypt รายชื่อโครงการทุกครั้งที่โหลด) เปลี่ยนไปใช้ cache ที่มีอยู่แล้ว
- แก้ปัญหาการคำนวณ currency_rate/actual_price ของรายการจัดซื้อต่างประเทศ (PurchasePlanOverSea) ที่เขียนซ้ำไม่ตรงกันใน 4 ที่ (ProjectController x2, ReportSalesProfitNewController, ExcelGenerateReportSalesProfitNew) รวมเป็นจุดเดียวผ่าน LiveCurrencyRateService โดยยังคงพฤติกรรมเดิมทุกกรณี (fallback ไปใช้ค่าเงินสดจาก MetaOption)
- แก้ปัญหา production deploy ไม่เคยรัน
php artisan migrate --force ทำให้ migrations table ของ prod ค้างไม่ตรงกับ repo
- แก้ปัญหารายงานสรุปกำไรฝ่ายขาย (Excel) ที่คำนวณ actual_sum เป็น 0 เสมอ เนื่องจาก select เฉพาะบาง column แล้วลืม actual_progress ทำให้จัดหมวดหมู่โครงการผิดกลุ่ม
Removed:
- ลบ TesterController ทั้งไฟล์ (78 methods เดิมเป็น script one-off ผสมกับ endpoint ที่ยังใช้งานจริงและไม่มี auth) ย้ายส่วนที่ยังใช้งานจริง (webhook, asset URL lookup) ไปเป็น IntegrationWebhookController/AssetUrlController
- ลบไฟล์ ProjectShow*Controller ที่ซ้ำและตายแล้ว 6 ไฟล์ (ไม่มี route ชี้มาแล้ว)
- ลบระบบ cache รายชื่อโครงการที่ตายแล้ว (getProjectAllCache ทั้งสองชุด, Job ที่ไม่มีใครอ่านผลลัพธ์, 6 จุดที่เรียกใช้) พบและแก้ bug OR-filter ที่ทำให้คืนทุกโครงการโดยไม่กรองสถานะไปด้วย
1.5.7 - 2026-08-24
Added:
- เพิ่มคำสั่ง import รายชื่อองค์กร SM (ImportSmOrganizationList)
- เพิ่ม query parameter
start_date/end_date สำหรับกรองวันที่ใน Boonmeelab API /projects
- ปรับปรุงคำสั่ง CipherSweet encrypt (
CipherSweetEncryptColumns/CipherSweetEncryptInModel) ให้ส่งอีเมลรายงานผลและจัดการ error ดีขึ้น พร้อม refactor แยก logic ออกเป็น CipherSweetRowEncryptor/CipherSweetMailReporter
Fixed:
- แก้ปัญหา performance หน้า project/{id}/service, project/cm/{id}, project/pm/{id}, project/{id}, product/{id} และ project/cm (list) โดยเพิ่ม index ที่ขาดหายไปให้หลายตาราง (backlogs, preventivemaintenances, correctivemaintenances, products, pmdetails, paymentrules, metaconnects, assets, metaversions, comments, assetimages, worktimeusages, preventivemaintenancebys, usercustomerallowances, salesproductlists, project_roles_manage_access, projects, customersitesmsnumberconnects, producthistories, productdowntimes, reminders, tripleconnects)
- แก้ปัญหา performance การอัพโหลดรูปภาพ (POST asset/image) โดย decode ภาพครั้งเดียวและอัพโหลดไป GCS พร้อมกันแบบ concurrent แทนที่จะทำทีละไฟล์ตามลำดับ
- แก้ปัญหา performance การบันทึก payment rule (PUT project/{id}/payment-rule/{id}) ที่ re-encrypt ข้อมูลโครงการซ้ำทุกครั้งแม้แก้แค่ยอดเงินที่ไม่ได้เข้ารหัส
- แก้ปัญหา performance การ login ของลูกค้า (p/api/login) ที่ re-encrypt ข้อมูลซ้ำทุกครั้งเพื่อบันทึกแค่เวลา login ล่าสุด
- แก้ปัญหา N+1 ในหน้าแสดงสินค้า (product/{id}) ที่ query รูปภาพแยกทีละกลุ่ม
- แก้ปัญหา Boonmeelab API
/projects ที่ decrypt ข้อมูลทุกแถวก่อนแบ่งหน้า (pagination) ทำให้ช้ามากเมื่อข้อมูลเยอะ
- แก้ปัญหา performance หน้า project/{id}/products (แก้ N+1 ใน checkbox list สินค้า)
- แก้ปัญหาการ decrypt ชื่อโครงการ/contract_review ในหน้า dashboard/service และชื่อผู้อัพโหลดในหน้า project/{id}/document และ /products
- แก้ปัญหา id ซ้ำและปรับปรุงข้อความภาษาไทยในหน้าเลือกลูกค้าสำหรับแบบสอบถาม (service survey)
- แก้ปัญหา 500 error เมื่อบันทึกแบบสอบถาม (service survey) โดยไม่ตอบครบทุกข้อ และเพิ่ม validation บังคับตอบให้ครบ
- ลบระบบจำกัดสิทธิ์การเข้าถึงโครงการ (HideProjectScope) ออก เนื่องจาก concept และ implementation ผิด
1.5.6 - 2026-08-21
Fixed:
- แก้ปัญหา performance หน้า project index (รวม query count/sum เป็น query เดียว, แก้ N+1 หลายจุด)
- แก้ปัญหา performance หน้า project/service ทุกส่วน (PM, CM, Support, งานค้าง, แบบสอบถาม)
- แก้ปัญหา performance หน้าแสดงและแก้ไขงาน CM (project/cm/{id}, project/cm/new, project/cm/{id}/edit)
- แก้ปัญหา performance หน้า project/{id}/products
- แก้ปัญหา performance หน้า project/{id}/document พร้อมเพิ่ม cache เนื่องจากเป็นหน้าที่เข้าใช้งานบ่อย
- แก้ปัญหา performance หน้า dashboard/service
- แก้ปัญหา performance การบันทึกแก้ไขโครงการ (PUT project/{id}) และการบันทึกข้อมูล PM ของอุปกรณ์
- แก้ปัญหา performance API
pm/all (ปฏิทิน PM)
- แก้ปัญหา cache ของ getAllUserNameCache ที่ไม่เคยถูกใช้งานจริง ทำให้ query ซ้ำทุกครั้ง
- แก้ปัญหา cache ของรายชื่อ vendor ที่ไม่เคยถูกใช้งานจริง (reload เป็น true ตลอด)
- แก้ปัญหาการคำนวณ payment rule ที่ re-encrypt ข้อมูลซ้ำทุกครั้งแม้ราคาโครงการไม่เปลี่ยน
- แก้ปัญหาหน้า project/cm (index) error เมื่อโครงการถูกจำกัดสิทธิ์การเข้าถึง (HideProjectScope)
1.5.5 - 2026-08-20
Added:
- เพิ่มระบบ cache ให้ Boonmeelab API (customers/sales/projects/demand/salestarget) สำหรับ full-dump request
Fixed:
- แก้ปัญหา performance ของ Boonmeelab API
demand (ลด response time ช่วง cache miss จาก ~7 วิ เหลือ ~1 วิ โดยลดจำนวน field ที่ต้อง decrypt)
- เพิ่ม index ให้คอลัมน์ metaoptions.meta_key แก้ปัญหา full table scan ใน Boonmeelab API
salestarget
- เพิ่ม migration สร้างตาราง cache สำหรับ local dev ที่ใช้ database cache driver
1.5.4 - 2026-08-19
Added:
- เพิ่มคำสั่ง schedule รายงาน SMS ประจำวันอัตโนมัติ
- เพิ่มฟังก์ชัน page break สำหรับรายงาน Product และ multi-product
- เพิ่มตัวเลือก pagination จำนวนสินค้าต่อหน้าในหน้า PM
- เพิ่ม modal ยืนยันหลังบันทึกข้อมูลอุปกรณ์ PM
Fixed:
- รวม logic ช่วงปี ($years/$years_array) ให้มาจากแหล่งเดียวแบบ dynamic แทนการ hardcode
- แก้ปัญหาลายเซ็นล้นหน้าใน PDF export (page break ตัดกลาง signature)
- แก้ปัญหา query สินค้าที่ทำให้ยอด "done" ในรายงานสูงเกินจริง
- แก้ปัญหาการตรวจสอบ serial number ในหน้าแก้ไขสินค้าและ new batch
- รวมขั้นตอนโอนโปรเจกต์ไปยัง service ให้เหลือ flow เดียวผ่าน sales-doc เท่านั้น
- แก้ปัญหา TypeError ของ Carbon โดย cast JWT_TTL/JWT_REFRESH_TTL เป็น int
- ขยายเวลา session JWT ของ Corp customer portal เป็น 7 วัน
- แก้ไข PaymentRuleController ให้ extend Controller และรวม TraitFunctionsCenter
- แก้ไขการ export PDF Demo สำหรับ Task Product
- ปรับปรุงการจัดการวันที่ในฟีเจอร์ค้นหา asset
1.5.3 - 2026-08-07
Added:
- เพิ่มระบบ Pojjaman integration service (stock withdrawal, docUploadedby API และ PojjamanServiceTest)
- เพิ่มระบบจัดการลายเซ็นลูกค้าและ migration ลายเซ็น พร้อมควบคุมสิทธิ์การเข้าถึงและรายงานผลทาง email
- เพิ่มการรับ-ส่งข้อความและ logging สำหรับ WIB-8000 ผ่าน LINE
- เพิ่มระบบตรวจสอบรายการซ้ำ (duplicate monitoring) สำหรับ PMProductConnect
- เพิ่ม modal ยืนยันก่อนยกเลิกการเชื่อมโยงเอกสารสินค้า
Fixed:
- แก้ปัญหาการบันทึกลายเซ็นเมื่อ pointer เลื่อนออกนอก canvas
- แก้ไขการ exclude โปรเจกต์ที่ขึ้นต้นด้วย MS/SS/TS ออกจาก Boonmeelab API และ demand ที่ผูกกับโปรเจกต์เหล่านั้น
- แก้ปัญหา null safety ใน imap_line_poseidon และปรับปรุงการดึงข้อมูลโปรเจกต์ใน imap_line_wib_8000
- แก้ไข route การรับข้อความ email สำหรับ WIB-8000
- แก้ปัญหาการสร้าง meta connection ใน categoryUpdateBatch
- แก้ไข redirect logic ใน ServicePMProductDataController
- แก้ปัญหาการ resolve document type ใน generateFileToProject
- แก้ปัญหาค่า null ของ vendor branch และ contact details ใน Pojjaman API
- แก้ไข atomicity ของการตรวจสอบรายการเชื่อมต่อซ้ำ พร้อมเพิ่ม rollback
- เปลี่ยนจาก chunk เป็น chunkById เพื่อป้องกันการข้ามแถวข้อมูลระหว่างประมวลผล
- แก้ไขการทดสอบและข้อความ error ของการอัปโหลดลายเซ็น
1.5.2 - 2026-07-24
Fixed:
- แก้ปัญหา route ทดสอบส่งข้อความ LINE ให้ใช้ secure URL และตัดโค้ดทดสอบ/logging ที่ไม่จำเป็นออก
- เพิ่ม trustProxies ใน bootstrap/app.php เพื่อให้ระบบอ่านค่า IP/URL ผ่าน proxy ได้ถูกต้อง
- แก้ปัญหาระยะขอบของ PDF footer และการจัดวางตารางใน header ให้แสดงผลถูกต้อง
- เรียงผลลัพธ์ PMProductConnect ตาม ID ใน prepare_pdf_views เพื่อความสม่ำเสมอของรายงาน
- ลบ logic การขึ้นหน้าใหม่ (page break) ที่ไม่จำเป็นออกจากการสร้าง PDF
1.5.1 - 2026-07-22
Fixed:
- แก้ปัญหาการดึงข้อมูล MetaConnect และการหา CM/PM ก่อนหน้าใน ServiceCMController
- แก้ปัญหา open redirect ในฟอร์ม PMProductConnect โดยเพิ่มระบบตรวจสอบ back URL
- ปรับปรุง query ของ PMProductConnect ให้มีประสิทธิภาพและอ่านง่ายขึ้น พร้อมเพิ่ม pagination ในหน้าผลิตภัณฑ์ PM
- ลดจำนวนเอกสารที่บังคับแนบในการโอนแฟ้ม เหลือเฉพาะ Contract Review และ TOR
- แก้ปัญหา null case ของ CorrectiveMaintenance ในหน้า show
- แก้ปัญหาค่าเริ่มต้นของ list_order ในการเพิ่มและแก้ไขข้อมูล
- ปรับการค้นหาอีเมลให้ใช้ whereBlind แทนการเทียบค่าตรงๆ
- แก้ปัญหาบรรทัดว่างเกินความจำเป็นใน PDF footer
- แก้ปัญหาการจำ tab ที่เลือกไว้ ให้ใช้ URLSearchParams แทน regex
1.5.0 - 2026-07-16
Added:
- เพิ่มระบบ Parent Project Inheritance — เมื่อเลือก parent project ระบบดึงข้อมูลฟิลด์ที่เกี่ยวข้องมา autofill ให้อัตโนมัติในหน้า project/new และ project/edit พร้อมฟังก์ชัน clear fields และป้องกัน circular reference
- เพิ่มฟีเจอร์ยกเลิกงาน (cancel) สำหรับ Asset Management พร้อม modal ยืนยันก่อนลบเอกสาร
- เพิ่มการแสดงสถานะ (status detail) ของ PM รายผลิตภัณฑ์ พร้อม UI badge แสดงรายละเอียดสถานะ
- เพิ่มการ auto-check checkbox "include" อัตโนมัติในหน้าลงข้อมูล PM (new/edit) เมื่อ toggle switch
- เพิ่มระบบ footer และตัวเลือก PDF (BuildPDFFooterTrait) สำหรับการสร้าง PDF หลายอุปกรณ์ ปรับ layout footer ให้เป็น dynamic แทนการ fix ตำแหน่ง
- เพิ่มฟังก์ชันส่งข้อความผ่าน LINE API พร้อมสคริปต์ทดสอบ
Changed:
- ปรับปรุงการทำงานของ select2 clear fields ในหน้า project edit และ merge dialog (normalization และ person-list repopulation)
- ปรับปรุงการจัดวางหน้า PDF report (page break, pagination) สำหรับรายงานหลายผลิตภัณฑ์
- ปรับข้อความสถานะระบบ (system status) ในหน้ารายละเอียด PM ให้สื่อความหมายชัดเจนขึ้น
- เปลี่ยนชนิดข้อมูลคอลัมน์ description ใน activity_log จาก string เป็น text
Fixed:
- แก้ปัญหา decrypt project child fields ไม่ถูกต้องในหน้า edit (parent project inheritance)
- แก้ปัญหาการ filter โครงการที่ไม่มี contract review date ออกจาก Boonmee Lab /projects endpoint
- แก้ปัญหา route ยกเลิก asset ให้ใช้ DELETE method ตามมาตรฐาน REST
- แก้ปัญหา checkbox logic ในหน้า batch edit และป้องกัน auto-check ผิดพลาดสำหรับ field ชนิด boolean
- แก้ปัญหา HTML typo และ closing div ที่ไม่ถูกต้องในเทมเพลต PDF
- แก้ปัญหา max_input_vars ไม่พอสำหรับฟอร์มขนาดใหญ่ (ปรับเป็น 5000 ใน php.ini)
- แก้ปัญหาการแสดง iteration ของ product ในหน้า edit และ batch edit
- ลบอีเมล [email protected] ออกจากรายชื่อผู้รับ know-smile survey mail
1.4.1 - 2026-06-19
Added:
- เพิ่มการออก PDF รายงานหลายผลิตภัณฑ์พร้อมลิงก์อัตโนมัติในหน้าโครงการ → บริการ (PM) — เลือกสถานะและหมายเหตุของอุปกรณ์หลายตัวพร้อมกันก่อนสร้างรายงาน
Fixed:
- แก้ไขปัญหา Boonmee Lab API คืนค่าฟิลด์ที่เข้ารหัส (ชื่อลูกค้า, ชื่อโครงการ, ชื่อ sales ฯลฯ) เป็น ciphertext แทนข้อความที่ถอดรหัสแล้ว — เกิดจาก select() เลือกคอลัมน์ไม่ครบตามที่ CipherSweet กำหนดให้ต้องถอดรหัสทั้งแถว
- แก้ไขปัญหา Boonmee Lab API demand endpoint แสดง quarter เป็น "Q0" และ year เป็น "543" เมื่อ po_estimate_date เป็น "0000-00-00" — ปรับให้ถือเป็นค่า null
- ปรับปรุงการตรวจสอบข้อมูลและการจัดการ comment ใน CarParController
- แก้ไขปัญหาการแบ่งหน้าและ footer ของ PDF รายงาน PM หลายผลิตภัณฑ์ — เพิ่ม page-break ระหว่างหน้า, แก้ไขความสูง footer ที่ผิดพลาด และซ่อนแถวตัวเลือกที่ไม่มีข้อมูล
- แก้ไขปัญหาหมายเหตุ (notice) ไม่ถูกบันทึกในข้อมูล PM-Product — ค่า notice ถูกเขียนเป็นค่าว่างเสมอแทนค่าที่ผู้ใช้กรอกจริง
- แก้ไขการดึงข้อมูล PreventiveMaintenance ใน
api_get_category_connection ให้ใช้ findOrFail
1.4.0 - 2026-06-15
Added:
- เพิ่ม Boonmee Lab API Integration — endpoints สำหรับ
/v1/sitem/customers, /v1/sitem/sales, /v1/sitem/projects, /v1/sitem/demand และ /v1/sitem/salestarget พร้อม auth guard และ pagination
- เพิ่มการดึงข้อมูลลูกค้าอัตโนมัติในหน้าแบบสอบถาม — ดึงชื่อ/เบอร์โทร/อีเมลลูกค้าจาก email หรือ project ID มา prefill ฟอร์มให้อัตโนมัติ
- เพิ่ม customer dropdown แบบ searchable (พิมพ์อย่างน้อย 2 ตัวอักษรเพื่อค้นหา) ในหน้า service survey
- เพิ่ม field
po_profit และ real_profit ใน projects API endpoint
- เพิ่ม column
customerorganizations และ salesdemands ที่ขาดหายไป
Security:
- บล็อกการอัปโหลดไฟล์ประเภท executable ทุก endpoint — เพิ่มรายการ blocked extensions และ validation ประเภทไฟล์
- เพิ่ม limit ขนาดไฟล์อัปโหลดสูงสุดเป็น 50MB พร้อมปรับ dropzone ให้แสดงขนาดไฟล์ถูกต้อง
Fixed:
- แก้ไขปัญหา Succession Project —
setParentProjectChildId รองรับการเปลี่ยน parent project ได้ถูกต้อง
- แก้ไขการโอนย้ายสินค้า — ใช้ database transaction และ batch insert เพื่อป้องกัน partial save
- แก้ไขที่อยู่บริษัทในส่วนหัว PDF
- แก้ไขวันที่ใน PDF รายงาน PM — แสดง
pm.finish_date แทน pm_connection.updated_at
- แก้ไข input รหัส vendor ให้ใช้ค่า default จาก formatted ID เมื่อไม่มีการกรอก
- แก้ไข regex ของ changelog version ให้รองรับ pre-release suffix เช่น
-hotfix.1
- แก้ไข HTTP response สำหรับ unauthenticated request ให้ส่ง 401 ก่อน query โปรเจกต์
- แก้ไข customer ID input ไม่ถูก overwrite ขณะที่ user กำลังพิมพ์ — เพิ่ม debounce และตรวจสอบ focus
- แก้ไข null guard ใน
checkParentAvailable กรณี parent project หรือ installation_place เป็น null
1.3.2-hotfix.1 - 2026-05-25
Fixed:
- แก้ไขปัญหาไม่สามารถบันทึกข้อมูลในหน้าลงข้อมูล PM หลายอุปกรณ์ใหม่ได้ — เกิดจาก add() วนลูปผลิตภัณฑ์ทั้งหมดแต่ฟอร์มส่งข้อมูลเฉพาะหน้าปัจจุบัน ทำให้ข้อมูลผลิตภัณฑ์หน้า 2 ขึ้นไปถูกข้ามโดยไม่แจ้งเตือน
Changed:
- เพิ่มการ auto-check checkbox อัตโนมัติเมื่อกรอกข้อมูลในช่อง text, radio หรือ checkbox ในหน้าลงข้อมูล PM หลายอุปกรณ์ (ทั้ง new และ edit)
1.3.2 - 2026-05-25
Added:
- เพิ่มฟีเจอร์ลงข้อมูล PM หลายอุปกรณ์แบบ Batch Edit — สามารถเลือกกลุ่มอุปกรณ์แล้วกรอกข้อมูลร่วมกันได้ในครั้งเดียว พร้อม UI ให้เลือก checkbox และยืนยันข้อมูลก่อนบันทึก
- เพิ่ม PMProductDataCopyService สำหรับจัดการการ copy ข้อมูล PM ระหว่างอุปกรณ์ในหน้า Batch Edit
Changed:
- ปรับโครงสร้าง view หน้าลงข้อมูล PM หลายอุปกรณ์ (new, edit) — แยก view ใหม่เป็น versioned (20260521_*) และปรับ layout ให้รองรับการใช้งานได้ดีขึ้น
- เพิ่มการจำสถานะ checkbox ด้วย session storage ในหน้าลงข้อมูล PM หลายอุปกรณ์ เพื่อ restore ค่าที่เลือกไว้เมื่อ refresh หน้า
Fixed:
- แก้ไขปัญหาหน้าว่างเมื่อออก PDF รายงาน PM — แก้การแสดงผล task-group และลบ page-break ที่ไม่จำเป็นออก
1.3.1 - 2026-05-15
Added:
- เพิ่มฟีเจอร์ดึงข้อมูลจากรอบ PM ก่อนหน้ามาแสดงเป็นค่าตัวอย่าง (Prefill) ในฟอร์มลงข้อมูลหลายอุปกรณ์ — ค่าเก่าจะแสดงเป็นสีเทาเพื่อให้ช่างตรวจสอบและยืนยันข้อมูลใหม่แต่ละรอบ โดยระบบตรวจสอบสิทธิ์การเข้าถึงข้อมูลตามโครงการ
Changed:
- ปรับโครงสร้างการเตรียมข้อมูล PDF ของงาน PM — รวมโค้ดที่ซ้ำซ้อนจาก 3 Job Classes และ 2 Traits เข้าสู่ PMReportDataService เพื่อลด duplication และป้องกัน N+1 Query
Fixed:
- แก้ไขการดึงข้อมูลเจ้าหน้าที่ผู้ปฏิบัติงาน (Staff Info) ให้รองรับกรณีรันผ่าน Queue ที่ไม่มี Auth context
- แก้ไข null guard ใน PMReportDataService — เพิ่มการตรวจสอบ PM, Project และ Task Category ก่อนใช้งาน พร้อม error message ที่ชัดเจน
- แก้ไขการกรองประวัติ PMProductConnect ในรายงาน PDF ให้กรองเฉพาะ type = 'pm' เพื่อป้องกันข้อมูลจาก multi-product records ปนกัน
1.3.0 - 2026-05-13
Added:
- เพิ่มระบบ Two-Factor Authentication ด้วย Google Authenticator — ตั้งค่า QR Code และ Secret Key ในหน้าโปรไฟล์ผู้ใช้, modal ยืนยัน OTP, การจำกัดจำนวนครั้งการยืนยัน OTP, การควบคุมเปิด/ปิดสิทธิ์รายบุคคลโดย Admin และแจ้งเตือนทางอีเมลเมื่อมีการเปลี่ยนแปลงการตั้งค่า OTP
- เพิ่มการค้นหาผลิตภัณฑ์ในหน้างาน PM — รองรับการค้นหาจาก Serial Number, Label และชื่อประเภทอุปกรณ์ที่เข้ารหัส พร้อม filter สถานะ (พร้อมลงข้อมูล / ลงข้อมูลแล้ว / ยังไม่มี Task) และ pagination
Changed:
- ปรับการลงข้อมูล PM หลายอุปกรณ์ — แสดงจำนวนรูปที่อัปโหลดแบบ real-time ทันทีเมื่ออัปโหลดสำเร็จแต่ละไฟล์ พร้อม live counter ใน modal และปรับ layout ให้รองรับหน้าจอขนาดเล็กได้ดีขึ้น
Fixed:
- แก้ไขปัญหาข้อมูลผลิตภัณฑ์ใน PM หลายอุปกรณ์หายไปเมื่อ refresh หน้า — เกิดจาก PMProductConnect ไม่ถูก promote จาก draft เป็น available เมื่อบันทึกข้อมูลครั้งแรก
- แก้ไขปัญหาการแสดงสถานะ PM Calendar และการจัดการ cache
- แก้ไขปัญหาชื่อไฟล์ Excel ในรายงาน CM และ Transfer Request
- แก้ไขการกรองประเภทโครงการให้ไม่รวม rd-bd และปรับการจัดการประเภท percall และ service
- แก้ไขการแสดงช่วงวันที่ในรายงานและ label ตัวกรองวันที่
1.2.6 - 2026-04-07
Changed:
- ปรับให้การออก Excel มีประสิทธิภาพมากขึ้น
- ปรับให้อนุญาตมีการแก้ไขค่าโครงการจากการเลือกโครงการสืบทอดมาจาก เฉพาะในโครงการที่อยู่ในสถานะ "forecast" เท่านั้น
Fixed:
- แก้ไชปัญหา Image Gallery ไม่แสดงผลในหน้างาน CM
- แก้ไขปัญหาเมื่อเปิดเลขที่โครงการใหม่แล้ว เลขที่โครงการดังกล่าวไม่แสดงขึ้นในตัวเลือกหนังสือค้ำประกัน
- แก้ไขปัญหาออก Excel รายงานสัญญาไม่ต่อเนื่อง เมื่อทำเลือกเรียงตามวันที่สิ้นสุดสัญญา ผลลัพธ์ไม่เรียงตามที่เลือก
1.2.5 - 2026-03-30
Added:
- ปรับปรุงส่วน Image Gallery ใหม่ ให้ทำการแสดงผลโดยดึงค่าจาก API และแสดงผลแบบ pagination ได้
Changed:
- เมื่อทำการออก Excel ในรายงานโครงการไม่ต่อเนื่อง ให้ทำการเรียงลำดับโครงการจากวันที่สิ้นสุดสัญญา
Fixed:
- ปรับปรุงรายงานเตรียมความพร้อม PM หลายอุปกรณ์ให้แสดงสัดส่วนได้เหมาะสมมากขึ้น
- แก้ไขเมื่อเปิดเลขโครงการใหม่แล้ว รายการโครงการไม่แสดงให้เลือกในหน้าออกค้ำประกันสัญญาใหม่
1.2.4-hotfix.1 - 2026-03-24
Fixed:
- แก้ไขปัญหารายงานเตรียมความพร้อม PM แสดงสัดส่วนไม่ถูกต้อง
1.2.4 - 2026-03-23
Changed:
- สามารถ search หาผลิตภัณฑ์จาก serial number ในหน้าผลิตภัณฑ์รวมได้
- สามารถ restore user ที่เคย disable ไปแล้วได้
- ปรับการตั้งค่า Cloud Run ให้เป็น Private
Fixed:
- แก้ไขปัญหาการโหลดข้อมูลโครงการผ่าน Smile SITEM ช้า
- แก้ไขปัญหารายงาน PM ตัวอักษรทับชื่อท้ายกระดาษ
- แก้ไขปัญหางานในงาน PM ไม่แแสดงผลเมื่อเลือกผ่านการกรองทีละวัน
- แก้ไขให้สามารถลบรูปที่อัพโหลดเพิ่มเข้าไปในหน้างาน PM ได้
- แก้ไขแสดงรายงานเป็น Excel ไม่ดึงข้อมูลงาน Support ออกมาแสดง
1.2.3 - 2026-03-16
Changed:
- ทำการถอดค่าที่ไม่จำเป็นต้องเปลี่ยนออกจากฟังก์ชั่นสืบโครงการ
- ปรับปรุงการออกใบงบประมาณให้แสดงในหน้าเดียว
Fixed:
- แก้ไขการแสดงรายชื่อลูกค้า ในหน้าออกใบเบิกของขวัญ
- แก้ไขปัญหาหน้าปฏิทินงาน PM / CM ไม่แสดงงานในเดือนที่แล้วขึ้นมา
- แก้ไขปัญหาไม่แสดงลายเซนต์ผู้เข้าทำงานที่อาวุโสที่สุดในรายงาน PM ของแต่ละผลิตภัณฑ์
1.2.2 - 2026-03-09
Changed:
- ในการเพิ่มคำร้อง CAR/PAR ใหม่ ไม่จำเป็นต้องเลือกโครงการที่เกี่ยวข้อง
- ในการเพิ่ม CM ใหม่ ไม่จำเป็นต้องเลือกผลิตภัณฑ์
Fixed:
- แก้ไขปัญหาเมื่อเลือกโครงการสืบทอดแล้ว ชื่อโครงการค่าปัจจุบันถูกทับจากค่าของโครงการที่เลือกสืบทอดมา
- แก้ไขปัญหาปุ่ม "แสดงรายงาน" Excel แสดงเฉพาะงาน CMA / CM / CP ส่วนงานประเภท SP (งาน Suppoer) ไม่ได้ออกมาในรายงานด้วย
- แก้ไขวันที่ของ "รับงาน CM เข้าระบบ" ให้ถูกต้อง
- แก้ไขปัญหาไม่สามารถอ่านค่าโครงการย่อยได้ ใน Smile SITEM
- แก้ไขปัญหาการแสดงผลของปฏิทิน PM ที่วันที่แสดงไม่ครบถ้วน
- แก้ไขปัญหาไม่สามารถค้นหาเลขที่โครงการในหน้า Packet Power ได้
1.2.1 - 2026-02-27
Fixed:
- แก้ไขปัญหางาน PM ไม่แสดงในปฏิทินรวม และปฏิทินส่วนตัว ทั้งๆที่มีหน้าของ user
- แก้ไขปัญหาการออกรายงาน สรุปรวม PM แล้วค่าของการเตรียมไม่ได้แสดงเข้ามาด้วย
- แก้ไขปัญหาแสดงไฟล์ PO ในงานจัดซื้อไม่ได้
- แก้ไขปัญหาการแสดงไฟล์เอกสารประกอบผลิตภัณฑ์ใน Smile SITEM ไม่ได้
1.2.0 - 2026-02-24
Added:
- เพิ่มการแสดง log ผ่าน STDOUT ให้ทางทีม devops ช่วยตรวจสอบ log ผ่านระบบ Kubernetes
- เพิ่มการแสดง version ของระบบ ERP โดยอ้างอิงตัวเลขจาก changes.md
- เพิ่มการแสดง changelog โดยอ้างอิงจากไฟล์ changes.md
1.1.13 - 2026-02-13
Changed:
- ปรับปรุงการออก PM ให้ถูกต้องตามระยะเริ่มต้น - สิ้นสุดที่เลือก โดยให้ทำการตั้งกำหนดเข้างานไว้เดือนสุดท้ายของรอบ
- ปรับปรุงให้หน้าแก้ไขประเภทผลิตภัณฑ์ ไม่ต้องบังคับให้เลือก supplier
- ปรับปรุงให้แสดงชื่อ สรวิศ อัจฉริยบุญยงษ์ ในรายการผู้ประเมินราคา ในหน้าสร้างโครงการใหม่
- ปรับปรุงให้ผลลัพธ์การแสดงโครงการในหน้า รายงาน > งานที่สัญญาไม่ต่อเนื่อง แสดงเรียงตามตัวอักษรเลขที่โครงการ
- ปรับปรุงหน้าปฏิทินงาน CM, PM ให้แสดงข้อมูลได้ไวขึ้น
Fixed:
- แก้ไขปัญหาในรายการงานจัดซื้อในประเทศ หากทำการแนบ PO แล้วต้องการถอด PO ที่ว่าออกไป จะไม่สามารถทำได้
- แก้ไขปัญหาข้อมูลรายชื่อถูกเข้ารหัส เมื่อทำการเลือกฝ่ายการเงินลูกค้า ในหน้าเปลี่ยนแปลงค่าทางการเงิน
- แก้ไขข้อความ erp.sitem.co.th ที่ยังหลงเหลืออยู่ในระบบออกไป
- แก้ไขปัญหากดส่ง reset รหัสผ่านไปให้ลูกค้า smile ขึ้น error 500
- แก้ไขปัญหาเมื่อสร้างผลิตภัณฑ์ใหม่แบบรวมหมู่ กรอกป้ายชื่อแล้วค่าไม่ทำการ save
- แก้ไขปัญหาหน้าเพิ่มแผนจัดซื้อต่างประเทศ ไม่สามารถใส่รายละเอียดผลิตภัณฑ์ได้
1.1.12 - 2026-02-10
Changed:
- ปรับให้สามารถเพิ่มลูกค้าใหม่ในหน้างานลูกค้าสัมพันธ์ โดยไม่ต้องใส่อีเมลได้
- ปรับให้สามารถป้องกันไม่ไห้สร้างผู้ใช้งานใหม่ได้ หากมีอีเมล์นี้ใช้งานแล้ว
- ปรับการแสดง " " ออกจากการออกรายงาน PDF
- ปรับปรุงเรื่องชื่อไฟล์เก่าที่หายไป หรือไม่แสดงในระบบ ให้สามรถแสดงขึ้นได้
- ปรับการอัพโหลดไฟล์เข้าระบบให้รองรับได้ถึงขนาด 50 MB
- ปรับให้รูปโปรไฟล์ผู้ใช้งานสามารถแสดงใน tab ข้อมูลงานโครงการ ในหน้างาน CM
- ปรับให้มีการจำกัดสิทธิ์ในการเห็นค่าแรงของงาน PM
- ปรับปรุงการแสดงชื่อไฟล์รูปภาพ หากชื่อไฟล์ยาวเกินไป ให้ตัดจบด้วย ...
Fixed:
- แก้ไขปัญหาในหน้าสร้างโครงการใหม่ และ แก้ไขโครงการ ไม่เปลี่ยนค่าต่างๆเมื่อทำการเลือกโครงการสืบทอด
- แก้ไขปัญหาหน้างานจัดซื้อไม่สามารถอัพโหลดไฟล์เข้าไปได้
- แก้ไขปัญหาหน้าใบเบิกของขวัญ แสดงผลไม่ถูกต้อง
- แก้ไขปัญหาการเกิด Error 500 เมื่อทำการแก้ไข options ของ task การใช้งาน
- แก้ไขการแสดงผลให้ผู้มีเลขรหัสที่อาวุโสกว่า แสดงชื่ออยู่ในลายเซนต์ของรายงาน PDF CM และ PM
- แก้ไขให้สามรถสร้างเลขที่โครงการย่อยได้
- แก้ไขปัญหาข้อความในรายงาน PM ตัวอักษรเนื้อความรายงานไปทับ footer ตรงท้ายกระดาษ
1.1.11 - 2026-01-30
Changed:
- ปรับให้ระบบอัพโหลดรูปภาพ สามารถรับได้เฉพาะไฟล์นามสกุลประเภท PNG, JPEG, JPG
- ปรับให้การแสดงผลของรายชื่อผู้เข้าปฏิบัติงานใน PM และ CM เริ่มแสดงจากผู้เข้าทำงานที่มีอายุงานมากที่สุดก่อน
- ปรับปรุงการแสดงผลหน้า SMS Live 2 ให้กรอง Health Check และ Generator Exercise กรองรายการ SMS ได้ถูกต้อง
- เพิ่มเวลาการล็อกอินในแต่ละ session จาก 2 ชั่วโมง เป็น 12 ชั่วโมง
- ปรับปรุงให้แสดงข้อมูลจากโครงการเก่า เมื่อทำการเลือกโครงการที่สืบทอดมา ในโครงการ Forecast
Fixed:
- แก้ไขปัญหาไม่สามารถ เพิ่ม และ ลบใบแจ้งความผิดปกติผู้รับเหมาได้
- แก้ไขปัญหาไม่สามารถออกรายงานใบแจ้งความผิดปกติผู้รับเหมาได้
- แก้ไขปัญหาไม่สามารถอัพโหลดไฟล์ หรือ รูปภาพ ที่ตั้งชื่อโดยมี underscore 2 ตัว เช่น "S__490349232.jpeg"
- แก้ไขปัญหาเข้าเมนู "ลูกค้าทั้งหมด" ไม่ได้
- แก้ไขปัญหาในหน้าแก้ไขโครงการ การแสดงรายชื่อผู้วางบิล ขึ้นข้อความเข้ารหัส
- แก้ไขปัญหาเข้าดูหน้ารายงานผู้บริหาร ในหน้าแต่ละโครงการไม่ได้
- แก้ไขปัญหาการสร้างข้อมูลไซท์ลูกค้าใหม่ไม่ได้
1.1.10 - 2026-01-27
Changed:
- ถอดการใส่ image ได้ออกไปจาก TextArea Summernote
- ปรับการเชื่อมต่อ Smile SITEM มาใช้งานใน server ใหม่
- ปรับปรุงการเปิดไฟล์เอกสารจากใน Smile SITEM ให้มีความปลอดภัยมากขึ้น
- ปรับปรุงการเรียงเลขที่โครงการจากใหม่ไปเก่า เมื่อทำการกด search หาโครงการ
- เปลี่ยนไปใช้งาน Laravel-Octane แทน PHP-FM
Fixed:
- แก้ไขข้อความ "รหัสพนักงาน" ในหน้าผู้ใช้งานทั้งหมด
- แก้ไขหน้าตารางนัดหมายการโอนแฟ้ม ไม่สามารถ search จากชื่อ - เลขที่โครงการได้
- แก้ไขให้หน้าหนังสือค้ำประกัน แสดงเลขที่โครงการที่เกี่ยวข้องได้
- แก้ไขไม่สามารถลบข้อมูลองค์กรในหน้า "ฝ่ายการเงินลูกค้า" ได้ หากข้อมูลองค์กรนั้นไม่มีชื่อย่อ
- แก้ไขปัญหาอัพโหลดภาพลายเซ็นต์ กดอัพโหลดครั้งแรก มี Error
- แก้ไขปัญหาเพิ่มข้อมูลลูกค้าใหม่ลงหน้าบัญชีการเงินไม่ได้
- ในหน้า PM > อุปกรณ์หลายตัว ทำการแก้ไขปัญหาการเรียง ลำดับ ชื่อ Serial Number ของอุปกรณ์สลับกัน
- แก้ไขปัญหาไม่สามารถรับ SMS จากเบอร์ Telealarm ใหม่ๆที่เพิ่มค่าลงไปได้
- แก้ไขให้สามารถออกเอกสารสรุปงาน PM จากในหน้าโครงการได้
- แก้ไขปัญหา หน้าแก้ไขแผนจัดซื้อต่างประเทศ เมื่อกดยืนยันแล้วขึ้น Error 500
- แก้ไขปัญหา หน้ารวมรายการ CM ให้สามารถเลือกกรองรายละเอียด + วันที่เริ่มต้นสิ้นสุดได้ โดยไม่ขึ้น Error 500
- แก้ไขปัญหาแสดงการเข้ารหัสของงาน PM ในหน้าปฏิทินการเข้างาน
1.1.9 - 2026-01-16
Changed:
- ปรับขนาดฟอนต์ของ Contract Review ให้ใหญ่ขึ้น
- กรองตัวอักษร HTML Character Entities ออกจากการแสดงผลใน Contract Review
- ปรับปรุงให้ไฟล์ลิงค์เอกสารที่แสดงออกใน Smile SITEM สามารถกดเข้าถึงได้
Fixed:
- ปรับปรุงความเร็วในการค้นหาเลขที่โครงการ
- แก้ไขหน้า edit หน้าแผนจัดซื้อ ขึ้น error 500
- แก้ไขการ edit แผนจัดซื้อต่างประเทศไม่สำเร็จ ขึ้น error 500
- แก้ไขการออกเอกสาร PM แบบหลายอุปกรณ์แล้ว ออกเบิ้ล
- แก้ไขหน้า SMS ไม่แสดงผลออกหมวด "ตอบรับทันที", "ตอบรับภายใน 15 นาที", "Health Check"
- แก้ไขให้หน้ารายการ CM สามารถกรอง "ขาดเอกสารประกอบ" ได้
- แก้ไขการแสดงตัวกรองในหน้ารายการ CM
- แก้ไขการออก PDF ของงาน CM สำหรับงานของบริษัท Stulz Siam ไม่สำเร็จ
- แก้ไขการลงข้อมูลส่วนตัว เช่น รูปภาพ, ลายเซนต์ ของผู้ใช้งานเองไม่ได้
- แก้ไขการเพิ่มข้อมูลลูกค้าในหน้าบัญชีการเงินไม่ได้
1.1.8 - 2026-01-09
Added:
- ปรับปรุงหน้า Notification ใหม่
- ในงาน CM สามารถลบอุปกรณ์ที่เพิ่มเกินขึ้นมาได้
Changed:
- ปรับปรุงการแสดงผลข้อความการบันทึกผลข้อมูลในหน้าโครงการ > "ต้นทุนค่าใช้จ่ายจริง"
- ปรับให้ Smile SITEM ต่อ API กับ V2 ได้
Fixed:
- แก้ไขการตรวจสอบอุปกรณ์ Packet Power ผ่านอีเมล์ เพื่อส่งออกไป LINE ให้ถูกต้อง
- ในหน้าแก้ไขหมายเลข SMS แก้ไขปัญหา error 500 เมื่อไม่ได้ทำการเลือกค่าให้กับ Generator Exercise (อีกวัน)
- ในหน้าปลดล็อคผู้ใช้งาน แก้ไขปัญหา error 500 เมื่อยังไม่ได้กดเลือกผู้ใช้งานคนไหนแล้วทำการยืนยันปลดล็อคค่าเลย
1.1.7 - 2025-12-26
Added:
- สามารถ filter ชื่อรายการ และ สถานะของงานแต่ละคิว ในหน้า process queue ได้
- เพิ่มหน้าแสดง log file
Changed:
- ในรายงานสรุปยอดขายปีงบประมาณ (Excel) สามารถ autosum คอลัมน์มูลค่างานได้
- สรุปการออกรายงาน CM ของเลขที่โครงการ ลบ ออกไปจากการแสดงผล และทำการแสดงรายชื่อเจ้าหน้าที่ให้เป็นคนละแถว
- สามารถอัพโหลดเอกสารประกอบต่างๆ เข้าสู่ Vendor ที่ต้องการได้
- ย้ายการส่ง LINE ผ่านอีเมล์ของ Packet Power มาใช้งานใน V2
- ในการออกเอกสาร PDF ที่มีรูปภาพประกอบ เช่น PM, CM ให้ทำการแสดงรูปประเภท thumbnail ได้
- เพิ่มโครงการที่อยู่ในสถานะ "ยกเลิก" ให้อยู่ในรายการโครงการที่ให้เลือกได้ เมื่อเลือกทำการอัพโหลดไฟล์ใหม่
Fixed:
- แก้ไขปัญหา User ไม่ถูกล็อคเข้าสู่การใช้งานระบบเมื่อกรอกรหัสผ่านผิดเกิน 5 ครั้ง
- แก้ไขปัญหาแสดงบรรทัดเลยทับ Footer ในรายงาน PDF ของแต่ละผิตภัณฑ์ใน PM
- แก้ไขปัญหา เกิด error 500 เมื่อเปลี่ยนแปลงค่าในแผนจัดซื้อต่างประเทศ
- แก้ไขปัญหา เกิด error 500 เมื่อทำการออกรายงาน CM ประจำปี
- แก้ไขให้ลิงค์เข้าสู่ระบบ ERP ที่แนบไปกับอีเมล์ต้อนรับผู้ใช้งานเข้าสู่ระบบ ชี้มาได้ถูกต้อง
- แก้ไขปัญหาสรุปการออกรายงาน CM ของเลขที่โครงการ วันที่ในรายงานไม่ตรงกับที่เลือก
- แก้ไขปัญหาไม่สามารถเปลี่ยนสถานะในหน้าเคลมสินค่าไม่ได้
- แก้ไขปัญหา error 500 เมื่อทำการลบผู้ใช้งาน
1.1.6 - 2025-12-19
Added:
- เพิ่มหน้าเคลียร์รายการของผู้ใช้งานที่ติดปัญหาไม่สามารถเข้าใข้งานได้เป็นเวลา 60 นาที จากการ login ของตัวเอง
Changed:
- ปรับปรุงการอัพโหลดไฟล์ให้รองรับตัวอักษรแปลกๆ ในชื่อไฟล์ได้เพิ่มมากขึ้น
Fixed:
- แก้ไขการเก็บค่า PM แบบหลายตัว แล้วบางครั้งข้อมูลเดิมมาแสดงในงานใหม่ไม่ครบ
- แก้ไขการลงข้อมูลในการออกใบรับประกัน ให้สามารถปรับค่าตามอุปกรณ์ได้
1.1.5-hotfix.5 - 2025-12-16
Changed:
- ปรับปรุงความเร็วในการออกรายงาน Progress
Fixed:
- แก้ไขหน้า "งานวันนี้" ให้แสดงหมายเลขงาน CM และเลขที่โครงการให้ถูกต้อง
- แก้ไขการส่งให้ทำการ decrypted ข้อมูลเลขที่และชื่อโครงการ ก่อนส่งออก LINE
- แก้ไขปัญหาเลือกวันที่กรองข้อมูลในหน้า SMS V2 แล้วเกิด error 500
1.1.5-hotfix.4 - 2025-12-15
Fixed:
- แก้ไขหน้ารายงาน > รายงานวางบิล Vendor มี error 500 เมื่อ Filter ตาม Due จ่าย
- แก้ไขหน้างานธรุการ > เงินสดค้ำประกันอื่นๆ เมื่อค้นหาข้อมูลขึ้น error 500
- แก้ไขปัญหาอัพโหลดไฟล์ที่ชื่อมีตัวอักษรแปลกๆ เช่นมีตัว (, ), เว้นวรรค แล้วขึ้น error 404
- แก้ไขปัญหาไม่สามารถรับค่า SMS จาก app มือถือเพื่อส่งต่อไปยัง LINE ได้
- แก้ไขเรื่องต้นทุนและค่าใช้จ่ายจริง ในหัวข้อ การบริการความเสี่ยง เมื่อกรอกข้อมูลแล้ว ข้อมูลที่กรอก ไม่ได้แสดงในเอกสาร pdf
1.1.5-hotfix.3 - 2025-12-15
Fixed:
- แก้ไขปัญหาการออกรายงานยอดขายปีต่อปีไม่ได้
- แก้ไขการเปลี่ยนสถานะของรายการผลิตภัณฑ์จาก "ใช้งานได้ปกติ" เป็น "ปิดการใช้งาน" ได้
1.1.5-hotfix.2 - 2025-12-12
Changed:
- ถอดการกรอง "การคัดเลือกลำดับแสดงรายการ" ในรายงาน Progress ออกไป
Fixed:
- แก้ไขปัญหาการออกไฟล์ ZIP รายงาน PM ที่ยังมีปัญหาอยู่
- แก้ไขปัญหาต้นทุนและค่าใช้จ่ายจริง ในหัวข้อ การบริการความเสี่ยง เมื่อกรอกข้อมูลแล้ว ข้อมูลที่กรอก ไม่ได้แสดงในเอกสาร pdf
- แก้ไขปัญหาออกใบเตรียมความพร้อมในงาน PM เมื่อ edit ค่าแล้ว ระบบไม่ save ค่าที่แก้ไขลงไป
- แก้ไขปัญหาวันที่รับประกันเริ่มต้น - สิ้นสุดในเอกสารใบรับประกันไม่ถูกต้อง
1.1.5-hotfix.1 - 2025-12-09
Changed:
- ปรับให้ส่วนข้อมูล "รายละเอียดการบำรุงรักษาสัญญา" ในหน้าโครงการ รับค่าจากผู้ใช้งานเป็นตัวเลขได้เท่านั้น
Fixed:
- ในรายงาน progress ทำการแก้ไขค่าความคืบหน้าของงาน PM และมีงาน PM ทั้งหมดให้แสดงผลตามตัวเลขได้ถูกต้อง
- แก้ไขให้สามารถกดออกไฟล์ ZIP รายงาน PM และ Image Gallery ในหน้างาน PM ได้
- แก้ไขสรุปรายงานยอดขาย เป็น excel ให้เรียงโครงการตามรหัส MA, MS, TS, SE, SS ได้ถูกต้อง
- แก้ไขการสร้าง vendor list ใหม่แล้วขึ้น error 500
1.1.5 - 2025-12-08
Changed:
- ปรับปรุงการออก PDF ทั้งแบบไฟล์และ Stream ให้มีความเร็วเพิ่มขึ้น
- ถอดช่องลายเซนต์ผู้ตรวจสอบงบประมาณ ออกจากเอกสารใบขออนุมัติงบประมาณโครงการ
Fixed:
- แก้ไขในหน้าการเปลี่ยนค่าผู้ใช้งาน smile sitem สามารถกดอัพเดตวันที่แบบ auto ได้
- แก้ไขปัญหาการส่งอีเมล์เมื่อทำการเปลี่ยนสถานะโครงการ แล้วเกิด error 500
- แก้ไขปัญหาการออกรายงาน CM ในหน้าโครงการ ชื่อผู้เข้าดำเนินการถูก encryption ไว้อยู่
- แก้ไขปัญหาการตอบแบบสอบถามของลูกค้า เมื่อไม่ได้ใส่อีเมลลูกค้าก่อนกดยืนยัน แล้วเกิด error 500
- แก้ไขการเพิ่มหมายเลข SMS ใหม่ไม่ได้
- แก้ไขปัญหาการออก Job Ticket ไม่ได้
- แก้ไขการออกรายงาน List รายชื่ออุปกรณ์ให้ใช้วันทีเริ่มต้น - สิ้นสุดสัญญา จากโครงการ
1.1.4-hotfix.2 - 2025-12-04
Changed
- ปรับการอัพโหลดรูปภาพให้มีการ resize ขนาดไฟล์ที่นำมาใช้ไม่ให้มีขนาดความกว้างเกิน 600px เพื่อลดปริมาณของไฟล์ภาพลงมา
- ปรับการแสดง Image Gallery ให้รองรับการแสดงแบบ thumbnail ได้ (หากมี)
Fixed:
- แก้ไขหน้ารายงาน progress ให้สามารถกรองวันที่ประมาณการได้
- แก้ไขการออกรายงานสรุปการวางบิล ให้เมื่อเลือกกรองในหน้าหลักแล้ว ผลลัพธ์ในไฟล์ Excel ออกมาตรงกัน
1.1.4-hotfix.1 - 2025-12-03
Changed:
- ปรับการแสดงรูปในรายงาน PM ไว้ไม่เกิน 4 รูป (มาตรการฉุกเฉินเพื่อให้ออกไฟล์ได้ก่อน) มาแก้ไขในภายหลัง
- ในหน้าแสดง PDF หากไฟล์ทำการสร้างล้มเหลว ให้หยุดการหมุนและแสดง icon กากบาท
Fixed:
- แก้ไขให้ปุ่ม "สร้างไฟล์รายงาน PDF แบบ Batch" ในงาน PM สามารถออกรายงานได้ตามจำนวนที่เลือก
- แก้ไขหน้ารายงาน > สรุปยอดขายงานโครงการ มูลค่าไม่ตรงกับ report ที่ดึงออกมา, จำนวนโครงการน้อยกว่าที่ลงยอดไปมาก
- แก้ไขหน้ารายงาน > สรุปยอดขายงานโครงการ ออก excel ไม่ตรงกับรายการที่แสดงในหน้าหลัก พร้อมทำการเรียงโครงการจาก MA, MS, TS, SE, SS
- แก้ไขหน้ารายงาน progress ให้ตรงกับของ v1 และสามารถออกรายงาน Excel ได้
1.1.4 - 2025-12-02
Added:
- เพิ่มเมนู "แบบสอบถาม Call Center"
- สามารถออกรายงาน Excel ในหน้าเมนู "แบบสอบถาม Call Center" ได้
Changed:
- ปรับการปุ่มการออก PDF ตัวอย่างให้ใช้งานรูปแบบ Stream ทั้งหมด
- ปรับการแสดงผลใน Service Book รายละเอียด ในมีระนาบเท่ากัน
- ทำการลบ action "แก้ไขรายละเอียดไฟล์นี้" ออกไปจากหน้าคลังเอกสาร
Fixed:
- แก้ไขปัญหาไม่สามารถเปลี่ยนรายละเอียดงานจัดซื้อ ขึ้น error 500
- แก้ไขปัญหาไม่สามารถออกรายงาน Progress เบื้องต้นได้
- แก้ไขปัญหาการรูปภาพดำเนินการใน งาน PM ไม่แนบแสดงมาในรายงาน PDF ด้วย
- แก้ไขปัญหาการรูปภาพดำเนินการใน งาน CM ไม่แนบแสดงมาในรายงาน PDF ด้วย
- แก้ไขปัญหาออกใบรับประกันขึ้น error 500
- แก้ไขให้ปุ่มออกรายงาน Excel งาน CM แยกเฉพาะโครงการ สามารถออกได้
- แก้ไขให้สามารถกรองค่าในเมนู "ตารางนัดหมายการโอนแฟ้ม" และออกรายงาน Excel จากหน้านี้ได้
- แก้ไขให้สามารถกรองค่าในเมนู "แบบสอบถามความพึงพอใจงานบริการ" และออกรายงาน Excel จากหน้านี้ได้
1.1.3-hotfix.2 - 2025-11-28
Changed:
- ปรับการทำงานของระบบ Pull Asset & Image เพื่อป้องกันปัญหา หาไฟล์ไม่เจอใน v2
- แก้ไขการออก Contract Review และ Service Book ให้ออกแบบ streaming
1.1.3-hotfix.1 - 2025-11-28
Changed:
- ปรับเปลี่ยนให้ชื่อเอกสารที่ทำการสร้างจากในระบบ ให้มีความเป็น url safe เพื่อป้องกันปัญหาหาไฟล์ไม่เจอ 404
Fixed:
- แก้ไขการเพิ่มงาน PM แล้วไม่ใส่ผู้ดำเนินการ แล้วเกิด error 500
- แก้ไขอักขระ ออกในเอกสารรายงาน CM
- แก้ไขให้สามารถออกและเก็บรายงานเตรียความพร้อมลงระบบได้
- แก้ไขค่าต้นทุน ในการออกเอกสารใบงบ ให้ถูกต้องตามที่แก้ไขไป
1.1.3 - 2025-11-27
Changed:
- ปรับการ validation ในการออกและแก้ไขโครงการให้เหลือเพียงชื่อโครงการ, ประเภทโครงการ
- แสดง validation error ในหน้าแก้ไขโครงการ เพื่อให้ผู้ใช้งานรับทราบว่ายังไม่ได้กรอกค่าอะไรที่จำเป็นลงไป
- ปรับการเก็บ Project caching ให้รวมโครงการ forecast ด้วย
- ปรับการเก็บ email ในระบบให้เป็นตัวอักษรเล็กตลอดเวลา
Fixed:
- แก้ไขปัญหาการเพิ่มผลิตภัณฑ์ใหม่ที่โหลดนานจนขึ้นหน้า Bad Gateway 502
- แก้ไขปัญหาไม่สามารถเปลี่ยนสถานะโครงการได้
- แก้ไขปัญหาการ edit ค่าโครงการไม่ครบแล้วเด้งกลับมาที่หน้า edit อีกครั้งโดยไม่แจ้งรายละเอียดข้อผิดพลาดให้ผู้ใช้งาน
- สามารถเพิ่มเอกสารลงในงานโครงการ Forecast ได้แล้ว
- แก้ไข ในหน้าแก้ไขโครงการ วันที่เริ่มต้น - สิ้นสุดหายไป เมื่อกดยืนยัน โดยที่ยังไม่ได้กรอกชื่อผู้ขายลงไป
- แก้ไข ข้อความในเอกสาร ผลเตรียมตัวเข้าปฏิบัติการ PM ถูกเข้ารหัสไว้
- ปรับปรุงความเร็วในการโหลดหน้าปฏิทิน งาน CM โดยใช้งาน cache ช่วยเหลือ (เปิดครั้งแรกจะช้าอยู่)
- แก้ไขให้การออก PDF ของ CM และ PM ทำการเก็บไฟล์ลงตามงานของมันเอง
- แก้ไขปัญหาการสร้างไฟล์แล้ว ไม่พบไฟล์ที่สร้างขึ้นมา ออก error 404
1.1.2 - 2025-11-26
Changed:
- เพิ่มตัวเลือก Stulz SIAM ในโครงการ และหากเลือกแล้ว PM และ CM ที่ออกจะเป็นภาษาอังกฤษตาม template ของทาง Stulz SIAM
- ป้องกันไม่ให้สามารถสร้างโครงการย่อยได้เกิน 20 รายการ
Fixed:
- แก้ไขการออกใบงบ PDF ให้มีค่าต้นทุนและค่าใช้จ่ายจริง ในหัวข้อการบริการความเสี่ยง
- แก้ไขให้แสดง "LINE Message API หรือไม่" แสดงกลับมาในทุกหน้าที่เกี่ยวข้องกับการส่ง LINE และ สามารถตั้งค่าได้
- หน้าโครงการ > รายงานผู้บริการ แก้ไขการขึ้น error 500 ในบางกรณี
- แก้ไขให้แสดงเวลาการดำเนินการตามความเป็นจริงในหน้างาน PM
- แก้ไขปัญหาเมื่อลูกค้าตามแบบสอบถามโดยมีคำชม ระบบเก็บค่าสถานะเป็นมีคำแนะนำแทน
- แก้ไขปัญหาหน้าออก PM ใหม่ รายชื่อผู้เข้าดำเนินการ มีการแสดงเป็นชื่อคนที่ลาออกไปแล้ว ส่วนคนที่ยังทำงานอยุ่ SITEM ไม่แสดง
- แก้ไขปัญหาการออก PM ใหม่ - เลือกความถี่ของระยะเวลาที่เข้าดำเนินการออกจำนวนงานได้ตรงตามที่เลือก
- แก้ไขให้นำ ช่องผู้ดำเนินการ กลับมาให้กรองในหน้างาน PM ได้
- แก้ไขปัญหาการออก Excel ในหน้างาน CM ไม่แสดงคอลัมน์รหัสปัญหา
- แก้ไขการออก List รายชื่ออุปกรณ์เป็น Excel ให้ลิงค์ QR Code ชี้มาที่ Smile Corp ได้ถูกต้อง
- แก้ไข Logo บนหัวกระดาษเอกสารให้ถูกต้องตามการเลือกบริษัทที่ดำเนินการ ในโครงการประกอบด้วย SITEM Limited, SITEM Corp, SITEM ST และ Stulz SIAM
1.1.1 - 2025-11-25
Changed:
- ปรับพฤติกรรมการ cache งานโครงการทั้งหมด ให้ทำเพียงครั้งเดียวในรอบ 3 นาที เพื่อลดปัญหาการ refresh ค่า cache บ่อยเกินไป ทำให้ระบบช้าลง
- ปรับปรุงการรับไฟล์จาก v1 → v2 ให้ตรวจเช็คว่ามีไฟล์อยู่แล้วหรือยัง เพื่อไม่ให้เกิดการดึงค่าซ้ำซ้อน
- งาน CM - ปรับการเพิ่ม CM ใหม่ ไม่จำเป็นต้อง validate ส่วนปัญหา
- สรุปยอดขาย - เปลี่ยนปีงบประมาณในหน้าสรุปยอดขายให้เป็น 1 มค. - 31 ธค.
- ปรับปรุงส่วน pagination ในหน้า "ตรวจสอบรายการประมวลผลออกรายงาน" พร้อมทั้งลดปริมาณการแสดงรายการให้เหลือเฉพาะงานที่ผู้ใช้งานทำการกดเรียกดำเนินการผ่านระบบ
Fixed:
- งาน CM - แก้ไขการออกรายงาน excel ในหน้ารายการ CM ไม่ได้
- งาน CM - แก้ไขปัญหาโหลดหน้า edit นาน จนทำให้ระบบล่ม
- สรุปยอดขาย - แก้ไข error 500 เมื่อทำการออก excel สรุปยอดขาย
- คลังเอกสาร - แก้ไข error 500 เมื่อทำการลบเอกสาร
- งานโครงการ - แก้ไข error 500 เมื่อเปิดส่วนงานจัดซื้อในบางโครงการ
- งานโครงการ - แก้ไข error 500 เมื่อทำการแก้ไขงวดวางบิลในบางโครงการ
- งานโครงการ - กดแก้ไขมูลค่างาน PM แล้วงาน CM ไม่เปลี่ยนค่าตามสัดส่วนให้โดยอัตโนมัติ
- งานโครงการ - กดแก้ไขโครงการที่เกี่ยวข้องแล้ว ผลลัพธ์ไม่เปลี่ยนตามที่แก้ไข
- งานโครงการ - ในหน้าออกโครงการใหม่ ระบบไม่ทำการแสดงรายชื่อลูกค้าที่ติดต่อมาให้เลือก หลังจากเลือกองค์กรลูกค้าแล้ว
- งานโครงการ - ไม่สามารถออกโครงการใหม่ได้ ติด validation อยู่หลายตัว
- งาน PM - เอกสาร PDF รายงานผลการดำเนินการ ไม่มีรูปถ่ายการดำเนินการแนบมาด้วย
- งาน PM - แก้ไขหน้าลงอุปกรณ์แบบหลายตัว ไม่ได้ทำการ decrypt ชื่ออุปกรณ์มาแสดง
- SMS - แก้ไขให้สามารถรับค่า POST จากภายนอกเพื่อส่ง LINE ต่อได้
1.1.0-hotfix.4 - 2025-11-24
Fixed:
- แก้ไขปัญหาหน้าโครงการ > ผลิตภัณฑ์ ขึ้น error 500
1.1.0-hotfix.3 - 2025-11-24
Changed:
- ถอดการใช้งาน ProjectController::getProjectAllCache() มาใช้งาน service สำหรับการจัดการ cache สำหรับ Project แทน
- ปรับปรุง pagination ให้กับหน้า process-queue
Fixed:
- งาน PM - หน้าลงอุปกรณ์หลายตัวมีปัญหาแสดงข้อความ encryption ขึ้นมา
- ไม่สามารถค้นหาโครงการจากช่อง "ค้นหาเลขที่โครงการ"
- ปรับปรุงความเร็วในการโหลดหน้างาน CM
- แก้ไขปัญหาไม่สามารถ update งานโครงการได้
- นำ ProjectAdditionalDetail กลับมาให้ เพิ่มและแก้ไขในหน้าแก้ไขโครงการได้
1.1.0-hotfix.2 - 2025-11-24
Fixed:
1.1.0-hotfix.1 - 2025-11-23
Fixed
- Use project cache to improved page loading speed
1.1.0 - 2025-11-23
Added:
- ทำการ encryption ข้อมูลส่วนบุคคลที่อยู่ในระบบทั้งหมด
- สามารถแสดงข้อมูล encryption ได้ถูกต้อง
- สามารถค้นหาข้อมูลที่ถูก encryption ได้ถูกต้อง
Changed:
- ทำการย้ายชุดข้อมูล Asset, Asset Image จาก v1 มาสู่ v2
1.0.8-hotfix.3 - 2025-11-21
Added:
- เพิ่มระบบแสดงคิวการออกเอกสาร PDF, Excel, Zip ไฟล์
Changed:
- เปลี่ยนรูปแบบการออก Temporay Url ในการเปลี่ยนรหัสผ่านให้มีความปลอดภัยมากยิ่งขึ้น
- เปลี่ยนให้การแสดงรูปถ่ายในงาน PM เมื่อทำการถ่ายตามงานย่อย ไม่ต้องแสดงทันทีในขณะที่โหลดหน้าขึ้นมา จะทำการแสดงรูปต่อเมื่อผู้ใช้งานทำการกดเปิดดู
Fixed:
- แก้ไขการแสดง tag HTML ในหน้า งาน PM > tab อุปกรณ์หลายตัว
- แก้ไขเมื่อทำการกดลิงค์เปลี่ยนรหัสผ่านในอีเมล์ แล้วเกิด Error 403
- แก้ไขการออกตัวอย่างรายงาน PDF ในงาน PM
- แก้ไขให้สามารถอัพโหลดรูปถ่ายลงไปในงาน PM ได้
1.0.8-hotfix.2 - 2025-11-18
Changed:
- ปรับวิธีการแสดงตัวอย่างรายงาน PDF ให้ทำการตรวจไปที่ Cache ว่ามีไฟล์ให้แสดงผลแล้วหรือยัง (ทดลองเฉพาะ PM ก่อน)
- เมื่อสร้างไฟล์ไม่สำเร็จ notification จะต้องไม่แสดงปุ่มให้ดาว์นโหลดไฟล์ได้
Fixed:
- เมื่อกดตั้งค่า OTP ในหน้าตั้งค่าผู้ใช้งานแล้ว เกิด Error 500 และบางครั้งระบบ redirect ไปยังหน้ากรอก OTP
- แก้ไขการแสดงออกรายงาน PDF ในหน้า PM ให้ไม่สามารถออกได้หากยังไม่ได้กรอกข้อมูลลงไป
1.0.8-hotfix.1 - 2025-11-14
Fixed:
- แก้ไขปัญหาหน้างาน PM ใช้เวลาโหลดนานเกิน 30 วินาที
1.0.8 - 2025-11-13
Fixed:
- ในส่วนของตัวกรอง (Filter) ของหน้ารายการ Demand Marketing ตัวเลือกใน Dropdown ของ "ผู้ออก" หรือ "ผู้สร้าง" (Creator/Owner) ไม่แสดงชื่อของผู้ใช้งานที่กำลังล็อกอินเข้าระบบอยู่ในขณะนั้น ทำให้ผู้ใช้ไม่สามารถกรองเพื่อดูเฉพาะรายการที่ตนเองเป็นคนสร้างได้
- เมื่อผู้ใช้เปิดหน้ารายการ Demand Marketing เป็นครั้งแรก ระบบจะแสดงข้อมูลจำนวนหนึ่งซึ่งไม่ตรงกับจำนวนข้อมูลทั้งหมดที่มีอยู่จริงตามเงื่อนไข Filter เริ่มต้น ผู้ใช้จำเป็นต้องกดปุ่ม "ค้นหา/ Filter" ซ้ำอีกครั้งโดยที่ไม่ได้เปลี่ยนแปลงเงื่อนไขใดๆ เพื่อให้ระบบแสดงข้อมูลทั้งหมดอย่างถูกต้อง
- ในหน้าผู้ใช้งาน เมื่อเลือก filter ตามแผนก แล้วกดค้นหา ผลลัพธ์ไม่ได้กรองตามแผนกที่เลือกไว้
- หน้าโครงการ ไม่สามารถเปิดเมนู "อื่นๆ" ขึ้นมาได้
- ไม่สามารถกด "ส่งรายงานให้ลูกค้า" และ "ออกรายงาน (TH Sarabun)" ได้
- ไม่สามารถเข้าหน้าเมนู รายงาน → สรุปรายงาน CM ได้
- ในปุ่มตัวอย่างการแสดงผล PDF ของ Task งาน มีการแสดงผลแต่ละบรรทัดติดกัน
- หน้าอื่นๆ → รายชื่อผู้สมัครรอเข้าระบบ ไม่สามารถเปิดขึ้นมาได้
- ปรับเอกสาร PDF ผลการเตรียมพร้อมก่อนเข้าปฏิบัติงานของ PM ให้ออกด้วยฟอนต์ TH Sarabun
- ปรับหน้าการออกเอกสารใบรับประกัน และการออก PDF ในหน้างานโครงการ ให้ทำงานได้
- ทำการ Block : เอกสารใบรับประกัน(Draft) -> Action -> กรอกข้อมูล/แก้ไขข้อมูลใบรับประกัน
- ในหน้าการเพิ่ม stock สินค้าใหม่ ระดับของสินค้าใน Dropdown หายไป เมื่อเกิดการ validate เกิดขึ้น
- ออกรายงาน PDF ของผลการดำเนินการ PM ทั้งแบบรายการเดียว และ หลายรายการ
- ไม่สามารถกดยืนยันการเปลี่ยนสถานะ OTP ของผู้ใช้งานได้
- ไม่สามารถเปิดหน้ารายการ PM หลักได้
1.0.7-hotfix.2 - 2025-10-28
Fixed:
- ไม่สามารถกด สร้างไฟล์รายงาน PDF แบบ Batch จากในหน้างาน PM ได้
- ไม่สามารถกด ออกรายงาน (TH Sarabun) และ ส่งเมล์รายงานใหู้กค้า ในหน้างาน CM ได้
- ไม่สามารถเปิด tab "อื่นๆ" ในหน้าโครงการได้ เกิด error ขึ้นมา
- ในหน้าหนังสือค้ำประกัน มีบางเงื่อนไขที่ไม่สามารถ filter ได้
1.0.7-hotfix.1 - 2025-10-06
Fixed:
- เมื่อเพิ่มโครงการใหม่ เกิด Internal Server Error
- ในหน้างาน PM ไม่สามารถกด "สร้างไฟล์รายงาน PDF แบบ Batch" ได้
- ในหน้า ลูกค้า > ใบเบิกของขวัญ เกิด Internal Server Error
- ปรับหน้าที่ยังแสดง HTML tag เช่น งานจัดซื้อ, เงินสดคำประกันสัญญา, ข่าวสารบน smile
1.0.7 - 2025-10-03
Fixed:
- แก้ไขการ filter ในหน้าเบิกของขวัญลูกค้าให้กรองผลลัพธ์ได้ถูกต้อง
- แก้ไขการแสดงผล tag HTML ให้แสดงได้ถูกต้องในหน้า CM ส่วน
- "รายละเอียด PM"
- งาน Support ในงานโครงการ
- ทุกหน้าในผลิตถัณฑ์ / Commission
- แก้ไขการแเสดงผลหน้า Sales Forecast ให้ถูกต้องตามรูปแบบของ ERP 1
- แก้ไขหน้า รายชื่อ Vendor ให้ถูกต้องตามรูปแบบของ ERP 1
- ทำการคงค่าที่ผู้ใช้งานได้กรอกเอาไว้ในฟอร์ม เมื่อกดยืนยัน แล้วติด validation ระบบจะยังจำค่าเก่าที่ส่งเข้ามาเอาไว้
[1.0.6] - 2025-09-29
Added:
เพิ่มหน้าเบอร์ Telealarm
Optimize การเปิดงาน CM ใหม่
ผู้ดำเนินการงาน CM ให้สามารถเลือกได้แค่คนเดียว
Fixed:
แก้ไข pagination ไม่แสดงในหน้ารวมโครงการ
แก้ไข error เมื่อทำการเพิ่ม stock
แก้ไข error เมื่อทำการใส่ตัวเลขการเงินผิดวิธี ใน sub-evaluate form
ปรับปรุงให้แบบสอบถามงานบริการ รหัสลูกค้า (ถ้ามี) ไม่แสดงเลข 0
หน้า demand marketing - แก้ไข กรณีเพิ่มข้อมูล แล้วกรอกข้อความผิด เมื่อเกิดการ Validate แล้ว ข้อความหมายเหตุหายไป
หน้าโครงการ → ข้อมูลลูกค้าแสดงข้อมูลเป็น HTML tag
1.0.5 - 2025-09-18
Added:
- สามารถออก PDF โดยส่วนใหญ่ได้แล้ว
- สามารถออก PDF Payment Approval, Product Approval, Goods Arrival, ใบส่งเข้า Stock ในแผนจัดซื้อต่างประเทศได้
- เพิ่มหน้าประมาณการความสำเร็จของงาน
- เพิ่มหน้า Email Live
- เพิ่มหน้า Email to Line Message Pattern (Packet Power)
- เพิ่มหน้า Forecast Regression ปีต่อปี
- เพิ่มหน้า SMS Live
Fixed:
- แก้ไขในหน้า เพิ่มลูกค้าใหม่ กดปุ่มเพิ่มแล้วเกิด Error ขึ้น
- หมายเลขโครงการแสดงชื่อข้อมูลทดสอบแทนที่จะเป็นหมายเลขโครงการจริงในหน้า "งาน PM"
- PM & CM เพิ่มช่องใส่เวลาจริงตามรูปแบบของ เวอร์ชั่นเก่า
- แสดงรูปภาพในหน้า ข้อมูลลูกค้า ไม่ขึ้น
- แก้ไขการเพิ่มแผนจัดซื้อติด Error
- แก้ไขไม่สามารถแสดงหน้าโครงการได้เมื่อ ตั้งเงื่อนไขบางอย่างให้กับ user
1.0.4 - 2025-08-06
Added:
- สามารถลบไฟล์ temp ที่สร้างขึ้นมาใน GCP ได้เป็นรายวัน โดยทำงานตามกำหนดเวลา จะทำการลบไฟล์ของวันก่อนออกไป
Changed:
- ปรับปรุงการออก Export PDF รายงานเตรียมความพร้อมในหน้า Preventive Maintenance โดยทำการสร้างไฟล์ใหม่ขึ้นมาทั้งสองกรณี
- หากต้องการดูแค่ผลลัพธ์ จะนำไปเก็บใน temp folder รอลบในภายหลัง
- หากเก็บไฟล์ลงระบบถาวร จะแจ้งผู้ใช้งานให้ทราบผ่าน notification
Fixed:
- แก้ไขการกรอก serial เข้าผลิตภัณฑ์หลายตัวไม่ได้
- แก้ไขให้ประเภทเอกสารแสดงให้ครบตามตัวอย่างที่อยู่ใน v1
- ปรับปรุงการ pull ไฟล์ asset และ image จาก server v1 ให้ artisan command อ่านง่ายขึ้น
- แก้ไขปัญหาที่จะเข้าลูปทำงานไม่รู้จบ
- แก้ไขปัญหาไฟล์มีตัวอักษร zero width อยู่ในชื่อไฟล์
- แก้ไขการแสดงผลประมาณการค่าใช้จ่ายในประเทศและต่างประเทศให้แสดงได้ถูกต้อง
- ปรับปรุงการแสดงผลค่า HTML ในหน้าต่างๆ ให้แสดงได้ถูกต้อง
- ปรับปรุงให้สามารถเพิ่ม PO ในหน้า project > purchase ได้
- ถอดการ validate เลือกรหัสปัญหา, เลือกรถ service ออกจากหน้าแก้ไข CM
- ปรับปรุงการทำงานเรื่อง login และ refactor ส่วน Authentication ให้ทำงานได้ถูกต้อง
- แก้ไขปัญหาเมื่อ login แล้วไปติดอยู่ในหน้าว่าง ไม่ทำงานต่อ
- แก้ไข avatar ของ user แสดงผลไม่ถูกต้อง
- แก้ไขการ redirect ไปยังหน้า oauth ของ google ให้ถูกต้อง
1.0.3-hotfix.1 - 2025-07-23
Changed:
- เพิ่มหน้าต้นทุนและการใช้จ่าย ในโครงการ
Fixed:
- แก้ไขการบันทึกและการแก้ไขข้อมูลในหน้า PM ที่ติดปัญหา Group By ใน SQL
- แก้ไขหน้าเมนูโครงการ - งานบริการ ที่มีการแสดงผลเป็น HTML
- แก้ไขประเภทโครงการให้ตรงกับใน ERP 1
- แก้ไขการจัดการ set password
1.0.3 - 2025-07-22
Changed
- จัดกลุ่มเมนูงานจัดซื้อใหม่
Fixed
- ตรวจสอบการ Validate ข้อมูลที่กรอกมาจาก Form ทั้ง create และ edit ก่อนบันทึกข้อมูล เพื่อป้องกันการ Error ที่เกิดขึ้นบน SQL
- เปลี่ยนการออกใบ Payment Approval
- ปรับหน้า demand marketing ให้มี validation
- ปรับหน้าการโอนแฟ้มงานให้มี validation
- ปรับการแสดงผล HTML บนหน้ารวม BG, หน้ารวมการลงทะเบียนของ vendor , หน้ารวมรายการ SMS To Line, หน้า service ticket และหน้าแบบสอบถามความคิดเห็น
1.0.2-beta-2 - 2025-07-22
Fixed
- เพิ่ม 'is_moved' ลงในช่อง fillable ของโมเดล Asset และ AssetImage
- แก้ไขการส่งค่าไปแก้ไขใน database ผิดที่ของ AssetImage
1.0.2-beta-1 - 2025-07-22
Added
- สามารถดึงไฟล์ asset และ image จากที่อยู่ใน V1 (Amazon AWS EC2 disk) ไปเก็บลงใน Google Cloud Storage (GCP) แทน
1.0.2 - 2025-07-15
Changed
- เปลี่ยนเวลาการเก็บ Cache จากนาที มาเป็น วินาที ตามวิธีการใหม่ของ Laravel ตัวปัจจุบัน
1.0.1 - 2025-06-26