Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -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'
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user