From 5124ad78affe66dcc36470634bba141d3e42a179 Mon Sep 17 00:00:00 2001 From: MEHMETKECECI Date: Mon, 16 Feb 2026 15:53:00 +0300 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ui/dist/spa/index.html | 2 +- ui/dist/spa/js/app.292f5316.js | 1 - ui/dist/spa/js/app.292f5316.js.gz | Bin 6174 -> 0 bytes ui/dist/spa/js/chunk-common.451c93b1.js | 1 - ui/dist/spa/js/chunk-common.451c93b1.js.gz | Bin 15315 -> 0 bytes ui/src/stores/orderentryStore.js | 163 +++++++++++++-------- 6 files changed, 104 insertions(+), 63 deletions(-) delete mode 100644 ui/dist/spa/js/app.292f5316.js delete mode 100644 ui/dist/spa/js/app.292f5316.js.gz delete mode 100644 ui/dist/spa/js/chunk-common.451c93b1.js delete mode 100644 ui/dist/spa/js/chunk-common.451c93b1.js.gz diff --git a/ui/dist/spa/index.html b/ui/dist/spa/index.html index ee10de6..f352493 100644 --- a/ui/dist/spa/index.html +++ b/ui/dist/spa/index.html @@ -1 +1 @@ -Baggi SS
\ No newline at end of file +Baggi SS
\ No newline at end of file diff --git a/ui/dist/spa/js/app.292f5316.js b/ui/dist/spa/js/app.292f5316.js deleted file mode 100644 index b0255f6..0000000 --- a/ui/dist/spa/js/app.292f5316.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{var e={824:(e,t,r)=>{"use strict";r(939),r(6461),r(7049);var o=r(8633),n=r(7486),s=r(4187),a=r(1347);const i={__name:"App",setup(e){return(e,t)=>{const r=(0,a.g2)("router-view");return(0,a.uX)(),(0,a.Wv)(r)}}},l=i,c=l;var d=r(180),m=r(705);const u=(0,d.nY)(()=>{const e=(0,m.Ey)();return e});var p=r(6470),h=r(455);const f=[{path:"/",redirect:"/login"},{path:"/login",component:()=>Promise.all([r.e(121),r.e(913)]).then(r.bind(r,4913)),meta:{public:!0},children:[{path:"",name:"login",component:()=>Promise.all([r.e(121),r.e(713)]).then(r.bind(r,713))}]},{path:"/first-password-change",component:()=>Promise.all([r.e(121),r.e(913)]).then(r.bind(r,4913)),meta:{public:!0},children:[{path:"",name:"first-password-change",component:()=>Promise.all([r.e(121),r.e(330)]).then(r.bind(r,8330))}]},{path:"/password-reset/:token",component:()=>Promise.all([r.e(121),r.e(913)]).then(r.bind(r,4913)),meta:{public:!0},children:[{path:"",name:"password-reset",component:()=>Promise.all([r.e(121),r.e(238)]).then(r.bind(r,2238))}]},{path:"/app",component:()=>Promise.all([r.e(121),r.e(618)]).then(r.bind(r,5618)),children:[{path:"",name:"dashboard",component:()=>Promise.all([r.e(121),r.e(996),r.e(621)]).then(r.bind(r,2621)),meta:{permission:"system:read"}},{path:"permissions",name:"permissions",component:()=>Promise.all([r.e(121),r.e(996),r.e(548)]).then(r.bind(r,4548)),meta:{permission:"system:read"}},{path:"role-dept-permissions",name:"role-dept-permissions",component:()=>Promise.all([r.e(121),r.e(996),r.e(607)]).then(r.bind(r,5607)),meta:{permission:"user:update"}},{path:"role-dept-permissions/list",name:"role-dept-permissions-list",component:()=>Promise.all([r.e(121),r.e(996),r.e(54)]).then(r.bind(r,54)),meta:{permission:"user:update"}},{path:"role-dept-permissions/editor",name:"role-dept-permissions-editor",component:()=>Promise.all([r.e(121),r.e(996),r.e(673)]).then(r.bind(r,7673)),meta:{permission:"user:update"}},{path:"user-permissions",name:"user-permissions",component:()=>Promise.all([r.e(121),r.e(996),r.e(465)]).then(r.bind(r,4465)),meta:{permission:"user:update"}},{path:"statementofaccount",name:"statementofaccount",component:()=>Promise.all([r.e(121),r.e(996),r.e(493)]).then(r.bind(r,8493)),meta:{permission:"finance:view"}},{path:"statementreport",name:"statementreport",component:()=>Promise.all([r.e(121),r.e(996),r.e(891)]).then(r.bind(r,1272)),meta:{permission:"finance:view"}},{path:"statementheaderreport",name:"statementheaderreport",component:()=>Promise.all([r.e(121),r.e(996),r.e(770)]).then(r.bind(r,2770)),meta:{permission:"finance:view"}},{path:"users",name:"user-gateway",component:()=>Promise.all([r.e(121),r.e(996),r.e(784)]).then(r.bind(r,1784)),meta:{permission:"user:view"}},{path:"users/list",name:"user-list",component:()=>Promise.all([r.e(121),r.e(996),r.e(432)]).then(r.bind(r,8432)),meta:{permission:"user:view"}},{path:"users/new",name:"user-new",component:()=>Promise.all([r.e(121),r.e(996),r.e(806)]).then(r.bind(r,2806)),meta:{mode:"new",permission:"user:insert"}},{path:"users/edit/:id",name:"user-edit",component:()=>Promise.all([r.e(121),r.e(996),r.e(806)]).then(r.bind(r,2806)),props:!0,meta:{mode:"edit",permission:"user:update"}},{path:"users/view/:id",name:"user-view",component:()=>Promise.all([r.e(121),r.e(996),r.e(806)]).then(r.bind(r,2806)),props:!0,meta:{mode:"view",permission:"user:view"}},{path:"activity-logs",name:"activity-logs",component:()=>Promise.all([r.e(121),r.e(996),r.e(251)]).then(r.bind(r,5251)),meta:{permission:"user:view"}},{path:"test-mail",name:"test-mail",component:()=>Promise.all([r.e(121),r.e(996),r.e(629)]).then(r.bind(r,629)),meta:{permission:"user:insert"}},{path:"order-gateway",name:"order-gateway",component:()=>Promise.all([r.e(121),r.e(996),r.e(755)]).then(r.bind(r,2755)),meta:{permission:"order:view"}},{path:"order-entry/:orderHeaderID",name:"order-entry",component:()=>Promise.all([r.e(121),r.e(996),r.e(981)]).then(r.bind(r,6981)),props:!0,meta:{mode:"new",permission:"order:insert"}},{path:"order-edit/:orderHeaderID",name:"order-edit",component:()=>Promise.all([r.e(121),r.e(996),r.e(981)]).then(r.bind(r,6981)),props:!0,meta:{mode:"edit",permission:"order:update"}},{path:"order-list",name:"order-list",component:()=>Promise.all([r.e(121),r.e(996),r.e(358)]).then(r.bind(r,2358)),meta:{permission:"order:view"}},{path:"order-bulk-close",name:"order-bulk-close",component:()=>Promise.all([r.e(121),r.e(996),r.e(398)]).then(r.bind(r,5398)),meta:{permission:"order:update"}},{path:"order-pdf/:id",name:"order-pdf",component:()=>Promise.all([r.e(121),r.e(996),r.e(950)]).then(r.bind(r,5950)),props:!0,meta:{permission:"order:export"}},{path:"change-password",name:"change-password",component:()=>Promise.all([r.e(121),r.e(996),r.e(486)]).then(r.bind(r,1486))}]},{path:"/:catchAll(.*)*",component:()=>Promise.all([r.e(121),r.e(28)]).then(r.bind(r,28))}],g=f;var b=r(5767),w=r(2584);const v=(0,p.wE)(function(){const e=(0,h.aE)({history:(0,h.Bt)(),routes:g});return e.beforeEach(async(e,t,r)=>{const o=(0,b.n)(),n=(0,w.o)();if(!0===e.meta?.public)return r();if(!o.isAuthenticated)return r("/login");if(o.mustChangePassword&&"/first-password-change"!==e.path)return r("/first-password-change");if(o.isAdmin)return r();if(!n.loaded)try{await n.fetchPermissions()}catch(e){console.error("Permission load failed",e)}const s=e.meta?.permission;if(!s)return r();const a=n.hasApiPermission(s);if(!a)return console.warn("⛔ ACCESS DENIED:",{path:e.fullPath,permission:s}),r("/unauthorized");r()}),e});async function y(e,t){const r=e(c);r.use(n.A,t);const o="function"===typeof u?await u({}):u;r.use(o);const a=(0,s.IG)("function"===typeof v?await v({store:o}):v);return o.use(({store:e})=>{e.router=a}),{app:r,store:o,router:a}}var P=r(4222),S=r(8564),A=r(9765),k=r(144);const E={config:{notify:{position:"top",timeout:2500}},lang:P.A,plugins:{Loading:S.A,Dialog:A.A,Notify:k.A}},C="/";async function x({app:e,router:t,store:r},o){let n=!1;const s=e=>{try{return t.resolve(e).href}catch(e){}return Object(e)===e?null:e},a=e=>{if(n=!0,"string"===typeof e&&/^https?:\/\//.test(e))return void(window.location.href=e);const t=s(e);null!==t&&(window.location.href=t,window.location.reload())},i=window.location.href.replace(window.location.origin,"");for(let s=0;!1===n&&s{const[t,o]=void 0!==Promise.allSettled?["allSettled",e=>e.map(e=>{if("rejected"!==e.status)return e.value.default;console.error("[Quasar] boot error:",e.reason)})]:["all",e=>e.map(e=>e.default)];return Promise[t]([Promise.resolve().then(r.bind(r,6795))]).then(t=>{const r=o(t).filter(e=>"function"===typeof e);x(e,r)})})},2584:(e,t,r)=>{"use strict";r.d(t,{o:()=>c});r(939),r(4151);var o=r(705),n=r(2986),s=r(5767);const a={read:["read","view"],view:["read","view"],write:["write","insert"],insert:["write","insert"],update:["update"],delete:["delete"],export:["export"]};function i(e){return String(e||"").trim().toLowerCase()}function l(e){const t=i(e);return a[t]||[t]}const c=(0,o.nY)("permission",{state:()=>({routes:[],matrix:[],loaded:!1}),getters:{isAdmin(){const e=(0,s.n)();return!0===e.isAdmin},hasApiPermission:e=>t=>{const r=(0,s.n)();if(r.isAdmin)return!0;if(!e.loaded)return!1;if(!t)return!0;if(t.includes(":")){const[r,o]=t.split(":"),n=i(r),s=l(o);return e.matrix.some(e=>i(e.module)===n&&s.includes(i(e.action))&&!0===e.allowed)}const o=t;if(e.routes.some(e=>e.route===o&&e.can_access))return!0;const n=o.replace(/\/\d+/g,"/{id}");return!!e.routes.some(e=>e.route===n&&e.can_access)||e.routes.some(e=>e.can_access&&o.startsWith(e.route))},hasModule:e=>t=>{const r=(0,s.n)(),o=i(t);return!!r.isAdmin||!!e.loaded&&e.matrix.some(e=>i(e.module)===o&&!0===e.allowed)},hasPermission:e=>(t,r)=>{const o=(0,s.n)(),n=i(t),a=l(r);return!!o.isAdmin||!!e.loaded&&e.matrix.some(e=>i(e.module)===n&&a.includes(i(e.action))&&!0===e.allowed)}},actions:{async fetchPermissions(){const e=(0,s.n)();if(e.isAdmin)return this.routes=[],this.matrix=[],void(this.loaded=!0);try{const e=await n.Ay.get("/permissions/routes");this.routes=e.data||[];const t=await n.Ay.get("/permissions/effective");this.matrix=t.data||[],console.group("🔐 PERMISSION DEBUG"),console.log("API ROUTES:",this.routes),console.log("EFFECTIVE MATRIX:",this.matrix),console.groupEnd()}catch(e){console.error("❌ Permission load failed",e),this.routes=[],this.matrix=[]}finally{this.loaded=!0}},clear(){this.routes=[],this.matrix=[],this.loaded=!1}}})},2634:()=>{},2986:(e,t,r)=>{"use strict";r.d(t,{Ay:()=>f,Jt:()=>c,RG:()=>h,bE:()=>d,hi:()=>p,yJ:()=>m});var o=r(9100),n=r(367),s=r(5767);const a="/api",i=o.A.create({baseURL:a,timeout:18e4,paramsSerializer:e=>n.stringify(e,{arrayFormat:"repeat"}),withCredentials:!0});i.interceptors.request.use(e=>{const t=(0,s.n)(),r=e.url||"",o=r.startsWith("/auth/login")||r.startsWith("/auth/refresh")||r.startsWith("/password/forgot")||r.startsWith("/password/reset");return!o&&t?.token&&(e.headers||={},e.headers.Authorization=`Bearer ${t.token}`),e});let l=!1;i.interceptors.response.use(e=>e,async e=>{const t=e?.response?.status,r="undefined"!==typeof Blob&&e?.response?.data instanceof Blob;if((t>=500||r)&&e){const r=String(e?.config?.method||"GET").toUpperCase(),o=e?.config?.url||"",n=await p(e);e.parsedMessage=n,console.error(`❌ API ${t||"-"} ${r} ${o}: ${n}`)}if(401===e?.response?.status&&!l){l=!0;try{(0,s.n)().clearSession()}finally{l=!1}}return Promise.reject(e)});const c=(e,t={},r={})=>i.get(e,{params:t,...r}).then(e=>e.data),d=(e,t={},r={})=>i.post(e,t,r).then(e=>e.data),m=(e,t={},r={})=>i.put(e,t,r).then(e=>e.data);async function u(e){if(!e)return"";if("undefined"!==typeof Blob&&e instanceof Blob)try{const t=(await e.text())?.trim();if(!t)return"";try{const e=JSON.parse(t);return e?.detail||e?.message||e?.error||t}catch{return t}}catch{return""}return"string"===typeof e?e.trim():"object"===typeof e&&(e?.detail||e?.message||e?.error)||""}async function p(e){let t=e?.parsedMessage||e?.response?.data?.detail||e?.response?.data?.message||e?.response?.data?.error||"";return t||(t=await u(e?.response?.data)),t||(t=e?.message||"Request failed"),t}const h=async(e,t={},r={})=>{try{const o=await i.get(e,{params:t,responseType:"blob",...r});return o.data}catch(e){const t=await p(e),r=new Error(t);throw r.status=e?.response?.status,r.original=e,r}},f=i},5767:(e,t,r)=>{"use strict";r.d(t,{n:()=>c});r(295);var o=r(705),n=r(2986),s=r(2584);function a(e){return String(e||"").trim().toLowerCase()}function i(e){return e&&"object"===typeof e?a(e.role_code??e.roleCode??e.RoleCode):""}function l(e){const t=String(e||"").trim();if(!t)return null;const r=t.split(".");if(3!==r.length)return null;try{const e=r[1].replace(/-/g,"+").replace(/_/g,"/").padEnd(4*Math.ceil(r[1].length/4),"="),t=atob(e);return JSON.parse(t)}catch{return null}}const c=(0,o.nY)("auth",{state:()=>{let e=null;try{const t=localStorage.getItem("user");t&&"undefined"!==t&&"null"!==t&&(e=JSON.parse(t))}catch{console.warn("⚠️ Invalid user in localStorage, cleared"),localStorage.removeItem("user")}return{token:localStorage.getItem("token"),user:e,forcePasswordChange:"1"===localStorage.getItem("forcePasswordChange")}},getters:{isAuthenticated:e=>!!e.token,mustChangePassword:e=>!!e.forcePasswordChange,isAdmin:e=>{const t=i(e.user);if(t)return"admin"===t;const r=l(e.token);return"admin"===a(r?.role_code)}},actions:{setSession({token:e,user:t}){this.token=e,this.user=t?{...this.user||{},...t}:null,this.forcePasswordChange=!!t?.force_password_change,localStorage.setItem("token",e),t?localStorage.setItem("user",JSON.stringify(t)):localStorage.removeItem("user"),localStorage.setItem("forcePasswordChange",this.forcePasswordChange?"1":"0")},clearSession(){this.token=null,this.user=null,this.forcePasswordChange=!1,localStorage.removeItem("token"),localStorage.removeItem("user"),localStorage.removeItem("forcePasswordChange"),(0,s.o)().clear()},async login(e,t){const r=await n.Ay.post("/auth/login",{username:e,password:t}),o=r?.token||r?.data?.token||r?.access_token||r?.data?.access_token,a=r?.user||r?.data?.user,i="string"===typeof o?o.trim():"",l=3===i.split(".").length;if(!i||!l)throw console.error("❌ LOGIN RESPONSE (unexpected):",r),new Error("Invalid login token");this.setSession({token:i,user:a});const c=(0,s.o)();return await c.fetchPermissions(),console.log("🔐 AUTH DEBUG",{isAdmin:this.isAdmin,users:c.hasPermission("/api/users/list"),orders:c.hasPermission("/api/orders/list"),logs:c.hasPermission("/api/activity-logs"),permissions:c.hasPermission("/api/permissions/matrix")}),!0}}})},6795:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var o=r(991),n=r(5115),s=r(5337),a=r(5188);r(8909);o.extend(n),o.extend(s),o.extend(a),o.locale("tr");const i=o}},t={};function r(o){var n=t[o];if(void 0!==n)return n.exports;var s=t[o]={exports:{}};return e[o].call(s.exports,s,s.exports,r),s.exports}r.m=e,(()=>{var e=[];r.O=(t,o,n,s)=>{if(!o){var a=1/0;for(d=0;d=s)&&Object.keys(r.O).every(e=>r.O[e](o[l]))?o.splice(l--,1):(i=!1,s0&&e[d-1][2]>s;d--)e[d]=e[d-1];e[d]=[o,n,s]}})(),(()=>{r.n=e=>{var t=e&&e.__esModule?()=>e["default"]:()=>e;return r.d(t,{a:t}),t}})(),(()=>{r.d=(e,t)=>{for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})}})(),(()=>{r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((t,o)=>(r.f[o](e,t),t),[]))})(),(()=>{r.u=e=>"js/"+(996===e?"chunk-common":e)+"."+{28:"1861262a",54:"92abb86e",238:"471bb852",251:"ec73d906",330:"aa2a2894",358:"629c6b73",398:"9152643f",432:"939f1ebd",465:"9a2899f5",486:"a263e6f6",493:"e8a952e1",548:"61f02757",607:"70ac7b00",618:"f36e56f9",621:"2108b55f",629:"2c27a0a3",673:"8f68da58",713:"5838996c",755:"7f443827",770:"4db9e143",784:"f73528a6",806:"754fb646",891:"181bb68a",913:"c0c6a5a1",950:"6078f4a8",981:"0247bab0",996:"451c93b1"}[e]+".js"})(),(()=>{r.miniCssF=e=>"css/"+e+"."+{54:"b237f020",358:"36bfde07",398:"961173a2",607:"8d5cccce",713:"e99910ab",784:"5916f342"}[e]+".css"})(),(()=>{r.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()})(),(()=>{r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t)})(),(()=>{var e={},t="baggisowtfaresystem:";r.l=(o,n,s,a)=>{if(e[o])e[o].push(n);else{var i,l;if(void 0!==s)for(var c=document.getElementsByTagName("script"),d=0;d{i.onerror=i.onload=null,clearTimeout(p);var n=e[o];if(delete e[o],i.parentNode&&i.parentNode.removeChild(i),n&&n.forEach(e=>e(r)),t)return t(r)},p=setTimeout(u.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=u.bind(null,i.onerror),i.onload=u.bind(null,i.onload),l&&document.head.appendChild(i)}}})(),(()=>{r.r=e=>{"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}})(),(()=>{r.p="/"})(),(()=>{if("undefined"!==typeof document){var e=(e,t,o,n,s)=>{var a=document.createElement("link");a.rel="stylesheet",a.type="text/css",r.nc&&(a.nonce=r.nc);var i=r=>{if(a.onerror=a.onload=null,"load"===r.type)n();else{var o=r&&r.type,i=r&&r.target&&r.target.href||t,l=new Error("Loading CSS chunk "+e+" failed.\n("+o+": "+i+")");l.name="ChunkLoadError",l.code="CSS_CHUNK_LOAD_FAILED",l.type=o,l.request=i,a.parentNode&&a.parentNode.removeChild(a),s(l)}};return a.onerror=a.onload=i,a.href=t,o?o.parentNode.insertBefore(a,o.nextSibling):document.head.appendChild(a),a},t=(e,t)=>{for(var r=document.getElementsByTagName("link"),o=0;onew Promise((n,s)=>{var a=r.miniCssF(o),i=r.p+a;if(t(a,i))return n();e(o,i,null,n,s)}),n={524:0};r.f.miniCss=(e,t)=>{var r={54:1,358:1,398:1,607:1,713:1,784:1};n[e]?t.push(n[e]):0!==n[e]&&r[e]&&t.push(n[e]=o(e).then(()=>{n[e]=0},t=>{throw delete n[e],t}))}}})(),(()=>{var e={524:0};r.f.j=(t,o)=>{var n=r.o(e,t)?e[t]:void 0;if(0!==n)if(n)o.push(n[2]);else{var s=new Promise((r,o)=>n=e[t]=[r,o]);o.push(n[2]=s);var a=r.p+r.u(t),i=new Error,l=o=>{if(r.o(e,t)&&(n=e[t],0!==n&&(e[t]=void 0),n)){var s=o&&("load"===o.type?"missing":o.type),a=o&&o.target&&o.target.src;i.message="Loading chunk "+t+" failed.\n("+s+": "+a+")",i.name="ChunkLoadError",i.type=s,i.request=a,n[1](i)}};r.l(a,l,"chunk-"+t,t)}},r.O.j=t=>0===e[t];var t=(t,o)=>{var n,s,[a,i,l]=o,c=0;if(a.some(t=>0!==e[t])){for(n in i)r.o(i,n)&&(r.m[n]=i[n]);if(l)var d=l(r)}for(t&&t(o);cr(824));o=r.O(o)})(); \ No newline at end of file diff --git a/ui/dist/spa/js/app.292f5316.js.gz b/ui/dist/spa/js/app.292f5316.js.gz deleted file mode 100644 index 85d8ba6cc361d4f27da5800a04b60a18a046ef51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6174 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 wr+utSb|gnoE=MiOLf*?f1f~{t.d(r,{J:()=>s});var a=t(1347),o=t(2584);function s(){const e=(0,o.o)();return{canRead:r=>(0,a.EW)(()=>e.hasPermission(r,"read")),canWrite:r=>(0,a.EW)(()=>e.hasPermission(r,"write")),canUpdate:r=>(0,a.EW)(()=>e.hasPermission(r,"update")),canDelete:r=>(0,a.EW)(()=>e.hasPermission(r,"delete")),canExport:r=>(0,a.EW)(()=>e.hasPermission(r,"export")),canApi:r=>(0,a.EW)(()=>e.hasApiPermission(r)),hasModule:r=>(0,a.EW)(()=>e.hasModule(r))}}},742:(e,r,t)=>{t.d(r,{E:()=>s});t(939),t(7049);var a=t(705),o=t(2986);const s=(0,a.nY)("account",{state:()=>({accountOptions:[],loading:!1,error:null}),actions:{async fetchAccounts(){this.loading=!0,this.error=null;try{const{data:e}=await o.Ay.get("/accounts");this.accountOptions=(Array.isArray(e)?e:[]).map(e=>({label:`${e.display_code||""} ${e.account_name||""}`.trim(),value:e.account_code}))}catch(e){console.error("❌ Error fetching accounts:",e),this.error=401===e?.response?.status?"Cari hesapları görüntüleme yetkiniz yok.":e?.response?.data?.message||e?.message||"Cari hesaplar yüklenemedi"}finally{this.loading=!1}}}})},4887:(e,r,t)=>{t.d(r,{x:()=>i});t(939),t(4520),t(3142),t(8832),t(8825),t(2528),t(4207),t(9188),t(1118);var a=t(705),o=t(2986),s=t(367);t(6795);const i=(0,a.nY)("statementheader",{state:()=>({headers:[],details:{},loading:!1,groupOpen:{}}),getters:{currencies(e){const r=new Set;for(const t of e.headers)r.add(t.para_birimi||"—");return Array.from(r).sort()},totalsByCurrency(e){const r={};for(const t of e.headers){const e=t.para_birimi||"—";r[e]||(r[e]={borc:0,alacak:0,bakiye:0,count:0}),r[e].borc+=Number(t.borc)||0,r[e].alacak+=Number(t.alacak)||0,r[e].bakiye+=Number(t.bakiye)||0,r[e].count+=1}return r},groupedRows:e=>{const r={};for(const t of e.headers){const e=t.para_birimi||"—";r[e]||(r[e]=[]),r[e].push(t)}const t=[];for(const[a,o]of Object.entries(r)){if(!o.length)continue;const r=[...o].sort((e,r)=>new Date(e.belge_tarihi)-new Date(r.belge_tarihi)),s=r.at(-1),i=s&&null!=s.bakiye?Number(s.bakiye):0;t.push({_type:"group",para_birimi:a,sonBakiye:i}),!1!==e.groupOpen[a]&&r.forEach(e=>{t.push({...e,_type:"data"})})}return t}},actions:{async loadStatements(e={}){this.loading=!0;try{const{data:r}=await o.Ay.get("/statements",{params:e,paramsSerializer:e=>s.stringify(e,{arrayFormat:"repeat"})});this.headers=Array.isArray(r)?r:[];for(const e of this.currencies)e in this.groupOpen||(this.groupOpen[e]=!0)}catch(e){console.error("❌ Statements yüklenemedi:",e),this.headers=[]}finally{this.loading=!1}},async loadDetails(e){if(e&&!this.details[e])try{const{data:r}=await o.Ay.get(`/statements/${e}/details`);this.details[e]=Array.isArray(r)?r:[]}catch(r){console.error("❌ Details yüklenemedi:",r),this.details[e]=[]}},toggleGroup(e){const r=e||"—";this.groupOpen[r]=!this.groupOpen[r]},openAllGroups(){for(const e of this.currencies)this.groupOpen[e]=!0},closeAllGroups(){for(const e of this.currencies)this.groupOpen[e]=!1}}})},5390:(e,r,t)=>{t.d(r,{w:()=>s});t(939),t(6461);var a=t(705),o=t(2986);const s=(0,a.nY)("downloadstpdf",{actions:{async downloadPDF(e,r,t,a=[]){try{const s={accountcode:e,startdate:r,enddate:t};Array.isArray(a)&&a.length>0&&(s.parislemler=a.filter(e=>void 0!==e&&null!==e&&""!==e));const i=await(0,o.RG)("/export-pdf",s),n=window.URL.createObjectURL(new Blob([i],{type:"application/pdf"}));return window.open(n,"_blank"),console.log("✅ PDF yeni sekmede açıldı"),{ok:!0,message:"📄 PDF hazırlandı"}}catch(e){const r=await(0,o.hi)(e),t=e?.status||e?.response?.status||"-";return console.error(`❌ PDF açma hatası [${t}] /export-pdf: ${r}`),{ok:!1,message:r||"PDF alınamadı"}}}}})},5599:(e,r,t)=>{t.d(r,{l:()=>s});t(939),t(6461);var a=t(705),o=t(2986);const s=(0,a.nY)("statementdetail",{state:()=>({details:[],loading:!1,error:null}),actions:{async loadDetails({accountCode:e,startDate:r,endDate:t,parislemler:a}){if(e){this.loading=!0,this.error=null;try{const s={startdate:r,enddate:t};Array.isArray(a)&&a.length>0&&(s.parislemler=a.filter(e=>void 0!==e&&null!==e&&""!==e));const i=await o.Ay.get(`/statements/${e}/details`,{params:s});this.details=i.data||[]}catch(e){console.error("❌ Details yüklenemedi:",e),this.error=e?.data?.message||e?.message||"Detaylar yüklenemedi"}finally{this.loading=!1}}else this.error="Geçerli bir cari kod seçilmedi."},getDetailsByBelge(e){return this.details.filter(r=>r.belge_ref_numarasi===e)},reset(){this.details=[],this.loading=!1,this.error=null}}})},8338:(e,r,t)=>{t.d(r,{i:()=>s});t(939),t(6461);var a=t(705),o=t(2986);const s=(0,a.nY)("downloadstHead",{actions:{async handlestHeadDownload(e,r,t,a){try{const s={accountcode:e,startdate:r,enddate:t};Array.isArray(a)&&a.length>0&&(s.parislemler=a.filter(e=>void 0!==e&&null!==e&&""!==e));const i=await(0,o.RG)("/exportstamentheaderreport-pdf",s),n=window.URL.createObjectURL(i);return window.open(n,"_blank"),{ok:!0,message:"📄 PDF hazırlandı"}}catch(e){const r=await(0,o.hi)(e),t=e?.status||e?.response?.status||"-";return console.error(`❌ PDF açma hatası [${t}] /exportstamentheaderreport-pdf: ${r}`),{ok:!1,message:r||"PDF açma hatası"}}}}})},8557:(e,r,t)=>{t.d(r,{Bm:()=>D,Cz:()=>h,Tf:()=>I});t(939),t(3872),t(6461),t(7008),t(4520),t(7049),t(6593),t(4151);var a=t(705),o=t(2986),s=t(6795),i=t(4187),n=t(5767);const d="_",l=e=>(null==e?"":String(e)).trim(),c=e=>l(e).toUpperCase();function u(e,r){const t=c(e?.model||e?.ItemCode),a=c(e?.renk||e?.ColorCode),o=c(e?.renk2||e?.ItemDim2Code),s=c(r),i=""===s?d:s;return`${t}||${a}||${o}||${i}`}const m=[{key:"ayk",title:"AYAKKABI",values:["39","40","41","42","43","44","45"]},{key:"yas",title:"YAS",values:["2","4","6","8","10","12","14"]},{key:"pan",title:"PANTOLON",values:["38","40","42","44","46","48","50","52","54","56","58","60","62","64","66","68"]},{key:"gom",title:"GOMLEK",values:["XS","S","M","L","XL","2XL","3XL","4XL","5XL","6XL","7XL"]},{key:"tak",title:"TAKIM ELBISE",values:["44","46","48","50","52","54","56","58","60","62","64","66","68","70","72","74"]},{key:"aksbir",title:"AKSESUAR",values:[" ","44","STD","110CM","115CM","120CM","125CM","130CM","135CM"]}],h=m.reduce((e,r)=>(e[r.key]=r,e),{}),y=(0,i.KR)({}),p=(0,i.KR)([]),g=(0,i.KR)({});function b(){return crypto.randomUUID()}function f(e,r,t){const a=e.clientRowKey||e.clientKey||e.id||e._id||e.tmpId||`${e.model||""}|${e.renk||""}|${e.renk2||""}`;return`${a}::${r}::${t}`}const D=(0,a.nY)("orderentry",{state:()=>({isControlledSubmit:!1,allowRouteLeaveOnce:!1,schemaMap:{},productCache:{},_lastSavedFingerprint:null,activeNewHeaderId:localStorage.getItem("bss_active_new_header")||null,loading:!1,selected:null,error:null,customers:[],selectedCustomer:null,products:[],colors:[],secondColors:[],inventory:[],selectedProduct:null,selectedColor:null,selectedColor2:null,OrderHeaderID:null,persistKey:"bss_orderentry_data",lastSnapshotKey:"bss_orderentry_snapshot",editingKey:null,currentOrderId:null,mode:"new",orders:[],header:{},summaryRows:[],lastSavedAt:null,preventPersist:!1,_uiBusy:!1,_unsavedChanges:!1}),getters:{getDraftKey(){return"bss_orderentry_new_draft"},getEditKey(){const e=this.header?.OrderHeaderID;return e?`bss_orderentry_edit:${e}`:null},hasUnsavedChanges(e){try{return e._lastSavedFingerprint!==e._persistFingerprint?.()}catch{return!1}},getPersistKey:e=>e.header?.OrderHeaderID?`${e.persistKey}:${e.header.OrderHeaderID}`:e.persistKey,getSnapshotKey:e=>e.header?.OrderHeaderID?`${e.lastSnapshotKey}:${e.header.OrderHeaderID}`:e.lastSnapshotKey,totalQty:e=>(e.orders||[]).reduce((e,r)=>e+(Number(r?.adet)||0),0),hasAnyClosedLine(e){return Array.isArray(e.summaryRows)&&e.summaryRows.some(e=>!0===e?.isClosed)},totalAmount(e){return Array.isArray(e.summaryRows)?e.summaryRows.reduce((e,r)=>e+Number(r?.tutar||0),0):0}},actions:{normalizeComboUI(e){return u(e,d)},initSchemaMap(){if(this.schemaMap&&Object.keys(this.schemaMap).length>0)return;const e={};for(const r of m)e[r.key]={key:r.key,title:r.title,values:[...r.values]};this.schemaMap=e,console.log("🧩 schemaMap INIT edildi:",Object.keys(this.schemaMap))},getRowKey(e){return e&&(e.OrderLineID||e.id)||null},updateHeaderTotals(){try{if(!Array.isArray(this.summaryRows))return 0;const e=this.summaryRows.reduce((e,r)=>e+Number(r?.tutar||0),0);return this.header&&(this.header.TotalAmount=Number(e.toFixed(2))),e}catch(e){return console.error("❌ updateHeaderTotals hata:",e),0}},async showInvalidVariantDialog(e,r=[]){if(Array.isArray(r)&&0!==r.length)return new Promise(t=>{const a=e.dialog({title:"🚨 Tanımsız Ürün Kombinasyonları",message:`\n
\n ${r.map((e,r)=>`\n \n
\n #${r+1} | Item: ${e.itemCode}\n
\n
\n Beden: ${e.dim1||"(boÅŸ)"} |\n Renk: ${e.colorCode||"-"} |\n Qty: ${e.qty1}\n
\n
\n Sebep: ${e.reason||"Tanımsız ürün kombinasyonu"}\n
\n
\n `).join("")}\n \n `,html:!0,ok:{label:"Düzelt",color:"negative"},cancel:!1,persistent:!0}).onOk(()=>t()).onDismiss(()=>t());setTimeout(()=>{if(!a)return;const e=document.querySelectorAll(".invalid-row");e.forEach(e=>{e.addEventListener("click",()=>{const r=e.getAttribute("data-clientkey");this.scrollToInvalidRow?.(r)})})},0)})},scrollToInvalidRow(e){if(!e)return;const r=this.summaryRows?.findIndex(r=>r.clientKey===e);if(-1===r)return void console.warn("❌ Satır bulunamadı:",e);const t=document.querySelector(`[data-clientkey="${e}"]`);t?(t.scrollIntoView({behavior:"smooth",block:"center"}),t.classList.add("invalid-highlight"),setTimeout(()=>{t.classList.remove("invalid-highlight")},2500)):console.warn("❌ DOM satırı bulunamadı:",e)},async checkHeaderExists(e){try{if(!e)return!1;const r=await o.Ay.get(`/orders/check/${e}`);return!0===r?.data?.exists}catch(e){return console.warn("âš  checkHeaderExists hata:",e),!1}},async fetchOrderPdf(e){try{const r=await o.Ay.get(`/order/pdf/${e}`,{responseType:"blob"});return r.data}catch(r){const t=await(0,o.hi)(r),a=r?.status||r?.response?.status||"-";throw console.error(`❌ fetchOrderPdf hata [${a}] order=${e}: ${t}`),new Error(t)}},async downloadOrderPdf(e=null){try{const r=e||this.header?.OrderHeaderID;if(!r)return void console.error("❌ PDF ID bulunamadı");const t=await o.Ay.get(`/order/pdf/${r}`,{responseType:"blob"}),a=new Blob([t.data],{type:"application/pdf"}),s=URL.createObjectURL(a);window.open(s,"_blank"),setTimeout(()=>URL.revokeObjectURL(s),6e4)}catch(r){const t=await(0,o.hi)(r),a=e||this.header?.OrderHeaderID||"-",s=r?.status||r?.response?.status||"-";throw console.error(`❌ PDF açma hatası [${s}] order=${a}: ${t}`),new Error(t)}},setActiveNewHeader(e){this.activeNewHeaderId=e||null,e?localStorage.setItem("bss_active_new_header",e):localStorage.removeItem("bss_active_new_header")},getActiveNewHeaderId(){return this.activeNewHeaderId||localStorage.getItem("bss_active_new_header")},async initFromRoute(e,r=null){if("new"===this.mode){const e=localStorage.getItem(this.getDraftKey);if(e)try{const r=JSON.parse(e);return this.header=r.header||{},this.orders=r.orders||[],this.summaryRows=r.summaryRows||this.orders,void console.log("♻️ NEW draft restore edildi (global)")}catch{}return void console.log("⚪ NEW draft yok, boÅŸ baÅŸlatılıyor")}this.schemaMap&&Object.keys(this.schemaMap).length||this.initSchemaMap();try{console.log("🧩 [initFromRoute] orderId:",e);const t=localStorage.getItem("bss_last_txn")||null,a=e=>{if(!e)return null;const r=localStorage.getItem(`bss_orderentry_data:${e}`);if(!r)return null;try{return JSON.parse(r)}catch{return null}},o=a(e),s=a(t),i=e=>!!e&&(Array.isArray(e.orders)&&e.orders.length>0||Array.isArray(e.summaryRows)&&e.summaryRows.length>0);let n=null,d=null;if(i(o)?(n=e,d=o,console.log("✅ [initFromRoute] Route ID snapshot seçildi:",n)):i(s)&&(n=t,d=s,console.log("✅ [initFromRoute] lastTxn snapshot seçildi:",n)),!n||!d)return console.log("⚪ [initFromRoute] Snapshot yok, boÅŸ baÅŸlatılıyor"),this.header={...this.header||{},OrderHeaderID:e||t||crypto.randomUUID()},this.orders=[],void(this.summaryRows=[]);this.header={...d.header||{},OrderHeaderID:n};const l=Array.isArray(d.orders)?[...d.orders]:[],c=Array.isArray(d.summaryRows)?[...d.summaryRows]:l;this.orders=l,this.summaryRows=c;try{localStorage.setItem("bss_last_txn",n)}catch(e){console.warn("⚠️ bss_last_txn yazılamadı:",e)}r&&e&&e!==n&&(console.log("🔁 [initFromRoute] Route ID düzeltiliyor →",n),await r.replace({name:"order-entry",params:{orderHeaderID:n}})),console.log("✅ [initFromRoute] Restore tamam. Satır sayısı:",this.summaryRows.length)}catch(e){console.error("❌ [initFromRoute] hata:",e)}},async startNewOrder({$q:e}){this.schemaMap&&Object.keys(this.schemaMap).length||this.initSchemaMap();const r=crypto.randomUUID();let t=`LOCAL-${(0,s["default"])().format("YYMMDD-HHmmss")}`;try{const e=await o.Ay.get("/order/new-number");e?.data?.OrderNumber&&(t=e.data.OrderNumber)}catch{console.info("ℹ️ Backend order number yok, LOCAL kullanıldı")}return this.mode="new",this.isControlledSubmit=!1,this.allowRouteLeaveOnce=!1,this.header={OrderHeaderID:r,OrderNumber:t,OrderDate:(new Date).toISOString().slice(0,10),CurrAccCode:null,DocCurrencyCode:"USD",PriceCurrencyCode:"USD",PriceExchangeRate:1},this.orders=[],this.summaryRows=[],this._lastSavedFingerprint=null,this.persistLocalStorage?.(),this.header},dedupeActiveLinesByCombo(e){const r=new Map;for(const t of e){const e=u({model:t.ItemCode,renk:t.ColorCode,renk2:t.ItemDim2Code},t.ItemDim1Code);if(!r.has(e)){t.ComboKey=e,r.set(e,t);continue}const a=r.get(e);a.Qty1=(Number(a.Qty1)||0)+(Number(t.Qty1)||0),!a.OrderLineID&&t.OrderLineID&&(a.OrderLineID=t.OrderLineID)}return Array.from(r.values())},resetCoreState(){this.orders=[],this.summaryRows=[],this.groupedRows=[],this.header={},this.editingKey=null,this.currentOrderId=null},resetForNewOrder(){this.header={OrderHeaderID:this.header?.OrderHeaderID||null,OrderDate:(new Date).toISOString().slice(0,10),CurrAccCode:null,DocCurrencyCode:"TRY",PriceCurrencyCode:"TRY"},this.orders=[],this.summaryRows=[],this.productCache={},this.stockMap={},this.setMode("new")},resetForEdit(){this.editingKey=null,this.groupedRows=[],this.mode="edit"},markAsSaved(){try{this._lastSavedFingerprint=this._persistFingerprint(),console.log("✅ markAsSaved → fingerprint senkron")}catch(e){console.warn("⚠️ markAsSaved hata:",e)}},clearLocalSnapshot(){try{const e=this.header?.OrderHeaderID;if(!e)return;localStorage.removeItem(`bss_orderentry_data:${e}`),console.log("🧹 Local snapshot temizlendi:",e)}catch(e){console.warn("⚠️ clearLocalSnapshot hata:",e)}},clearAllOrderSnapshots(){Object.keys(localStorage).filter(e=>e.startsWith("bss_orderentry_data:")||e.startsWith("bss_orderentry_edit:")).forEach(e=>{console.log("🧹 snapshot silindi:",e),localStorage.removeItem(e)}),localStorage.removeItem("bss_last_txn")},hardResetAfterSubmit(){try{const e=this.header?.OrderHeaderID||null;this.orders=[],this.summaryRows=[],this.groupedRows=[],this.header={},this.mode="new",this.editingKey=null,this.currentOrderId=null,this.activeTransactionId=null,this.submitted=!1,this._lastSavedFingerprint=null,this._lastPersistFingerprint=null,this._persistTimeout&&(clearTimeout(this._persistTimeout),this._persistTimeout=null);try{e&&(localStorage.removeItem(`bss_orderentry_data:${e}`),localStorage.removeItem(`bss_orderentry_snapshot:${e}`)),localStorage.removeItem("bss_last_txn"),localStorage.removeItem("bss_active_new_header")}catch(e){console.warn("⚠️ hardResetAfterSubmit localStorage temizliÄŸi hata:",e)}console.log("🧹 Store resetlendi (submit sonrası).")}catch(e){console.error("❌ hardResetAfterSubmit hata:",e)}},async openExistingForEdit(e,{$q:r=null,form:t=null,productCache:a=null}={}){if(this.schemaMap&&Object.keys(this.schemaMap).length||this.initSchemaMap?.(),!e)return!1;if("new"===this.mode)return console.log("⚪ openExistingForEdit skip (mode=new)"),!1;const s=a?.value?a.value:a&&"object"===typeof a?a:{};try{this.setMode?.("edit");const r=await o.Ay.get(`/order/get/${e}`),a=r?.data;if(!a?.header)throw new Error("Backend header yok");this.header={...a.header,OrderHeaderID:a.header.OrderHeaderID||e};const i=this.normalizeOrderLines(a.lines||[],this.header.DocCurrencyCode||"USD",s);this.orders=Array.isArray(i)?i:[],this.summaryRows=[...this.orders];const n=(this.summaryRows||[]).some(e=>!0===e?.isClosed);this.setMode?.(n?"view":"edit"),t&&Object.assign(t,this.header),this.persistLocalStorage?.();try{localStorage.setItem("bss_last_txn",String(e))}catch{}return console.log("✅ openExistingForEdit OK:",{id:e,rows:this.summaryRows.length,mode:this.mode,hasClosedLine:n}),!0}catch(e){return console.error("❌ openExistingForEdit hata:",e),"new"!==this.mode&&r?.notify?.({type:"negative",message:"SipariÅŸ yüklenemedi"}),!1}},async hydrateFromLocalStorage(e,r=!1){if("new"===this.mode)return this.hydrateFromLocalStorageIfExists();try{const t=`bss_orderentry_data:${e}`,a=JSON.parse(localStorage.getItem(t)||"null");if(!a)return r&&console.log("ℹ️ hydrate → snapshot yok:",e),null;this.source=a.source||"local";const o=e=>{if(!e)return null;const r=(0,s["default"])(e);return r.isValid()?r.format("YYYY-MM-DD HH:mm:ss"):null},i=e=>{if(!e)return null;const r=(0,s["default"])(e);return r.isValid()?r.format("YYYY-MM-DD"):null},n=e=>{if(!e)return null;const r=(0,s["default"])(e);return r.isValid()?r.format("HH:mm:ss"):null};this.header={...a.header||{},OrderHeaderID:a.header?.OrderHeaderID??e,OrderNumber:a.header?.OrderNumber??null};const d=this.header;d.CreatedDate=o(d.CreatedDate),d.LastUpdatedDate=o(d.LastUpdatedDate),d.CreditableConfirmedDate=o(d.CreditableConfirmedDate),d.OrderDate=i(d.OrderDate),d.OrderTime=n(d.OrderTime),this.header=d;const l=Array.isArray(a.orders)?a.orders:[];this.orders=l,this.summaryRows=Array.isArray(a.summaryRows)?a.summaryRows:l,this.groupedRows=[];const c={type:!0===a.submitted?"submitted":"draft",source:this.source,headerId:e,orderNumber:this.header?.OrderNumber??null,rows:this.summaryRows.length,submitted:!0===a.submitted||!0===a.header?.IsSubmitted};return r&&console.log("♻️ hydrate sonuc (FIXED):",c),c}catch(e){return console.warn("⚠️ hydrateFromLocalStorage hata:",e),null}},hydrateFromLocalStorageIfExists(){try{let e=null;if("new"===this.mode&&(e=localStorage.getItem(this.getDraftKey)),"edit"===this.mode){const r=this.getEditKey;r&&(e=localStorage.getItem(r))}if(!e)return!1;const r=JSON.parse(e);return this.header=r.header||{},this.orders=r.orders||[],this.summaryRows=r.summaryRows||this.orders,console.log("♻️ hydrate OK:",this.mode),!0}catch(e){return console.warn("hydrateFromLocalStorageIfExists hata:",e),!1}},mergeOrders(e,r,t=!0){if(!r&&!e)return{header:{},orders:[]};const a=(e={},r={})=>{const t={...e};for(const[e,a]of Object.entries(r||{}))void 0!==a&&null!==a&&("string"===typeof a&&""===a.trim()||(t[e]=a));return t},o=a(r?.header||{},e?.header||{});o.OrderHeaderID=r?.header?.OrderHeaderID||e?.header?.OrderHeaderID||o.OrderHeaderID||null;const i=e=>(e.OrderLineID||`${e.model||e.ItemCode}_${e.renk||e.ColorCode}_${e.renk2||e.ColorCode2}`).toString().toUpperCase(),n=new Map;for(const e of r?.lines||r?.orders||[])n.set(i(e),{...e,_src:"backend"});for(const r of e?.orders||[]){const e=i(r);if(n.has(e)){const o=a(n.get(e),r);o._src=t?"local":"backend",n.set(e,o)}else n.set(e,{...r,_src:"local-only"})}const d=Array.from(n.values());console.log(`🧩 mergeOrders → ${d.length} satır birleÅŸti (ID:${o.OrderHeaderID})`);const l=e=>{if(!e)return null;const r=(0,s["default"])(e);return r.isValid()?r.format("YYYY-MM-DD HH:mm:ss"):null},c=e=>{if(!e)return null;const r=(0,s["default"])(e);return r.isValid()?r.format("YYYY-MM-DD"):null},u=e=>{if(!e)return null;const r=(0,s["default"])(e);return r.isValid()?r.format("HH:mm:ss"):null};return o.CreatedDate=l(o.CreatedDate),o.LastUpdatedDate=l(o.LastUpdatedDate),o.CreditableConfirmedDate=l(o.CreditableConfirmedDate),o.OrderDate=c(o.OrderDate),o.OrderTime=u(o.OrderTime),{header:o,orders:d}},markRowSource(e){return"local-only"===e._src?"🟠 Offline":"local"===e._src?"🔵 Local":"⚪ Backend"},mergeAndPersistBackendOrder(e,r){const t=`bss_orderentry_data:${e}`,a=JSON.parse(localStorage.getItem(t)||"null"),o=this.mergeOrders(a,r,!0);localStorage.setItem(t,JSON.stringify({...o,source:"db",mode:"edit",updatedAt:(new Date).toISOString()})),console.log(`💾 mergeAndPersistBackendOrder → ${e} localStorage’a yazıldı`)},persistLocalStorage(){try{if(this.preventPersist||this._uiBusy)return;const e={mode:this.mode,header:(0,i.ux)(this.header||{}),orders:(0,i.ux)(this.orders||[]),summaryRows:(0,i.ux)(this.summaryRows||[]),updatedAt:(new Date).toISOString()};if("new"===this.mode)return localStorage.setItem(this.getDraftKey,JSON.stringify(e)),void this.setActiveNewHeader?.(this.header?.OrderHeaderID);if("edit"===this.mode){const r=this.getEditKey;if(!r)return;localStorage.setItem(r,JSON.stringify(e))}}catch(e){console.warn("persistLocalStorage error:",e)}},clearEditSnapshotIfExists(){if("edit"!==this.mode)return;const e=this.getEditKey;e&&(localStorage.removeItem(e),console.log("🧹 EDIT snapshot silindi:",e))},_persistFingerprint(){const e=JSON.stringify(this.orders||[]),r=this.header||{},t=JSON.stringify({OrderHeaderID:r.OrderHeaderID||"",OrderNumber:r.OrderNumber||"",CurrAccCode:r.CurrAccCode||"",DocCurrencyCode:r.DocCurrencyCode||"",ExchangeRate:r.ExchangeRate??null}),a=Array.isArray(this.summaryRows)?this.summaryRows:[],o=JSON.stringify({len:a.length,keys:a.map(e=>this.getRowKey?.(e)||e?.key||e?.id||"").filter(Boolean)}),s=JSON.stringify({lineIdMap:this.lineIdMap||null,comboLineIds:this.comboLineIds||null,comboLineIdMap:this.comboLineIdMap||null,comboLineIdSet:this.comboLineIdSet?Array.from(this.comboLineIdSet):null}),i=String(this.mode||"new");return`${i}|${t}|${o}|${s}|${e}`},_safePersistDebounced(e=1200){clearTimeout(this._persistTimeout),this._persistTimeout=setTimeout(()=>{try{if(this.preventPersist)return;if(this._uiBusy)return;const e=this._persistFingerprint();if(e===this._lastPersistFingerprint)return;this._lastPersistFingerprint=e,this.persistLocalStorage(),console.log(`🕒 Otomatik LocalStorage senkron (${this.orders?.length||0} satır).`)}catch(e){console.warn("⚠️ Debounce persist hata:",e)}},e)},async fetchMinPrice(e,r,t){try{const t=await o.Ay.get("/min-price",{params:{model:e,currency:r}}),a=t?.data||{};return console.log("💰 [store.fetchMinPrice] yanıt:",a),{price:Number(a.price||0),rateToTRY:Number(a.rateToTRY||1),priceTRY:Number(a.priceTRY||0)}}catch(e){return console.error("❌ [store.fetchMinPrice] Min fiyat alınamadı:",e),t?.notify?.({type:"warning",message:"Min. fiyat bilgisi alınamadı, kontrol atlandı ⚠️",position:"top-right"}),{price:0,rateToTRY:1,priceTRY:0}}},applyCurrencyToLines(e){e&&(this.header&&(this.header.DocCurrencyCode=e,this.header.PriceCurrencyCode=e),Array.isArray(this.orders)&&(this.orders=this.orders.map(r=>({...r,pb:e,DocCurrencyCode:e,PriceCurrencyCode:e}))),Array.isArray(this.summaryRows)&&(this.summaryRows=this.summaryRows.map(r=>({...r,pb:e,DocCurrencyCode:e,PriceCurrencyCode:e}))),this.updateHeaderTotals?.())},setHeaderFields(e,r={}){const{applyCurrencyToLines:t=!1,immediatePersist:a=!1}=r;this.header={...this.header||{},...e},t&&Array.isArray(this.summaryRows)&&(this.summaryRows=this.summaryRows.map(r=>({...r,pb:e.DocCurrencyCode??r.pb,DocCurrencyCode:e.DocCurrencyCode??r.DocCurrencyCode,PriceCurrencyCode:e.PriceCurrencyCode??e.DocCurrencyCode??r.PriceCurrencyCode}))),this.orders=[...this.summaryRows],a&&this.persistLocalStorage("header-change")},applyHeaderCurrencyToOrders(){if(!Array.isArray(this.orders))return;const e=this.header?.DocCurrencyCode??null,r=this.header?.PriceCurrencyCode??null,t=this.header?.PriceExchangeRate??null;let a=0;for(const o of this.orders)e&&(o.DocCurrencyCode=e),r&&(o.PriceCurrencyCode=r),null!=t&&(o.PriceExchangeRate=t),a++;console.log(`💱 ${a} satırda PB güncellendi → Doc:${e} Price:${r} Rate:${t}`)},saveSnapshot(e="snapshot"){try{const r=this.header?.OrderHeaderID;if(!r)return;const t=`bss_orderentry_snapshot:${r}`,a={tag:e,mode:this.mode,orders:(0,i.ux)(this.orders||[]),header:(0,i.ux)(this.header||{}),savedAt:(0,s["default"])().toISOString()};localStorage.setItem(t,JSON.stringify(a)),console.log(`📸 Snapshot kaydedildi [${t}]`)}catch(e){console.warn("⚠️ saveSnapshot hata:",e)}},loadFromStorage(e=!1){try{const r=localStorage.getItem(this.getPersistKey);if(!r)return console.info("ℹ️ LocalStorage boÅŸ, grid baÅŸlatılmadı."),!1;if(!e&&"edit"===this.mode)return console.info("⚠️ Edit modda local restore atlandı (force=false)."),!1;const t=JSON.parse(r);return this.orders=Array.isArray(t.orders)?t.orders:[],this.header=t.header||{},this.currentOrderId=t.currentOrderId||null,this.selectedCustomer=t.selectedCustomer||null,this.header.OrderHeaderID=t.header?.OrderHeaderID||null,this.mode=t.mode||"new",this.lastSavedAt=t.savedAt||null,console.log(`♻️ Storage yüklendi • txn:${this.header.OrderHeaderID} (${this.orders.length} satır)`),this.applyHeaderCurrencyToOrders(),this._safePersistDebounced(200),t}catch(e){return console.warn("⚠️ localStorage okuma hatası:",e),!1}},clearStorage(){try{localStorage.removeItem(this.getPersistKey),console.log(`🗑️ LocalStorage temizlendi [${this.getPersistKey}]`)}catch(e){console.warn("⚠️ clearStorage hatası:",e)}},clearNewDraft(){localStorage.removeItem(this.getDraftKey),localStorage.removeItem("bss_last_txn"),console.log("🧹 NEW taslak temizlendi")},isSameCombo(e,r){if(!e||!r)return!1;const t=e=>null==e?"":String(e).trim().toUpperCase(),a={model:t(e.model),renk:t(e.renk),renk2:t(e.renk2)},o={model:t(r.model),renk:t(r.renk),renk2:t(r.renk2)};if(!a.model||!o.model)return!1;const s=a.renk===o.renk||!a.renk||!o.renk,i=a.renk2===o.renk2||!a.renk2||!o.renk2;return a.model===o.model&&s&&i},async saveOrUpdateRowUnified({form:e,recalcVat:r=null,resetEditor:t=null,stockMap:a=null,loadProductSizes:o=null,$q:i=null}){try{console.log("🔥 saveOrUpdateRowUnified v6.6",{model:e?.model,mode:this.mode,editingKey:this.editingKey});const n="function"===typeof this.getRowKey?this.getRowKey:e=>e?.clientKey||e?.id||e?.OrderLineID,d=Array.isArray(this.summaryRows)?[...this.summaryRows]:[];if(!e?.model)return i?.notify?.({type:"warning",message:"Model seçiniz"}),!1;e.pb||(e.pb=this.header?.DocCurrencyCode||"USD");try{"function"===typeof this.loadProductSizes&&await this.loadProductSizes(e,!0,i)}catch(e){console.warn("âš  this.loadProductSizes hata:",e)}try{"function"===typeof o&&await o(!0)}catch(e){console.warn("âš  loadProductSizes hata:",e)}const l=a?.value||a||{},c=e.bedenLabels||[],u=e.bedenler||[],m=[];for(let e=0;e0&&a>t&&m.push({beden:r,stok:t,girilen:a})}if(m.length&&i){const e=m.map(e=>`• ${e.beden}: ${e.girilen} (Stok: ${e.stok})`).join("
"),r=await new Promise(r=>{i.dialog({title:"Stok Uyarısı",message:`Bazı bedenlerde stoktan fazla giriş yaptınız:

${e}`,html:!0,ok:{label:"Devam",color:"primary"},cancel:{label:"İptal",color:"negative"}}).onOk(()=>r(!0)).onCancel(()=>r(!1)).onDismiss(()=>r(!1))});if(!r)return!1}let h=!0;try{let r=0;if("function"===typeof this.fetchMinPrice){const t=await this.fetchMinPrice(e.model,e.pb,i);r=Number(t?.price||0)}else Number(e.minFiyat||0)>0&&(r=Number(e.minFiyat));const t=Number(e.fiyat||0);r>0&&t>0&&t{i.dialog({title:"Fiyat Uyarısı",message:`Min. Fiyat: ${r} ${e.pb}
Girdiğiniz: ${t} ${e.pb}`,html:!0,ok:{label:"Devam",color:"primary"},cancel:{label:"İptal",color:"negative"}}).onOk(()=>a(!0)).onCancel(()=>a(!1)).onDismiss(()=>a(!1))}))}catch(e){console.warn("⚠ Min fiyat hata:",e)}if(!h)return!1;const y=(e.bedenler||[]).reduce((e,r)=>e+Number(r||0),0);e.adet=y,e.tutar=Number((y*Number(e.fiyat||0)).toFixed(2));const p=C(e);if(this.editingKey){const e=d.findIndex(e=>n(e)===this.editingKey);if(-1===e)return this.editingKey=null,t?.(!0),!1;const a=d[e];if(this.isRowLocked?.(a))return i?.notify?.({type:"warning",message:"Satır kapalı"}),this.editingKey=null,t?.(!0),!1;const o=this.isSameCombo(a,p),s=a?.lineIdMap&&"object"===typeof a.lineIdMap?{...a.lineIdMap}:p?.lineIdMap&&"object"===typeof p.lineIdMap?{...p.lineIdMap}:{};if(o)return d[e]={...a,...p,id:a.id,OrderLineID:a.OrderLineID||null,lineIdMap:s},this.summaryRows=d,this.orders=d,this.updateHeaderTotals?.(),this.persistLocalStorage?.(),this.editingKey=null,t?.(!0),r?.(),i?.notify?.({type:"positive",message:"Satır güncellendi"}),!0;const l=a?.grpKey||Object.keys(a?.bedenMap||{})[0]||"tak",c={},u=a?.bedenMap?.[l]&&"object"===typeof a.bedenMap[l]?a.bedenMap[l]:s&&"object"===typeof s?s:null;if(u)for(const e of Object.keys(u))c[e]=0;else c["STD"]=0;const m={...a,id:`DEL::${a.id||a.OrderLineID||crypto.randomUUID()}`,_deleteSignal:!0,adet:0,Qty1:0,tutar:0,ComboKey:"",OrderLineID:a.OrderLineID||null,grpKey:l,bedenMap:{[l]:c},lineIdMap:s,comboLineIds:{...a.comboLineIds||{}}},h={...p,id:crypto.randomUUID(),OrderLineID:null,lineIdMap:{}};return d.splice(e,1,h),this.summaryRows=d,this.orders=[...d,m],this.updateHeaderTotals?.(),this.persistLocalStorage?.(),this.editingKey=null,t?.(!0),r?.(),i?.notify?.({type:"positive",message:"Kombinasyon değişti"}),!0}const g=d.findIndex(e=>!e?._deleteSignal&&this.isSameCombo(e,p)),b=e=>{const r=e?.grpKey||Object.keys(e?.bedenMap||{})[0]||"GENEL",t=e?.bedenMap?.[r],a=e?.bedenMap&&"object"===typeof e.bedenMap&&!t?e.bedenMap:null;return{grpKey:r,map:t||a||{}}};if(-1!==g){const e=d[g];if(!0!==e?._deleteSignal){const{grpKey:a,map:o}=b(e),{grpKey:n,map:l}=b(p),c=p?.grpKey||a||n||"GENEL",u={...o||{}};for(const[e,r]of Object.entries(l||{})){const t=null==e||""===String(e).trim()?" ":normalizeBeden(String(e));u[t]=Number(u[t]||0)+Number(r||0)}const m=Object.values(u).reduce((e,r)=>e+Number(r||0),0),h=Number(p?.fiyat??e?.fiyat??0),y=Number((m*h).toFixed(2));return d[g]={...e,...p,id:e.id,OrderLineID:e.OrderLineID||null,lineIdMap:{...e.lineIdMap||{}},grpKey:c,bedenMap:{[c]:u},adet:m,tutar:y,updatedAt:(0,s["default"])().toISOString()},this.summaryRows=d,this.orders=d,this.updateHeaderTotals?.(),this.persistLocalStorage?.(),t?.(!0),r?.(),i?.notify?.({type:"positive",message:"Aynı kombinasyon bulundu, bedenler birleştirildi"}),!0}}return d.push({...p,id:p.id||crypto.randomUUID(),OrderLineID:null,lineIdMap:{...p.lineIdMap||{}}}),this.summaryRows=d,this.orders=d,this.updateHeaderTotals?.(),this.persistLocalStorage?.(),t?.(!0),r?.(),i?.notify?.({type:"positive",message:"Yeni satır eklendi"}),!0}catch(e){return console.error("❌ saveOrUpdateRowUnified:",e),i?.notify?.({type:"negative",message:"Satır kaydı başarısız"}),!1}},setTransaction(e,r=!0){if(e&&(this.header.OrderHeaderID=e,localStorage.setItem("bss_last_txn",e),console.log("🔄 Transaction değiştirildi:",e),r)){const r=Array.isArray(this.orders)&&this.orders.length>0;if(r)console.log("🚫 Grid dolu, auto-resume atlandı (mevcut satırlar korundu).");else{const r=this.hydrateFromLocalStorage(e,!0);r&&console.info("📦 Local kayıt geri yüklendi (boş grid için).")}}},clearTransaction(){try{const e=this.header?.OrderHeaderID;e&&localStorage.removeItem(`bss_orderentry_data:${e}`),this.orders=[],this.summaryRows=[],this.groupedRows=[],this.header={},this.mode="new",localStorage.removeItem("bss_last_txn"),console.log("🧹 Transaction temizlendi")}catch(e){console.warn("⚠️ clearTransaction hata:",e)}},isRowLocked(e){return!!e&&("edit"===this.mode&&!!e.OrderLineID&&!0===e.isClosed)},findExistingIndexByForm(e){return this.orders.findIndex(r=>this.isSameCombo(r,e))},addRow(e){if(!e)return;const r=this.orders.findIndex(r=>{const t=r.id&&e.id&&r.id===e.id,a=this.isSameCombo(r,e);return t||a});if(-1!==r){const t=this.orders[r];this.orders[r]={...t,adet:Number(e.adet??t.adet??0),fiyat:Number(e.fiyat??t.fiyat??0),tutar:Number(e.fiyat??t.fiyat??0)*Number(e.adet??t.adet??0),ItemDim1Code:e.ItemDim1Code||t.ItemDim1Code,aciklama:e.aciklama||t.aciklama,updatedAt:(0,s["default"])().toISOString()},console.log(`⚠️ Aynı kombinasyon bulundu, satır güncellendi: ${e.model} ${e.renk||""} ${e.renk2||""}`)}else this.orders.push((0,i.ux)(e)),console.log(`➕ Yeni kombinasyon eklendi: ${e.model} ${e.renk||""} ${e.renk2||""}`);this.persistLocalStorage(),this.saveSnapshot("after-add")},updateRow(e,r){e<0||e>=this.orders.length||(this.orders[e]={...this.orders[e],...(0,i.ux)(r),updatedAt:(0,s["default"])().toISOString()},this.persistLocalStorage(),this.saveSnapshot("after-update"),console.log(`✏️ Satır güncellendi (store): #${e}`))},removeRow(e){if(e<0||e>=this.orders.length)return;const r=this.orders.splice(e,1);Array.isArray(this.summaryRows)&&this.summaryRows.splice(e,1),this.persistLocalStorage(),this.saveSnapshot("after-remove"),console.log(`🗑️ Satır silindi: ${r[0]?.model||"(model yok)"}`)},removeSelectedRow(e,r=null){if(e)return this.isRowLocked(e)?(r?.notify?.({type:"warning",message:"🔒 Bu satır (IsClosed=1) kapatılmış. Silinemez."}),!1):new Promise(t=>{r?.dialog({title:"Satır Sil",message:`${e.model} / ${e.renk} / ${e.renk2} kombinasyonu silinsin mi?`,ok:{label:"Evet",color:"negative"},cancel:{label:"Vazgeç"}}).onOk(()=>{this.removeRowInternal(e),t(!0)}).onCancel(()=>t(!1))})},removeRowInternal(e){if(!e)return!1;if(this.isRowLocked(e))return console.warn("🔒 Kilitli satır silinemez."),!1;const r="function"===typeof this.getRowKey?this.getRowKey:e=>e?.clientKey||e?.id||e?.OrderLineID,t=r(e);if(!t)return!1;const a=this.summaryRows.findIndex(e=>r(e)===t);if(-1===a)return!1;console.log("🗑️ X2 removeRowInternal →",e),this._uiBusy=!0,this.preventPersist=!0;try{if(this.summaryRows.splice(a,1),this.orders=[...this.summaryRows],"edit"===this.mode){const r=e.grpKey||Object.keys(e.bedenMap||{})[0]||"tak",t=e.lineIdMap&&"object"===typeof e.lineIdMap?{...e.lineIdMap}:{},a={};if(e.bedenMap&&e.bedenMap[r])for(const t of Object.keys(e.bedenMap[r]||{}))a[t]=0;else if(Object.keys(t).length)for(const e of Object.keys(t))a[e]=0;else a["STD"]=0;const o={...e,id:`DEL::${e.id||e.OrderLineID||crypto.randomUUID()}`,adet:0,Qty1:0,tutar:0,ComboKey:"",OrderLineID:e.OrderLineID||null,grpKey:r,bedenMap:{[r]:a},lineIdMap:t,comboLineIds:{...e.comboLineIds||{}},_deleteSignal:!0};console.log("📡 DELETE sinyali üretildi:",o),this.orders.push(o)}this.updateHeaderTotals?.()}finally{this.preventPersist=!1,this._uiBusy=!1}return this.persistLocalStorage(),!0},normalizeOrderLines(e,r="USD"){if(!Array.isArray(e))return[];const t=Object.create(null);for(const a of e){if(!a)continue;const e=!0===a.IsClosed||!0===a.isClosed||!0===a.IsClosed?.Bool;if(a.bedenMap&&Object.keys(a.bedenMap).length){const o=(a.model||a.ItemCode||"").trim(),s=(a.renk||a.ColorCode||"").trim(),i=(a.renk2||a.ItemDim2Code||"").trim(),n=`${o}||${s}||${i}`,d=a.grpKey||"tak",l=a.bedenMap[d]||{},c=Object.values(l).reduce((e,r)=>e+(Number(r)||0),0),u=Number(a.fiyat||0),m=a.pb||a.DocCurrencyCode||r,h=Number(a.tutar??c*u);t[n]??=[],t[n].push({...a,grpKey:d,bedenMap:{[d]:{...l}},adet:c,fiyat:u,pb:m,tutar:h,isClosed:e});continue}const o=(a.Model||a.ItemCode||"").trim(),s=(a.ColorCode||"").trim(),i=(a.ItemDim2Code||"").trim(),n=`${o}||${s}||${i}`;t[n]??=[];const d=null==a.ItemDim1Code?"":String(a.ItemDim1Code).trim(),l=""===d?" ":normalizeBeden(d),c=Number(a.Qty1||a.Qty||0);let u=t[n][0];u||(u={id:a.OrderLineID||crypto.randomUUID(),model:o,renk:s,renk2:i,urunAnaGrubu:a.UrunAnaGrubu||"GENEL",urunAltGrubu:a.UrunAltGrubu||"",kategori:a.Kategori||"",aciklama:a.LineDescription||"",fiyat:Number(a.Price||0),pb:a.DocCurrencyCode||r,__tmpMap:{},lineIdMap:{},adet:0,tutar:0,terminTarihi:a.DeliveryDate||null,isClosed:e},t[n].push(u));const m=a.OrderLineID||a.OrderLineId||a.orderLineID||null;m&&(u.lineIdMap[l]=String(m)),c>0&&(u.__tmpMap[l]=(u.__tmpMap[l]||0)+c,u.adet+=c,u.tutar+=c*u.fiyat)}const a=[];for(const e of Object.values(t))for(const r of e){if(!r.__tmpMap){a.push(r);continue}const e=Object.keys(r.__tmpMap),t=I(e,r.urunAnaGrubu,r.kategori),o={...r.__tmpMap},s=Object.keys(o).some(e=>""!==String(e).trim());"aksbir"!==t&&s&&(delete o[" "],delete o[""],r.lineIdMap&&"object"===typeof r.lineIdMap&&(delete r.lineIdMap[" "],delete r.lineIdMap[""])),r.grpKey=t,r.bedenMap={[t]:{...o}},r.adet=Object.values(o).reduce((e,r)=>e+(Number(r)||0),0),r.tutar=Number((r.adet*Number(r.fiyat||0)).toFixed(2)),"aksbir"===t&&(r.bedenMap[t]??={},r.bedenMap[t][" "]=Number(r.adet||0)),delete r.__tmpMap,a.push(r)}return console.log(`📦 normalizeOrderLines (v9 + lineIdMap) → ${a.length} satır`),a},async loadProductSizes(e,r=!1,t=null){if(!e?.model)return;const a=this,s=!!a._uiBusy,i=!!a.preventPersist;a._uiBusy=!0,a.preventPersist=!0;try{const t=e.grpKey;if(!t)return void console.warn("⛔ loadProductSizes iptal → grpKey yok");const a=e.renk||"nocolor",s=e.renk2||"no2color",i=`${e.model}_${a}_${s}_${t}`;if(!r&&g.value?.[i]){const e=g.value[i];return p.value=[...e.stockArray],y.value={...e.stockMap},void console.log(`♻️ loadProductSizes CACHE → ${t}`)}const n={code:e.model};e.renk&&(n.color=e.renk),e.renk2&&(n.color2=e.renk2);const d=await o.Ay.get("/product-colorsize",{params:n}),l=Array.isArray(d?.data)?d.data:[];if(!l.length)return p.value=[],void(y.value={});const c={};for(const e of l){const r=null===e.item_dim1_code||""===e.item_dim1_code?" ":String(e.item_dim1_code);c[r]=Number(e.kullanilabilir_envanter??0)}const u={};for(const r of e.bedenLabels)u[r]=c[r]??0;y.value={...u},p.value=Object.entries(y.value).map(([e,r])=>({beden:e,stok:r})),g.value[i]={labels:[...e.bedenLabels],stockArray:[...p.value],stockMap:{...y.value}},console.log(`✅ loadProductSizes FINAL v4.2 → ${t}`)}catch(e){console.error("❌ loadProductSizes hata:",e),t?.notify?.({type:"negative",message:"Beden / stok alınamadı"})}finally{a._uiBusy=s,a.preventPersist=i,console.log("🧩 Editor beden hydrate",{grpKey:e.grpKey,labels:e.bedenLabels,values:e.bedenler})}},updateTotals(e){e.adet=(e.bedenler||[]).reduce((e,r)=>e+Number(r||0),0);const r=Number(e.fiyat)||0;if(e.tutar=Number((e.adet*r).toFixed(2)),this.header){const e=(this.summaryRows||[]).reduce((e,r)=>e+Number(r?.tutar||0),0);this.header.TotalAmount=Number(e.toFixed(2))}return e},activeGroupKeyForRow(e){const r=(e?.urunAnaGrubu||"").toUpperCase();return r.includes("TAKIM")?"tak":r.includes("PANTOLON")?"pan":r.includes("GOMLEK")?"gom":r.includes("AYAKKABI")?"ayk":r.includes("YAS")?"yas":"tak"},setMode(e){["new","edit","view"].includes(e)?(this.mode=e,console.log(`🧭 Order mode set edildi → ${e}`)):console.warn("⚠️ Geçersiz mode:",e)},async submitAllReal(e,r,t,a,s){let i=null,n=null;try{this.loading=!0,this.isControlledSubmit=!0;const d="new"===this.mode,{header:l,lines:c}=this.buildFinalOrderJson();console.groupCollapsed(`%c📤 ORDER PAYLOAD (${this.mode})`,"color:#c9a873;font-weight:bold"),console.log("HEADER:",JSON.parse(JSON.stringify(l))),c.forEach((e,r)=>{console.log(`LINE[${r}]`,{OrderLineID:e.OrderLineID,ClientKey:e.ClientKey,ItemCode:e.ItemCode,ColorCode:e.ColorCode,ItemDim1Code:e.ItemDim1Code,ItemDim2Code:e.ItemDim2Code,ItemDim3Code:e.ItemDim3Code,Qty1:e.Qty1,ComboKey:e.ComboKey})}),console.groupEnd(),this.debugOrderPayload?.(l,c,"PRE-VALIDATE");const u=e=>Number((Number(e)||0).toFixed(2)),m=e=>Number((Number(e)||0).toFixed(4));for(const e of c){const r=Number(e?.Qty1||0),t=Number(e?.Price||0),a=Number(e?.VatRate||0),o=Number(e?.PriceExchangeRate||l?.ExchangeRate||1)||1,s=u(t*r),i=u(s*a/100),n=u(s+i),d=m(r>0?n/r:t*(1+a/100)),c=String(e?.DocCurrencyCode||l?.DocCurrencyCode||"TRY").trim()||"TRY";e.RelationCurrencyCode=c,e.DocPrice=d,e.DocAmount=n,e.LocalPrice=t,e.LocalAmount=s,e.LineDiscount=Number(e?.LineDiscount||0),e.TotalDiscount=Number(e?.TotalDiscount||0),e.TaxBase=s,e.Pct=Number(e?.Pct||0),e.VatAmount=i,e.VatDeducation=0,e.NetAmount=n,e.CurrencyCode=c,e.ExchangeRate=o,e.PriceVI=d,e.AmountVI=n,e.Amount=s,e.LDiscount1=Number(e?.LDiscount1||0),e.TDiscount1=Number(e?.TDiscount1||0),e.Vat=i}const h=await o.Ay.post("/order/validate",{header:l,lines:c}),y=h?.data?.invalid||[];if(y.length>0)return void await(this.showInvalidVariantDialog?.(e,y));console.log("📤 submitAllReal payload",{mode:this.mode,lines:c.length,deletes:c.filter(e=>e._deleteSignal).length});const p=await o.Ay.post(d?"/order/create":"/order/update",{header:l,lines:c}),g=p?.data||{};if(i=g.orderID||g.orderHeaderID||g.id||l?.OrderHeaderID,n=g.orderNumber||g.orderNo||l?.OrderNumber,!i)throw new Error("OrderHeaderID backend’den dönmedi");this.setMode("edit"),this.header={...this.header,OrderHeaderID:i,OrderNumber:n},this.updateHeaderTotals?.(),this.markAsSaved?.(),this.clearAllOrderSnapshots(),e.notify({type:"positive",message:`Sipariş kaydedildi: ${n||""}`.trim()}),this.allowRouteLeaveOnce=!0,await r.replace({name:"order-entry",params:{orderHeaderID:i},query:{mode:"edit",source:"backend"}}),await this.openExistingForEdit(i,{$q:e,form:t,summaryRowsRef:a,productCache:s});const b=await new Promise(r=>{e.dialog({title:"Sipariş Kaydedildi",options:{type:"radio",model:"continue",items:[{label:"✏️ Düzenlemeye Devam",value:"continue"},{label:"🖨 Yazdır",value:"print"},{label:"📋 Listeye Dön",value:"list"}]},ok:{label:"Seç"},cancel:{label:"Kapat"}}).onOk(e=>r(e)).onCancel(()=>r("continue"))});if("print"===b){const r=this.header?.OrderHeaderID||i;if(r)try{await this.downloadOrderPdf(r)}catch(r){console.error("⚠️ PDF açılamadı, kayıt başarılı:",r),e.notify({type:"warning",message:r?.message||"Sipariş kaydedildi fakat PDF açılamadı."})}return}if("list"===b)return this.allowRouteLeaveOnce=!0,void await r.push({name:"order-list"})}catch(r){console.error("❌ submitAllReal:",r),e.notify({type:"negative",message:r?.response?.data?.detail||r?.response?.data?.message||r?.message||"Kayıt sırasında hata"})}finally{this.isControlledSubmit=!1,this.loading=!1}},async submitAllTest(e=null){try{const{header:r,lines:t}=this.buildFinalOrderJson();console.log("🧾 TEST HEADER",Object.keys(r).length,"alan"),console.log(JSON.stringify(r,null,2)),console.log("🧾 TEST LINES",t.length,"satır"),console.log(JSON.stringify(t,null,2)),e?.notify?.({type:"info",message:`Header (${Object.keys(r).length}) + Lines (${t.length}) gösterildi`,position:"top"})}catch(r){console.error("❌ submitAllTest hata:",r),e?.notify?.({type:"negative",message:"Gösterimde hata oluştu ❌",position:"top"})}},afterSubmit(e={keepLocalStorage:!0,backendPayload:null,resetMode:!0}){try{console.log("🧹 afterSubmit başlatıldı",e),e?.backendPayload?.header?.OrderHeaderID&&this.mergeAndPersistBackendOrder(e.backendPayload.header.OrderHeaderID,e.backendPayload),e?.keepLocalStorage?this.saveSnapshot():(this.clearStorage(),this.clearTransaction()),this.orders=[],this.header={},this.editingKey=null,this.currentOrderId=null,!0===e.resetMode&&(this.mode="new"),console.log("✅ afterSubmit tamamlandı.")}catch(e){console.error("❌ afterSubmit hata:",e)}},buildFinalOrderJson(){const e=(0,n.n)(),r=e?.user||{},t=(0,s["default"])(),a=e=>Number(e)||0,o=e=>null==e?"":String(e).trim(),i=e=>e?(0,s["default"])(e).format("YYYY-MM-DD"):null,d=e=>(0,s["default"])(e).format("HH:mm:ss"),l=e=>e?(0,s["default"])(e).format("YYYY-MM-DD HH:mm:ss"):null,c=e=>{const r=o(e);return""===r||"_"===r||"-"===r?"":r},m=o(r?.v3usergroup),h=o(r?.v3_username),y=m&&h?`${m} ${h}`:h||"BSS",p="%0",g="%0",b=this.header?.OrderHeaderID||crypto.randomUUID(),D=o(this.header?.DocCurrencyCode)||"TRY",I=a(this.header?.ExchangeRate)||1,C=this.header?.AverageDueDate||(0,s["default"])(this.header?.OrderDate||t).add(14,"day"),S={...this.header,OrderHeaderID:b,OrderDate:i(this.header?.OrderDate||t),OrderTime:d(t),AverageDueDate:i(C),DocCurrencyCode:D,LocalCurrencyCode:o(this.header?.LocalCurrencyCode)||"TRY",ExchangeRate:I,CreatedUserName:"edit"===this.mode&&this.header?.CreatedUserName||y,CreatedDate:"edit"===this.mode?l(this.header?.CreatedDate||t):l(t),LastUpdatedUserName:y,LastUpdatedDate:l(t)},O=[],w=new Map,k=(e,r)=>{const{grpKey:s,bedenKey:n,bedenPayload:d,qty:c,orderLineId:m,isDeleteSignal:h}=r;if(c<=0&&!h)return;const D=u(e,n),I=()=>({OrderLineID:m||"",ClientKey:f(e,s,n),ComboKey:D,SortOrder:0,ItemTypeCode:1,ItemCode:o(e.model),ColorCode:o(e.renk),ItemDim1Code:d,ItemDim2Code:o(e.renk2),ItemDim3Code:"",Qty1:h?0:c,Qty2:0,CancelQty1:0,CancelQty2:0,DeliveryDate:e.terminTarihi?l(e.terminTarihi):null,PlannedDateOfLading:e.terminTarihi?i(e.terminTarihi):null,LineDescription:o(e.aciklama),UsedBarcode:"",CostCenterCode:"",VatCode:g,VatRate:a(e.vatRate??e.VatRate??0),PCTCode:p,PCTRate:0,LDisRate1:0,LDisRate2:0,LDisRate3:0,LDisRate4:0,LDisRate5:0,DocCurrencyCode:S.DocCurrencyCode,PriceCurrencyCode:S.DocCurrencyCode,PriceExchangeRate:a(S.ExchangeRate),Price:a(e.fiyat),BaseProcessCode:"WS",BaseOrderNumber:S.OrderNumber,BaseCustomerTypeCode:0,BaseCustomerCode:S.CurrAccCode,BaseSubCurrAccID:null,BaseStoreCode:"",OrderHeaderID:b,CreatedUserName:y,CreatedDate:l(e.CreatedDate||t),LastUpdatedUserName:y,LastUpdatedDate:l(t),SurplusOrderQtyToleranceRate:0,WithHoldingTaxTypeCode:"",DOVCode:""}),C=w.get(D);if(!C){const e=I();return w.set(D,e),void O.push(e)}if(h)return m&&!C.OrderLineID&&(C.OrderLineID=m),void(C.Qty1=0);C.Qty1+=c,"edit"===this.mode&&m&&!C.OrderLineID&&(C.OrderLineID=m),C.Price=a(e.fiyat)};for(const e of this.orders||[]){if(!0===e?.isClosed)continue;const r=e.grpKey||Object.keys(e.bedenMap||{})[0]||"GENEL",t=e.lineIdMap||{},s=e.bedenMap?.[r],i=e.bedenMap&&"object"===typeof e.bedenMap&&!s?e.bedenMap:null,n=s||i,d=n&&"object"===typeof n&&Object.keys(n).length>0;if(!d){const s="aksbir"===r||!0===e._deleteSignal;if(!s)continue;const i=a(e.qty??e.Qty1??e.miktar??0),n="_",d="";let l="";"edit"===this.mode&&(l=o(t?.[n])||o(t?.[d])||o(t?.[" "])||o(e.OrderLineID)),k(e,{grpKey:r,bedenKey:n,bedenPayload:d,qty:i,orderLineId:l,isDeleteSignal:!0===e._deleteSignal&&!!l});continue}for(const[s,i]of Object.entries(n)){const d=""===o(s);if(d&&"aksbir"!==r&&!0!==e._deleteSignal)continue;const l=a(i),u=c(s),m=u||"_";let h="";"edit"===this.mode&&(h=o(t?.[m])||o(t?.[u])||o(t?.[" "])||(1===Object.keys(n).length?o(e.OrderLineID):"")),k(e,{grpKey:r,bedenKey:m,bedenPayload:u,qty:l,orderLineId:h,isDeleteSignal:!0===e._deleteSignal&&!!h})}}if(O.forEach((e,r)=>{e.SortOrder=r+1}),O.some(e=>"_"===(e.ItemDim1Code||"")))throw console.error('❌ Payload’da "_" yakalandı',O.filter(e=>"_"===e.ItemDim1Code)),new Error('Payload ItemDim1Code "_" olamaz');return console.groupCollapsed("%c📦 BUILD FINAL ORDER JSON","color:#c9a873;font-weight:bold"),console.log("🧾 HEADER:",S),console.table(O.map((e,r)=>({i:r+1,OrderLineID:e.OrderLineID,ClientKey:e.ClientKey,ComboKey:e.ComboKey,ItemCode:e.ItemCode,ColorCode:e.ColorCode,ItemDim1Code:JSON.stringify(e.ItemDim1Code),ItemDim2Code:e.ItemDim2Code,Qty1:e.Qty1,Price:e.Price}))),console.groupEnd(),{header:S,lines:O}},setRowErrorByClientKey(e,r){if(!e)return;if(!Array.isArray(this.summaryRows))return;const t=this.summaryRows.find(r=>r?.clientKey===e);t&&(t._error={code:r?.code,message:r?.message})},clearRowErrorByClientKey(e){if(!e)return;if(!Array.isArray(this.summaryRows))return;const r=this.summaryRows.find(r=>r?.clientKey===e);r&&r._error&&delete r._error},applyTerminToRowsIfEmpty(e){if(e&&Array.isArray(this.summaryRows)){for(const r of this.summaryRows)r?.terminTarihi&&""!==r.terminTarihi||(r.terminTarihi=e);this.persistLocalStorage?.()}}}});function I(e,r="",t=""){const a=Array.isArray(e)&&e.length>0?e.map(e=>(e||"").toString().trim().toUpperCase()):[" "],o=(r||"").toUpperCase().trim().replace(/\(.*?\)/g,"").replace(/[^A-ZÇĞİÖŞÜ0-9\s]/g,"").replace(/\s+/g," "),s=(t||"").toUpperCase().trim(),i=["AKSESUAR","KRAVAT","PAPYON","KEMER","CORAP","ÇORAP","FULAR","MENDIL","MENDİL","KASKOL","ASKI","YAKA","KOL DUGMESI","KOL DÜĞMESİ"],n=["GÖMLEK","CEKET","PANTOLON","MONT","YELEK","TAKIM","TSHIRT","TİŞÖRT"];if(i.some(e=>o.includes(e)||s.includes(e))&&!n.some(e=>o.includes(e)))return"aksbir";if(o.includes("PANTOLON")&&s.includes("YETİŞKİN"))return"pan";const d=a.every(e=>/^\d+$/.test(e));if(d){const e=a.map(e=>parseInt(e,10)).filter(Boolean),r=e.slice(1).map((r,t)=>r-e[t]);if(r.every(e=>1===e)&&e[0]>=35&&e[0]<=46)return"ayk"}if(s.includes("GARSON")||s.includes("ÇOCUK"))return"yas";const l=["XS","S","M","L","XL","XXL","2XL","3XL","4XL","5XL","6XL","7XL"];return a.some(e=>l.includes(e))?"gom":"tak"}function C(e){if(!e)return null;const r=e.grpKey||"tak",t={},a=Array.isArray(e.bedenLabels)?e.bedenLabels:[],o=Array.isArray(e.bedenler)?e.bedenler:[];for(let e=0;e0&&(t[s]=i)}return{id:e.id||b(),OrderLineID:e.OrderLineID||null,model:e.model||"",renk:e.renk||"",renk2:e.renk2||"",urunAnaGrubu:e.urunAnaGrubu||"",urunAltGrubu:e.urunAltGrubu||"",aciklama:e.aciklama||"",fiyat:Number(e.fiyat||0),pb:e.pb||"USD",adet:Number(e.adet||0),tutar:Number(e.tutar||0),grpKey:r,bedenMap:{[r]:{...t}},terminTarihi:(e.terminTarihi||"").substring(0,10)}}}}]); \ No newline at end of file diff --git a/ui/dist/spa/js/chunk-common.451c93b1.js.gz b/ui/dist/spa/js/chunk-common.451c93b1.js.gz deleted file mode 100644 index 0c1ea5806ab6bb8ee512ec97dce071e5c9bdb68b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15315 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 diff --git a/ui/src/stores/orderentryStore.js b/ui/src/stores/orderentryStore.js index c036056..392d601 100644 --- a/ui/src/stores/orderentryStore.js +++ b/ui/src/stores/orderentryStore.js @@ -48,7 +48,7 @@ export const BEDEN_SCHEMA = [ { key: 'pan', title: 'PANTOLON', values: ['38','40','42','44','46','48','50','52','54','56','58','60','62','64','66','68'] }, { key: 'gom', title: 'GOMLEK', values: ['XS','S','M','L','XL','2XL','3XL','4XL','5XL','6XL','7XL'] }, { key: 'tak', title: 'TAKIM ELBISE', values: ['44','46','48','50','52','54','56','58','60','62','64','66','68','70','72','74'] }, - { key: 'aksbir', title: 'AKSESUAR', values: [' ', '44', 'STD', '110CM', '115CM', '120CM', '125CM', '130CM', '135CM'] } + { key: 'aksbir', title: 'AKSESUAR', values: [' ', '44', 'STD', '110', '115', '120', '125', '130', '135'] } ] export const schemaByKey = BEDEN_SCHEMA.reduce((m, g) => { @@ -1826,7 +1826,7 @@ export const useOrderEntryStore = defineStore('orderentry', { for (const [k, v] of Object.entries(newMap || {})) { const beden = (k == null || String(k).trim() === '') ? ' ' - : normalizeBeden(String(k)) + : normalizeBedenLabel(String(k)) merged[beden] = Number(merged[beden] || 0) + Number(v || 0) } @@ -2244,7 +2244,7 @@ export const useOrderEntryStore = defineStore('orderentry', { raw.ItemDim1Code == null ? '' : String(raw.ItemDim1Code).trim() - const beden = bedenRaw === '' ? ' ' : normalizeBeden(bedenRaw) + const beden = bedenRaw === '' ? ' ' : normalizeBedenLabel(bedenRaw) const qty = Number(raw.Qty1 || raw.Qty || 0) @@ -3276,85 +3276,128 @@ export const useOrderEntryStore = defineStore('orderentry', { /* =========================================================== - 🔹 BEDEN LABEL NORMALİZASYONU (exported helper) + Size Label Normalization (frontend helper) =========================================================== */ +function safeTrimUpperJs(v) { + return (v == null ? '' : String(v)).trim().toUpperCase() +} + +function normalizeTextForMatch(v) { + return safeTrimUpperJs(v) + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') +} + +function parseNumericSizeJs(v) { + const s = safeTrimUpperJs(v) + if (s === '' || !/^\d+$/.test(s)) return null + const n = Number.parseInt(s, 10) + return Number.isNaN(n) ? null : n +} + export function normalizeBedenLabel(v) { - if (v === null || v === undefined) return ' ' - let s = String(v).trim() + let s = (v == null ? '' : String(v)).trim() if (s === '') return ' ' - // 44R, 50L vb. son ekleri at - s = s.replace(/(^\d+)\s*[A-Z]?$/i, '$1') + s = s.toUpperCase() - // harfli bedenlerin normalizasyonu - const map = { - 'XS': 'XS', 'S': 'S', 'M': 'M', 'L': 'L', 'XL': 'XL', - 'XXL': '2XL', '2XL': '2XL', '3XL': '3XL', '4XL': '4XL', - '5XL': '5XL', '6XL': '6XL', '7XL': '7XL', 'STD': 'STD' + // Backend parity: normalize common "standard size" aliases. + switch (s) { + case 'STD': + case 'STANDART': + case 'STANDARD': + case 'ONE SIZE': + case 'ONESIZE': + return 'STD' } - if (map[s]) return map[s] - // tamamen sayıysa string olarak döndür - if (/^\d+$/.test(s)) return s + // Backend parity: only values ending with CM are converted to numeric part. + if (s.endsWith('CM')) { + const num = s.slice(0, -2).trim() + if (num !== '') return num + } + + switch (s) { + case 'XS': + case 'S': + case 'M': + case 'L': + case 'XL': + case '2XL': + case '3XL': + case '4XL': + case '5XL': + case '6XL': + case '7XL': + return s + } - // virgüllü değer geldiyse ilkini al - if (s.includes(',')) return s.split(',')[0].trim() return s } /* =========================================================== - 🔹 BEDEN GRUBU ALGILAMA HELPER’I - ----------------------------------------------------------- - Gelen beden listesini, ürün grubu/kategori bilgisine göre - doğru grup anahtarına dönüştürür (ayk, yas, pan, gom, tak, aksbir). - ----------------------------------------------------------- -=========================================================== */ + Size Group Detection + - Core logic aligned with backend detectBedenGroupGo + - Keeps frontend aksbir bucket for accessory lines + =========================================================== */ export function detectBedenGroup(bedenList, urunAnaGrubu = '', urunKategori = '') { - const list = Array.isArray(bedenList) && bedenList.length > 0 - ? bedenList.map(v => (v || '').toString().trim().toUpperCase()) - : [' '] + const list = Array.isArray(bedenList) ? bedenList : [] + const ana = normalizeTextForMatch(urunAnaGrubu) + const alt = normalizeTextForMatch(urunKategori) - const ana = (urunAnaGrubu || '') - .toUpperCase() - .trim() - .replace(/\(.*?\)/g, '') - .replace(/[^A-ZÇĞİÖŞÜ0-9\s]/g, '') - .replace(/\s+/g, ' ') - - const kat = (urunKategori || '').toUpperCase().trim() -// 🔸 Aksesuar ise "aksbir" - const aksesuarGruplari = [ - 'AKSESUAR','KRAVAT','PAPYON','KEMER','CORAP','ÇORAP', - 'FULAR','MENDIL','MENDİL','KASKOL','ASKI', - 'YAKA','KOL DUGMESI','KOL DÜĞMESİ' + // Frontend compatibility: accessory-only products should stay in aksbir. + const accessoryGroups = [ + 'AKSESUAR', 'KRAVAT', 'PAPYON', 'KEMER', 'CORAP', + 'FULAR', 'MENDIL', 'KASKOL', 'ASKI', 'YAKA', 'KOL DUGMESI' ] - const giyimGruplari = ['GÖMLEK','CEKET','PANTOLON','MONT','YELEK','TAKIM','TSHIRT','TİŞÖRT'] - // 🔸 Pantolon özel durumu + const clothingGroups = ['GOMLEK', 'CEKET', 'PANTOLON', 'MONT', 'YELEK', 'TAKIM', 'TSHIRT'] if ( - aksesuarGruplari.some(g => ana.includes(g) || kat.includes(g)) && - !giyimGruplari.some(g => ana.includes(g)) - ) return 'aksbir' - - if (ana.includes('PANTOLON') && kat.includes('YETİŞKİN')) return 'pan' - // 🔸 Tamamen numerik (örneğin 39-44 arası) → ayakkabı - const allNumeric = list.every(v => /^\d+$/.test(v)) - if (allNumeric) { - const nums = list.map(v => parseInt(v, 10)).filter(Boolean) - const diffs = nums.slice(1).map((v, i) => v - nums[i]) - if (diffs.every(d => d === 1) && nums[0] >= 35 && nums[0] <= 46) return 'ayk' + accessoryGroups.some(g => ana.includes(g) || alt.includes(g)) && + !clothingGroups.some(g => ana.includes(g)) + ) { + return 'aksbir' } - // 🔸 Yaş grubu (çocuk/garson) - if (kat.includes('GARSON') || kat.includes('ÇOCUK')) return 'yas' + if (ana.includes('AYAKKABI') || alt.includes('AYAKKABI')) { + return 'ayk' + } - // 🔸 Harfli beden varsa doğrudan "gom" (gömlek, üst giyim) - const harfliBedenler = ['XS','S','M','L','XL','XXL','2XL','3XL','4XL','5XL','6XL','7XL'] - if (list.some(b => harfliBedenler.includes(b))) return 'gom' + let hasYasNumeric = false + let hasAykNumeric = false + let hasPanNumeric = false + for (const raw of list) { + const b = safeTrimUpperJs(raw) + switch (b) { + case 'XS': + case 'S': + case 'M': + case 'L': + case 'XL': + case '2XL': + case '3XL': + case '4XL': + case '5XL': + case '6XL': + case '7XL': + return 'gom' + } + const n = parseNumericSizeJs(b) + if (n == null) continue + + if (n >= 2 && n <= 14) hasYasNumeric = true + if (n >= 39 && n <= 45) hasAykNumeric = true + if (n >= 38 && n <= 68) hasPanNumeric = true + } + + if (hasAykNumeric) return 'ayk' + if (ana.includes('PANTOLON')) return 'pan' + if (hasPanNumeric) return 'pan' + if (alt.includes('COCUK') || alt.includes('GARSON')) return 'yas' + if (hasYasNumeric) return 'yas' - // 🔸 Varsayılan: takım elbise return 'tak' } @@ -3372,7 +3415,7 @@ export function toSummaryRowFromForm(form) { const lbl = rawLbl == null || String(rawLbl).trim() === '' ? ' ' - : normalizeBeden(String(rawLbl)) + : normalizeBedenLabel(String(rawLbl)) const val = Number(values[i] || 0) if (val > 0) {