Merge remote-tracking branch 'origin/master'

This commit is contained in:
M_Kececi
2026-03-31 12:45:22 +03:00
parent 44439f7908
commit d7d871fb8a
19 changed files with 1608 additions and 158 deletions

View File

@@ -323,12 +323,12 @@
======================================================== -->
<div class="order-scroll-y" :class="{ 'compact-grid-header': compactGridHeader }"> <!-- ✅ YENİ: Grid + Editor ortak dikey scroll -->
<div class="order-grid-body">
<template v-for="grp in groupedRows" :key="grp.name">
<template v-for="grp in groupedRows" :key="grp.groupKey">
<div :class="['summary-group', grp.open ? 'open' : 'closed']">
<!-- 🟡 Sub-header -->
<div class="order-sub-header" @click="toggleGroup(grp.name)">
<div class="sub-left">{{ grp.name }}</div>
<div class="order-sub-header" @click="toggleGroup(grp.groupKey)">
<div class="sub-left">{{ grp.displayName }}</div>
<div class="sub-center">
<div
@@ -348,10 +348,10 @@
<div class="order-text-caption">
Toplam {{ grp.name }} Adet: {{ grp.toplamAdet }}
Toplam {{ grp.displayName }} Adet: {{ grp.toplamAdet }}
</div>
<div class="order-text-caption">
Toplam {{ grp.name }} Tutar:
Toplam {{ grp.displayName }} Tutar:
{{ Number(grp.toplamTutar || 0).toLocaleString('tr-TR', { minimumFractionDigits: 2 }) }}
{{ form.pb || aktifPB }}
</div>
@@ -747,6 +747,14 @@
@click="removeSelected"
:disable="isClosedRow || isViewOnly || !canMutateRows"
/>
<q-btn
v-if="canMutateRows"
flat
color="warning"
label="Bedenleri Sıfırla"
@click="onZeroBedenClick"
:disable="isClosedRow || isViewOnly || !canMutateRows"
/>
<q-btn
v-if="canMutateRows"
flat
@@ -1362,6 +1370,21 @@ const selectedRow = computed(() => {
=========================================================== */
const groupOpen = reactive({})
function normalizeYetiskinGarsonToken (row) {
const raw = String(
row?.yetiskinGarson ||
row?.YETISKIN_GARSON ||
row?.YetiskinGarson ||
row?.kategori ||
row?.Kategori ||
''
).toUpperCase()
if (raw.includes('GARSON')) return 'GARSON'
if (raw.includes('YETISKIN') || raw.includes('YETİSKİN')) return 'YETISKIN'
return 'GENEL'
}
const groupedRows = computed(() => {
const rows = Array.isArray(summaryRows.value) ? summaryRows.value : []
const buckets = {}
@@ -1376,33 +1399,44 @@ const groupedRows = computed(() => {
const ana = (row?.urunAnaGrubu || 'GENEL')
.toUpperCase()
.trim()
const yg = normalizeYetiskinGarsonToken(row)
const grpKey = String(row?.grpKey || 'tak').trim() || 'tak'
const bucketKey = `${yg}::${ana}::${grpKey}`
if (!buckets[ana]) {
buckets[ana] = {
if (!buckets[bucketKey]) {
buckets[bucketKey] = {
name: ana,
yg,
displayName: `${yg} ${ana}`,
rows: [],
toplamAdet: 0,
toplamTutar: 0,
open: groupOpen[ana] ?? true,
open: groupOpen[bucketKey] ?? true,
// 🔑 TEK KAYNAK
grpKey: row.grpKey
grpKey
}
order.push(ana)
order.push(bucketKey)
}
const bucket = buckets[ana]
const bucket = buckets[bucketKey]
bucket.rows.push(row)
bucket.toplamAdet += Number(row.adet || 0)
bucket.toplamTutar += Number(row.tutar || 0)
}
return order.map(name => {
const grp = buckets[name]
return order.map(bucketKey => {
const grp = buckets[bucketKey]
const schema = schemaMap?.[grp.grpKey]
const schemaTitle = String(schema?.title || grp.grpKey || '').trim()
const displayName = schemaTitle
? `${grp.yg} ${grp.name} (${schemaTitle})`
: `${grp.yg} ${grp.name}`
return {
...grp,
displayName,
groupKey: bucketKey,
bedenValues: schema?.values || []
}
})
@@ -3016,6 +3050,25 @@ const onSaveAndNextColor = async () => {
})
}
function onZeroBedenClick () {
if (!Array.isArray(form.bedenLabels) || !form.bedenLabels.length) {
$q.notify({
type: 'warning',
message: 'Sıfırlanacak beden alanı bulunamadı.'
})
return
}
form.bedenler = form.bedenLabels.map(() => 0)
updateTotals(form)
$q.notify({
type: 'info',
message: 'Beden adetleri sıfırlandı.',
position: 'top-right'
})
}