bep40 commited on
Commit
c18437a
·
1 Parent(s): 6cd80e4

Fix: mã đơn hàng tự động cập nhật theo tên khách hàng khi báo giá trực tiếp

Browse files

- cart-quote.js: thêm input listener trên #qcName — khi đổi tên khách hàng trong modal báo giá, mã đơn hàng (#qcCompany) tự động tạo lại theo chữ cái đầu tên + ngày (VD: 'Nguyễn Minh Anh' → DHNMA190826). Trước đây mã chỉ tạo 1 lần khi mở modal nên không theo tên đã sửa.
- customers.js: applyCustomerToQuote() (chọn khách từ danh sách khách hàng) giờ cũng tạo lại mã đơn hàng theo tên vừa chọn (set .value không kích hoạt input event nên cần gọi genOrderCode() trực tiếp).
- cache-bust gc=36/gc=19, version v30

Files changed (4) hide show
  1. index.html +2 -2
  2. src/cart-quote.js +15 -0
  3. src/customers.js +8 -0
  4. src/version.js +1 -1
index.html CHANGED
@@ -836,8 +836,8 @@
836
  <script defer src="./src/modal-top.js?gc=2"></script>
837
  <!-- App modules: defer keeps execution order (parse order) but doesn't block
838
  first paint — the welcome/avatar-picker modal renders immediately. -->
839
- <script defer src="./src/cart-quote.js?gc=35"></script> <!-- Cart + Quote module (Giỏ hàng / Báo giá) -->
840
- <script defer src="./src/customers.js?gc=18"></script> <!-- Customer list (Danh sách khách hàng) -->
841
  <script defer src="./src/vaix-rag.js?gc=66"></script> <!-- V.AI STUDIO RAG Module - loads FASTER via light index; lazy galleries; spec-aware search -->
842
  <script defer src="./src/greeting-news.js?gc=41"></script> <!-- Greeting HOT news cards + source links -->
843
  <script defer src="./src/order-sync.js?gc=17"></script> <!-- Order sync with V.AISTUDIO backend -->
 
836
  <script defer src="./src/modal-top.js?gc=2"></script>
837
  <!-- App modules: defer keeps execution order (parse order) but doesn't block
838
  first paint — the welcome/avatar-picker modal renders immediately. -->
839
+ <script defer src="./src/cart-quote.js?gc=36"></script> <!-- Cart + Quote module (Giỏ hàng / Báo giá) -->
840
+ <script defer src="./src/customers.js?gc=19"></script> <!-- Customer list (Danh sách khách hàng) -->
841
  <script defer src="./src/vaix-rag.js?gc=66"></script> <!-- V.AI STUDIO RAG Module - loads FASTER via light index; lazy galleries; spec-aware search -->
842
  <script defer src="./src/greeting-news.js?gc=41"></script> <!-- Greeting HOT news cards + source links -->
843
  <script defer src="./src/order-sync.js?gc=17"></script> <!-- Order sync with V.AISTUDIO backend -->
src/cart-quote.js CHANGED
@@ -1469,6 +1469,21 @@ ready(function() {
1469
  bindCartButton();
1470
  var overlay = document.getElementById('cartOverlay');
1471
  if (overlay) overlay.addEventListener('click', function(e) { if (e.target === overlay) closeCart(); });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1472
  // Re-bind in case the button is injected late
1473
  setTimeout(function(){ bindCartButton(); }, 500);
1474
  setTimeout(function(){ bindCartButton(); }, 2000);
 
1469
  bindCartButton();
1470
  var overlay = document.getElementById('cartOverlay');
1471
  if (overlay) overlay.addEventListener('click', function(e) { if (e.target === overlay) closeCart(); });
1472
+ // Live-regenerate the order code (mã đơn hàng) whenever the customer name
1473
+ // changes in the quote modal. genOrderCode() builds "DH<initials><ddmmyy>"
1474
+ // from the customer name (e.g. "Minh Anh" → DHMA190826). Without this the
1475
+ // code stays frozen at the value generated when the modal first opened.
1476
+ try {
1477
+ var qcName = document.getElementById('qcName');
1478
+ var qcCompany = document.getElementById('qcCompany');
1479
+ if (qcName && qcCompany && !qcName._vaiCodeSync) {
1480
+ qcName._vaiCodeSync = true;
1481
+ qcName.addEventListener('input', function () {
1482
+ var nv = (qcName.value || '').trim();
1483
+ if (nv) qcCompany.value = genOrderCode();
1484
+ });
1485
+ }
1486
+ } catch (e) {}
1487
  // Re-bind in case the button is injected late
1488
  setTimeout(function(){ bindCartButton(); }, 500);
1489
  setTimeout(function(){ bindCartButton(); }, 2000);
src/customers.js CHANGED
@@ -379,6 +379,14 @@
379
  var qcAddr = document.getElementById('qcAddr');
380
  if (qcName && name) qcName.value = name;
381
  if (qcAddr && addr) qcAddr.value = addr;
 
 
 
 
 
 
 
 
382
 
383
  // Auto-apply per-customer ck (global % OR per-brand % like "Malloca 35, Grob 20").
384
  if (record.ck != null && String(record.ck).trim() !== '') {
 
379
  var qcAddr = document.getElementById('qcAddr');
380
  if (qcName && name) qcName.value = name;
381
  if (qcAddr && addr) qcAddr.value = addr;
382
+ // Regenerate the order code (mã đơn hàng) from the newly selected
383
+ // customer's name — genOrderCode() builds "DH<initials><ddmmyy>".
384
+ try {
385
+ if (qcName && name && window.CART_QUOTE && window.CART_QUOTE.genOrderCode) {
386
+ var qcCompany = document.getElementById('qcCompany');
387
+ if (qcCompany) qcCompany.value = window.CART_QUOTE.genOrderCode();
388
+ }
389
+ } catch (e) {}
390
 
391
  // Auto-apply per-customer ck (global % OR per-brand % like "Malloca 35, Grob 20").
392
  if (record.ck != null && String(record.ck).trim() !== '') {
src/version.js CHANGED
@@ -1,3 +1,3 @@
1
  // V.AI AVATAR — version banner (used for cache-busting / diagnostics)
2
- window.VAI_AVATAR_VERSION = "v29-cart-fix-text-extract";
3
  window.VAI_AVATAR_CACHE = "v26-gc-" + Date.now();
 
1
  // V.AI AVATAR — version banner (used for cache-busting / diagnostics)
2
+ window.VAI_AVATAR_VERSION = "v30-order-code-live";
3
  window.VAI_AVATAR_CACHE = "v26-gc-" + Date.now();