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 }}
- %{{oran.oran}} --> {{oran.deger}}
+ %{{ oran.oran }} --> {{ oran.deger }}
|
@@ -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 })
})
})