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:

  • Fix project cache error

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

  • Initial version