From a28576960ef8d1ed72ffd90c737109148020d47e Mon Sep 17 00:00:00 2001 From: ctengiz Date: Mon, 29 Apr 2024 17:21:02 +0300 Subject: [PATCH] =?UTF-8?q?kriter=20de=C4=9Feri=20ekleme,=20hesap=20kodu?= =?UTF-8?q?=20kopyalama,=20excel=20okuma,=20kriter=20g=C3=BCncelleme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ui/src/pages/tmpl.vue | 304 ++++++++++++++++++++++++++++++++---------- 1 file changed, 237 insertions(+), 67 deletions(-) diff --git a/ui/src/pages/tmpl.vue b/ui/src/pages/tmpl.vue index f2b263f..754b9c7 100644 --- a/ui/src/pages/tmpl.vue +++ b/ui/src/pages/tmpl.vue @@ -233,13 +233,13 @@ /> - {{kk}} : {{khk}} + {{ kk }} : {{ khk }} - {{kv.hedefAlan}} + {{ kv.hedefAlan }}
@@ -279,27 +279,54 @@ + + Kriter değeri ekle + + + + + Değer - - - + Veri alanı ekle + + + + + + + Kriter değerlerini koopyala + + {{ f }} @@ -310,6 +337,25 @@ color="negative" @click="delMapping(k, f)" /> + + + Girilen değeri tüm satırlara kopyala + + + + + @@ -321,6 +367,9 @@ v-model="kv[f]" dense @update:modelValue="ld.isDirty=true" + :label="f" + stack-label + label-color="primary" /> @@ -451,10 +500,10 @@ import { computed, onMounted, reactive, toRaw } from 'vue' import { useI18n } from 'vue-i18n' import { api } from 'boot/axios' -import { catchAxiosError, showAxiosError } from 'src/libjs/lib/axios' +import { catchAxiosError, showAxiosError, showError, showSuccess } from 'src/libjs/lib/axios' import MEditHeader from 'src/libjs/comp/MEditHeader.vue' import { read, utils } from 'xlsx' -import { useQuasar } from 'quasar' +import { copyToClipboard, useQuasar } from 'quasar' const { t } = useI18n() const $q = useQuasar() @@ -479,6 +528,8 @@ const ld = reactive({ //{baz: xxx, hedef: [{deger: yyy, oran: zzz}]} ], }, + + mappingVal: '', }) const tmpl = reactive({ @@ -540,7 +591,7 @@ const fieldOptionsLabel = computed(() => { const ls = tmpl.alanlar.filter(f => {return f.colNro >= 0}) const opts = [] ls.forEach(f => { - opts.push(f.fieldName ) + opts.push(f.fieldName) }) return opts }) @@ -549,8 +600,8 @@ 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 + } else { + return -1 } } @@ -656,87 +707,157 @@ const processXLS = function () { const sheet = workbook.Sheets[tmpl.bordroSheet] tmpl.rawData = utils.sheet_to_json(sheet, { header: 1 }) + /* tmpl.alanlar.splice(0) + */ + const fieldNames = [] let lastCol = -1 tmpl.rawData[tmpl.baslikSatiri - 1].forEach((val, ndx) => { //başlık olmayan kolonlar if (ndx - lastCol > 1) { - for (let j = 1; j < ndx - lastCol; j++) { - tmpl.alanlar.push({ - colNro: lastCol + 1, - fieldName: `Kolon ${lastCol + 2}`, - colType: '', - ba: 'B', - showInSlip: false, - combinedFields: [], - combinedFieldsNro: [], - formula: '', - }) - } + const msg = 'Başlıksız kolonlar var. Dosya işlenemez' + showError(msg) + throw msg } let name = val for (let j = 1; j < tmpl.baslikSatirAdedi; j++) { let addiVal = tmpl.rawData[tmpl.baslikSatiri - 1 + j][ndx] - if (!addiVal) { - addiVal = '' + if (addiVal) { + name = name + ' ' + addiVal } - name = name + ' ' + addiVal } + name = name.trim() + fieldNames.push(name) - tmpl.alanlar.push({ - colNro: ndx, - fieldName: name.trim(), - colType: '', - ba: 'B', - showInSlip: false, - combinedFields: [], - combinedFieldsNro: [], - formula: '', - }) + const alanIndex = tmpl.alanlar.findIndex(f => {return f.fieldName === name}) + if (alanIndex < 0) { + tmpl.alanlar.push({ + colNro: ndx, + fieldName: name, + colType: '', + ba: 'B', + showInSlip: false, + combinedFields: [], + combinedFieldsNro: [], + formula: '', + }) + } else { + if (tmpl.alanlar[alanIndex].colNro !== ndx) { + const oldColNro = tmpl.alanlar[alanIndex].colNro + tmpl.alanlar[alanIndex].colNro = ndx + + //kriter kolon no'ları güncelleyelim + Object.keys(tmpl.kriterler).forEach(kr => { + if (tmpl.kriterler[kr].colNro === oldColNro) { + tmpl.kriterler[kr].colNro = ndx + } + + for (let j = 0; j < tmpl.kriterler[kr].combinedFieldsNro.length; j++) { + if (tmpl.kriterler[kr].combinedFieldsNro[j] === oldColNro) { + tmpl.kriterler[kr].combinedFieldsNro[j] = ndx + } + } + }) + + // Dağtım kolon no'ları güncelleyelim + Object.keys(tmpl.dagitim).forEach(dk => { + if (tmpl.dagitim[dk].bazAlanColNro === oldColNro) { + tmpl.dagitim[dk].bazAlanColNro = ndx + } + if (tmpl.dagitim[dk].hedefAlanColNro === oldColNro) { + tmpl.dagitim[dk].hedefAlanColNro = ndx + } + }) + + // Birleşik kriterleri güncelleyelim + tmpl.alanlar.forEach(af => { + if (af.colNro < 0) { + for (let j = 0; j < af.combinedFieldsNro.length; j++) { + if (af.combinedFieldsNro[j] === oldColNro) { + af.combinedFieldsNro[j] = ndx + } + } + } + }) + } + } lastCol = ndx }) + // Sıralayalım + tmpl.alanlar.sort((a, b) => { + if (a.colNro < b.colNro) { + return -1 + } else { + return 1 + } + }) + + // excelden silinen alanları uçuralım + tmpl.alanlar.forEach((v, n) => { + const tmpIndex = fieldNames.findIndex(el => {return v.fieldName === el}) + if (tmpIndex < 0) { + console.log(v.fieldName) + tmpl.alanlar.splice(n, 1) + } + }) + + ld.showFields = true + } const fillCriteria = function () { ld.isDirty = true // kriterleri temizleyelim + + /* Object.keys(ld.alreadySelectedValFields).forEach(k => { delete ld.alreadySelectedValFields[k] }) tmpl.kriterler = {} + */ // kriter alanlarını bulup boş kriter nesnelerini oluşturalım const kriterCols = [] tmpl.alanlar.filter(f => {return f.colType === 'kriter'}).forEach(f => { - tmpl.kriterler[f.fieldName] = { - colNro: f.colNro, + if (!tmpl.kriterler.hasOwnProperty(f.fieldName)) { + tmpl.kriterler[f.fieldName] = { + colNro: f.colNro, - combinedFields: [...(f.combinedFields || [])], - combinedFieldsNro: [...(f.combinedFieldsNro || [])], + combinedFields: [...(f.combinedFields || [])], + combinedFieldsNro: [...(f.combinedFieldsNro || [])], - valFields: [], - /* - [ - {fieldName: 'xxx', colNro: 3} - {fieldName: 'yyy', colNro: 4} - ] - */ + valFields: [], + /* + [ + {fieldName: 'xxx', colNro: 3} + {fieldName: 'yyy', colNro: 4} + ] + */ - mappings: {}, - /* - mapping['kriter1'] = {xxx: 770.01.001, yyy: 770.01.002} - */ + mappings: {}, + /* + mapping['kriter1'] = {xxx: 770.01.001, yyy: 770.01.002} + */ + } } + kriterCols.push(f.fieldName) }) + // kriter olmayan kolonları silelim + Object.keys(tmpl.kriterler).forEach(k => { + if (kriterCols.indexOf(k) < 0) { + delete tmpl.kriterler[k] + } + }) + tmpl.rawData.forEach((row, ndx) => { if (ndx <= tmpl.baslikSatiri - 1 + tmpl.baslikSatirAdedi) { @@ -764,9 +885,15 @@ const fillCriteria = function () { } if ((kriterVal !== null) && (kriterVal !== undefined) && (kriterVal !== '')) { - tmpl.kriterler[k].mappings[kriterVal] = {} - } + if (!tmpl.kriterler[k].mappings.hasOwnProperty(kriterVal)) { + tmpl.kriterler[k].mappings[kriterVal] = {} + + tmpl.kriterler[k].valFields.forEach(f => { + tmpl.kriterler[k].mappings[ld.mappingVal][f] = '' + }) + } + } }) } } @@ -797,6 +924,49 @@ const delMapping = function (k, valField) { }) } +const fillMappings = function (k, valField) { + ld.isDirty = true + + Object.keys(tmpl.kriterler[k].mappings).forEach(vk => { + tmpl.kriterler[k].mappings[vk][valField] = ld.mappingVal + }) + + ld.mappingVal = '' +} + +const addMappingKey = function (k) { + ld.isDirty = true + + tmpl.kriterler[k].mappings[ld.mappingVal] = {} + tmpl.kriterler[k].valFields.forEach(f => { + tmpl.kriterler[k].mappings[ld.mappingVal][f] = '' + }) + + ld.mappingVal = '' +} + +const copyMappingKeys = function (k) { + let text = '' + Object.keys(tmpl.kriterler[k].mappings).forEach(vk => { + text += vk + '\n' + }) + + copyToClipboard(text).then(() => { + showSuccess('Kriter değerleri kopyalandı') + }).catch(() => { + alert('kopyalamada hata') + }) +} + +const fillMappingsFromExcel = function (k, valField) { + ld.isDirty = true + + Object.keys(tmpl.kriterler[k].mappings).forEach(vk => { + tmpl.kriterler[k].mappings[vk][valField] = ld.mappingVal + }) + + ld.mappingVal = '' +} const addCombinedField = function () { ld.isDirty = true @@ -849,7 +1019,7 @@ const addDagitim = function () { bazAlanColNro: getFieldColNumber(bazAlan), hedefAlanColNro: getFieldColNumber(hedefAlan), hedefAlan: hedefAlan, - kural: {} + kural: {}, } ld.dagitim.kural.forEach(k => { @@ -857,7 +1027,7 @@ const addDagitim = function () { tmpl.dagitim[bazAlan].kural[bazDeger] = [] k.hedef.forEach(h => { - tmpl.dagitim[bazAlan].kural[bazDeger].push({oran: h.oran, deger: h.deger}) + tmpl.dagitim[bazAlan].kural[bazDeger].push({ oran: h.oran, deger: h.deger }) }) })