maliyet dağıtımı
This commit is contained in:
@@ -107,6 +107,7 @@ const tmpl = reactive({
|
||||
|
||||
alanlar: [],
|
||||
kriterler: {},
|
||||
dagitim: {}
|
||||
})
|
||||
|
||||
onMounted(() => {
|
||||
@@ -226,12 +227,54 @@ const doProcess = function () {
|
||||
}
|
||||
}
|
||||
|
||||
const hesapKodBul = function (row, fieldName) {
|
||||
// Hesap kodunu bulalım
|
||||
let hesapKod = ''
|
||||
Object.keys(tmpl.kriterler).forEach(k => {
|
||||
const kriter = tmpl.kriterler[k]
|
||||
|
||||
let kriterVal = ''
|
||||
|
||||
if (kriter.colNro >= 0) {
|
||||
// sabit kriter alanı
|
||||
kriterVal = row[kriter.colNro]
|
||||
} else {
|
||||
const tmpValues = []
|
||||
tmpl.kriterler[k].combinedFieldsNro.forEach(cf => {
|
||||
let tmpKriterVal = row[cf]
|
||||
if ((tmpKriterVal === null) || (tmpKriterVal === undefined)) {
|
||||
tmpKriterVal = ''
|
||||
}
|
||||
tmpValues.push(tmpKriterVal)
|
||||
})
|
||||
|
||||
kriterVal = tmpValues.join(' ').trim()
|
||||
}
|
||||
|
||||
const map = kriter.mappings[kriterVal]
|
||||
|
||||
if ((map !== undefined) && (map !== null)) {
|
||||
const tmpHesapKod = map[fieldName]
|
||||
if (tmpHesapKod) {
|
||||
hesapKod = tmpHesapKod
|
||||
}
|
||||
} else {
|
||||
console.log(kriter)
|
||||
}
|
||||
})
|
||||
|
||||
return hesapKod
|
||||
|
||||
}
|
||||
|
||||
const processXLS = function () {
|
||||
const sheet = workbook.Sheets[ld.bordroSheet]
|
||||
const rawData = utils.sheet_to_json(sheet, { header: 1 })
|
||||
|
||||
const bordro = []
|
||||
|
||||
const dagitimKeys = Object.keys(tmpl.dagitim)
|
||||
|
||||
rawData.forEach((row, ndx) => {
|
||||
if (ndx <= tmpl.baslikSatiri - 1 + tmpl.baslikSatirAdedi) {
|
||||
|
||||
@@ -261,48 +304,38 @@ const processXLS = function () {
|
||||
|
||||
// veri alanlarını verelim
|
||||
tmpl.alanlar.filter(a => {return a.colType === 'veri'}).forEach(veri => {
|
||||
// Hesap kodunu bulalım
|
||||
let hesapKod = ''
|
||||
Object.keys(tmpl.kriterler).forEach(k => {
|
||||
const kriter = tmpl.kriterler[k]
|
||||
|
||||
let kriterVal = ''
|
||||
let dagitimYapildi = false
|
||||
if (dagitimKeys.length > 0) {
|
||||
dagitimKeys.forEach(bazAlan => {
|
||||
const degerler = Object.keys(tmpl.dagitim[bazAlan].kural)
|
||||
degerler.forEach(deger => {
|
||||
if (deger === row[tmpl.dagitim[bazAlan].bazAlanColNro]) {
|
||||
dagitimYapildi = true
|
||||
tmpl.dagitim[bazAlan].kural[deger].forEach(oran => {
|
||||
//row'ın bir kopyasını oluşturalım çünkü hesap kodunu bu yeni row'a göre bulacağız
|
||||
const tmpRow = [...row]
|
||||
tmpRow[tmpl.dagitim[bazAlan].hedefAlanColNro] = oran.deger
|
||||
bordroRow['Hesap'] = hesapKodBul(tmpRow, veri.fieldName)
|
||||
bordroRow['Masraf Açıklama'] = veri.fieldName
|
||||
bordroRow['Tutar'] = row[veri.colNro] * (oran.oran / 100)
|
||||
bordroRow['B/A'] = veri.ba
|
||||
|
||||
if (kriter.colNro >= 0) {
|
||||
// sabit kriter alanı
|
||||
kriterVal = row[kriter.colNro]
|
||||
} else {
|
||||
const tmpValues = []
|
||||
tmpl.kriterler[k].combinedFieldsNro.forEach(cf => {
|
||||
let tmpKriterVal = row[cf]
|
||||
if ((tmpKriterVal === null) || (tmpKriterVal === undefined)) {
|
||||
tmpKriterVal = ''
|
||||
}
|
||||
tmpValues.push(tmpKriterVal)
|
||||
bordro.push({ ...bordroRow })
|
||||
})
|
||||
|
||||
kriterVal = tmpValues.join(' ').trim()
|
||||
}
|
||||
|
||||
const map = kriter.mappings[kriterVal]
|
||||
|
||||
if ((map !== undefined) && (map !== null)) {
|
||||
const tmpHesapKod = map[veri.fieldName]
|
||||
if (tmpHesapKod) {
|
||||
hesapKod = tmpHesapKod
|
||||
}
|
||||
} else {
|
||||
console.log(kriter)
|
||||
}
|
||||
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
bordroRow['Hesap'] = hesapKod
|
||||
if (!dagitimYapildi) {
|
||||
bordroRow['Hesap'] = hesapKodBul(row, veri.fieldName)
|
||||
bordroRow['Masraf Açıklama'] = veri.fieldName
|
||||
bordroRow['Tutar'] = row[veri.colNro]
|
||||
bordroRow['B/A'] = veri.ba
|
||||
|
||||
bordro.push({ ...bordroRow })
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -185,6 +185,73 @@
|
||||
|
||||
</q-card-section>
|
||||
|
||||
<q-card-section v-if="ld.showFields">
|
||||
<div class="row q-col-gutter-md q-mb-md">
|
||||
<!--
|
||||
<div class="col-auto">
|
||||
<q-btn label="Kriterleri Doldur"
|
||||
outline
|
||||
color="pcolor1"
|
||||
no-caps
|
||||
@click="fillCriteria"
|
||||
/>
|
||||
</div>
|
||||
-->
|
||||
<div class="col text-h6 text-pcolor1">
|
||||
Dağıtım Tanımları
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<q-markup-table>
|
||||
<thead>
|
||||
<tr>
|
||||
<td>
|
||||
<q-btn icon="add"
|
||||
outline
|
||||
color="positive"
|
||||
no-caps
|
||||
size="sm"
|
||||
@click="ld.showDagitimDlg = true"
|
||||
/>
|
||||
</td>
|
||||
<td>Dağıtım Alanı</td>
|
||||
<td>Dağıtım Kuralı</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<template v-for="(kv, kk) in tmpl.dagitim" :key="kk">
|
||||
<template v-for="(khv, khk) in kv.kural" :key="khk">
|
||||
<tr>
|
||||
<td>
|
||||
<q-btn icon="delete"
|
||||
flat
|
||||
outline
|
||||
size="sm"
|
||||
color="negative"
|
||||
@click="delDagitim(kk, khk)"
|
||||
/>
|
||||
</td>
|
||||
<td>
|
||||
{{kk}} : {{khk}}
|
||||
</td>
|
||||
<td>
|
||||
{{kv.hedefAlan}}
|
||||
<br/>
|
||||
<template v-for="oran in khv" :key="oran.deger">
|
||||
%{{oran.oran}} --> {{oran.deger}}
|
||||
<br/>
|
||||
</template>
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
</template>
|
||||
|
||||
</tbody>
|
||||
</q-markup-table>
|
||||
</q-card-section>
|
||||
|
||||
|
||||
<q-card-section v-if="ld.showFields">
|
||||
<div class="row q-col-gutter-md q-mb-md">
|
||||
<div class="col-auto">
|
||||
@@ -273,12 +340,111 @@
|
||||
</q-markup-table>
|
||||
</q-expansion-item>
|
||||
</q-list>
|
||||
|
||||
</q-card-section>
|
||||
|
||||
|
||||
</q-card>
|
||||
</q-page>
|
||||
|
||||
<q-dialog
|
||||
v-model="ld.showDagitimDlg"
|
||||
persistent
|
||||
>
|
||||
<q-card style="width: 700px; max-width: 80vw;">
|
||||
|
||||
<q-card-section>
|
||||
<div class="row q-col-gutter-md items-center">
|
||||
<q-select
|
||||
class="col-5"
|
||||
v-model="ld.dagitim.bazAlan"
|
||||
:options="fieldOptionsLabel"
|
||||
option-label="fieldName"
|
||||
option-value="colNro"
|
||||
label="Dağıtım Bazı"
|
||||
/>
|
||||
|
||||
<q-select
|
||||
class="col-5"
|
||||
v-model="ld.dagitim.hedefAlan"
|
||||
:options="fieldOptionsLabel"
|
||||
map-options
|
||||
emit-value
|
||||
label="Dağıtım Hedefi"
|
||||
/>
|
||||
|
||||
<div class="col-2">
|
||||
<q-btn
|
||||
label="Kural Ekle"
|
||||
outline
|
||||
no-caps
|
||||
@click="addDagitimKural"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-for="(kv, ndx) in ld.dagitim.kural" :key="ndx"
|
||||
class="row q-col-gutter-md">
|
||||
<div class="col-5">
|
||||
<q-input
|
||||
class="col-5"
|
||||
label="Baz Değer"
|
||||
v-model="kv.baz"
|
||||
dense
|
||||
>
|
||||
<template v-slot:after>
|
||||
<q-btn
|
||||
label="Oran Ekle"
|
||||
outline
|
||||
size="sm"
|
||||
no-caps
|
||||
@click="addDagitimKuralOran(ndx)"
|
||||
/>
|
||||
</template>
|
||||
</q-input>
|
||||
</div>
|
||||
<div class="col-5">
|
||||
<div v-for="(hd,hndx) in kv.hedef" :key="hndx"
|
||||
class="row q-col-gutter-sm"
|
||||
>
|
||||
<q-input
|
||||
class="col"
|
||||
label="Hedef Değer"
|
||||
v-model="hd.deger"
|
||||
dense
|
||||
/>
|
||||
<q-input
|
||||
class="col"
|
||||
label="Oran"
|
||||
v-model.number="hd.oran"
|
||||
type="number"
|
||||
dense
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</q-card-section>
|
||||
|
||||
<q-card-actions>
|
||||
<q-btn
|
||||
color="positive"
|
||||
flat label="Tamam"
|
||||
v-close-popup
|
||||
no-caps
|
||||
@click="addDagitim"
|
||||
/>
|
||||
<q-btn
|
||||
color="negative"
|
||||
flat label="İptal" v-close-popup no-caps
|
||||
@click="cancelDagitim"
|
||||
/>
|
||||
|
||||
</q-card-actions>
|
||||
</q-card>
|
||||
|
||||
</q-dialog>
|
||||
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
@@ -304,6 +470,15 @@ const ld = reactive({
|
||||
showFields: false,
|
||||
|
||||
combinedFields: [],
|
||||
|
||||
showDagitimDlg: false,
|
||||
dagitim: {
|
||||
bazAlan: '',
|
||||
hedefAlan: '',
|
||||
kural: [
|
||||
//{baz: xxx, hedef: [{deger: yyy, oran: zzz}]}
|
||||
],
|
||||
},
|
||||
})
|
||||
|
||||
const tmpl = reactive({
|
||||
@@ -318,6 +493,19 @@ const tmpl = reactive({
|
||||
|
||||
alanlar: [],
|
||||
kriterler: {},
|
||||
dagitim: {
|
||||
/*
|
||||
'bazAlan': {
|
||||
bazAlanColNro: 1
|
||||
hedefAlanColNro: 2
|
||||
|
||||
hedefAlan: '',
|
||||
kural: {
|
||||
'bazDeger': [{oran: 20, deger: aaaa}}
|
||||
}
|
||||
}
|
||||
*/
|
||||
},
|
||||
})
|
||||
|
||||
let workbook = null
|
||||
@@ -339,6 +527,33 @@ const valFielOptions = computed(() => {
|
||||
return opts
|
||||
})
|
||||
|
||||
const fieldOptions = computed(() => {
|
||||
const ls = tmpl.alanlar.filter(f => {return f.colNro >= 0})
|
||||
const opts = []
|
||||
ls.forEach(f => {
|
||||
opts.push({ colNro: f.colNro, fieldName: f.fieldName })
|
||||
})
|
||||
return opts
|
||||
})
|
||||
|
||||
const fieldOptionsLabel = computed(() => {
|
||||
const ls = tmpl.alanlar.filter(f => {return f.colNro >= 0})
|
||||
const opts = []
|
||||
ls.forEach(f => {
|
||||
opts.push(f.fieldName )
|
||||
})
|
||||
return opts
|
||||
})
|
||||
|
||||
const getFieldColNumber = function (fieldName) {
|
||||
const tmpIndex = tmpl.alanlar.findIndex(f => {return f.fieldName === fieldName})
|
||||
if (tmpIndex >= 0) {
|
||||
return tmpl.alanlar[tmpIndex].colNro
|
||||
} else {
|
||||
return -1
|
||||
}
|
||||
}
|
||||
|
||||
const getCompanyList = function () {
|
||||
api.get('/sy/companies').then(res => {
|
||||
if (res.data.Success) {
|
||||
@@ -582,14 +797,6 @@ const delMapping = function (k, valField) {
|
||||
})
|
||||
}
|
||||
|
||||
const fieldOptions = computed(() => {
|
||||
const ls = tmpl.alanlar.filter(f => {return f.colNro >= 0})
|
||||
const opts = []
|
||||
ls.forEach(f => {
|
||||
opts.push({ colNro: f.colNro, fieldName: f.fieldName })
|
||||
})
|
||||
return opts
|
||||
})
|
||||
|
||||
const addCombinedField = function () {
|
||||
ld.isDirty = true
|
||||
@@ -622,6 +829,55 @@ const delCombinedField = function (ndx) {
|
||||
tmpl.alanlar.splice(ndx, 1)
|
||||
}
|
||||
|
||||
const addDagitimKural = function () {
|
||||
ld.dagitim.kural.push({
|
||||
baz: '', hedef: [],
|
||||
})
|
||||
}
|
||||
|
||||
const addDagitimKuralOran = function (ndx) {
|
||||
ld.dagitim.kural[ndx].hedef.push({ deger: null, oran: 0 })
|
||||
}
|
||||
|
||||
const addDagitim = function () {
|
||||
ld.isDirty = true
|
||||
|
||||
const hedefAlan = toRaw(ld.dagitim.hedefAlan)
|
||||
const bazAlan = toRaw(ld.dagitim.bazAlan)
|
||||
|
||||
tmpl.dagitim[bazAlan] = {
|
||||
bazAlanColNro: getFieldColNumber(bazAlan),
|
||||
hedefAlanColNro: getFieldColNumber(hedefAlan),
|
||||
hedefAlan: hedefAlan,
|
||||
kural: {}
|
||||
}
|
||||
|
||||
ld.dagitim.kural.forEach(k => {
|
||||
const bazDeger = toRaw(k.baz)
|
||||
|
||||
tmpl.dagitim[bazAlan].kural[bazDeger] = []
|
||||
k.hedef.forEach(h => {
|
||||
tmpl.dagitim[bazAlan].kural[bazDeger].push({oran: h.oran, deger: h.deger})
|
||||
})
|
||||
})
|
||||
|
||||
cancelDagitim()
|
||||
}
|
||||
|
||||
const cancelDagitim = function () {
|
||||
ld.dagitim.bazAlan = ''
|
||||
ld.dagitim.hedefAlan = ''
|
||||
ld.dagitim.kural.splice(0)
|
||||
}
|
||||
|
||||
const delDagitim = function (bazAlan, bazDeger) {
|
||||
ld.isDirty = true
|
||||
delete tmpl.dagitim[bazAlan].kural[bazDeger]
|
||||
if (Object.keys(tmpl.dagitim[bazAlan].kural).length === 0) {
|
||||
delete tmpl.dagitim[bazAlan]
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user