maliyet dağıtımı
This commit is contained in:
@@ -107,6 +107,7 @@ const tmpl = reactive({
|
|||||||
|
|
||||||
alanlar: [],
|
alanlar: [],
|
||||||
kriterler: {},
|
kriterler: {},
|
||||||
|
dagitim: {}
|
||||||
})
|
})
|
||||||
|
|
||||||
onMounted(() => {
|
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 processXLS = function () {
|
||||||
const sheet = workbook.Sheets[ld.bordroSheet]
|
const sheet = workbook.Sheets[ld.bordroSheet]
|
||||||
const rawData = utils.sheet_to_json(sheet, { header: 1 })
|
const rawData = utils.sheet_to_json(sheet, { header: 1 })
|
||||||
|
|
||||||
const bordro = []
|
const bordro = []
|
||||||
|
|
||||||
|
const dagitimKeys = Object.keys(tmpl.dagitim)
|
||||||
|
|
||||||
rawData.forEach((row, ndx) => {
|
rawData.forEach((row, ndx) => {
|
||||||
if (ndx <= tmpl.baslikSatiri - 1 + tmpl.baslikSatirAdedi) {
|
if (ndx <= tmpl.baslikSatiri - 1 + tmpl.baslikSatirAdedi) {
|
||||||
|
|
||||||
@@ -261,48 +304,38 @@ const processXLS = function () {
|
|||||||
|
|
||||||
// veri alanlarını verelim
|
// veri alanlarını verelim
|
||||||
tmpl.alanlar.filter(a => {return a.colType === 'veri'}).forEach(veri => {
|
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) {
|
bordro.push({ ...bordroRow })
|
||||||
// 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[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['Masraf Açıklama'] = veri.fieldName
|
||||||
bordroRow['Tutar'] = row[veri.colNro]
|
bordroRow['Tutar'] = row[veri.colNro]
|
||||||
bordroRow['B/A'] = veri.ba
|
bordroRow['B/A'] = veri.ba
|
||||||
|
|
||||||
bordro.push({ ...bordroRow })
|
bordro.push({ ...bordroRow })
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -185,6 +185,73 @@
|
|||||||
|
|
||||||
</q-card-section>
|
</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">
|
<q-card-section v-if="ld.showFields">
|
||||||
<div class="row q-col-gutter-md q-mb-md">
|
<div class="row q-col-gutter-md q-mb-md">
|
||||||
<div class="col-auto">
|
<div class="col-auto">
|
||||||
@@ -273,12 +340,111 @@
|
|||||||
</q-markup-table>
|
</q-markup-table>
|
||||||
</q-expansion-item>
|
</q-expansion-item>
|
||||||
</q-list>
|
</q-list>
|
||||||
|
|
||||||
</q-card-section>
|
</q-card-section>
|
||||||
|
|
||||||
|
|
||||||
</q-card>
|
</q-card>
|
||||||
</q-page>
|
</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>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
@@ -304,6 +470,15 @@ const ld = reactive({
|
|||||||
showFields: false,
|
showFields: false,
|
||||||
|
|
||||||
combinedFields: [],
|
combinedFields: [],
|
||||||
|
|
||||||
|
showDagitimDlg: false,
|
||||||
|
dagitim: {
|
||||||
|
bazAlan: '',
|
||||||
|
hedefAlan: '',
|
||||||
|
kural: [
|
||||||
|
//{baz: xxx, hedef: [{deger: yyy, oran: zzz}]}
|
||||||
|
],
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
const tmpl = reactive({
|
const tmpl = reactive({
|
||||||
@@ -318,6 +493,19 @@ const tmpl = reactive({
|
|||||||
|
|
||||||
alanlar: [],
|
alanlar: [],
|
||||||
kriterler: {},
|
kriterler: {},
|
||||||
|
dagitim: {
|
||||||
|
/*
|
||||||
|
'bazAlan': {
|
||||||
|
bazAlanColNro: 1
|
||||||
|
hedefAlanColNro: 2
|
||||||
|
|
||||||
|
hedefAlan: '',
|
||||||
|
kural: {
|
||||||
|
'bazDeger': [{oran: 20, deger: aaaa}}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
let workbook = null
|
let workbook = null
|
||||||
@@ -339,6 +527,33 @@ const valFielOptions = computed(() => {
|
|||||||
return opts
|
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 () {
|
const getCompanyList = function () {
|
||||||
api.get('/sy/companies').then(res => {
|
api.get('/sy/companies').then(res => {
|
||||||
if (res.data.Success) {
|
if (res.data.Success) {
|
||||||
@@ -539,7 +754,7 @@ const fillCriteria = function () {
|
|||||||
const tmpValues = []
|
const tmpValues = []
|
||||||
tmpl.kriterler[k].combinedFieldsNro.forEach(cf => {
|
tmpl.kriterler[k].combinedFieldsNro.forEach(cf => {
|
||||||
let tmpKriterVal = row[cf]
|
let tmpKriterVal = row[cf]
|
||||||
if ((tmpKriterVal === null ) || (tmpKriterVal === undefined)) {
|
if ((tmpKriterVal === null) || (tmpKriterVal === undefined)) {
|
||||||
tmpKriterVal = ''
|
tmpKriterVal = ''
|
||||||
}
|
}
|
||||||
tmpValues.push(tmpKriterVal)
|
tmpValues.push(tmpKriterVal)
|
||||||
@@ -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 () {
|
const addCombinedField = function () {
|
||||||
ld.isDirty = true
|
ld.isDirty = true
|
||||||
@@ -622,6 +829,55 @@ const delCombinedField = function (ndx) {
|
|||||||
tmpl.alanlar.splice(ndx, 1)
|
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>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user