let $bct = { wk: 'Woche', nd: 'Keine Daten gefunden.', h: 'Uhr', mdl: 'BankBuchungen', upl: 'BuchungsExport hochladen', rel: 'Neu Laden', smd: 'Buchung als erledigt markieren', smdc: 'Buchung wirklich als erledigt markieren?\nDie Buchung wird nicht mehr in den auffälligen Buchungen angezeigt.', ati: 'Buchung einer Rechnung zuordnen', ni: 'Es wurden keine Rechnungen mit dieser ID gefunden.', ino: 'Rechnungsnummer', fi: 'Folgende Rechnungen wurden gefunden', atic: 'Buchung wirklich der Rechnung {0} zuordnen?', dqb: 'Auffällige Zahlungen anzeigen', iov: { all: 'Buchungsübersicht (alle)', '': 'Buchungsübersicht' }, in: 'Rechnungsnummer', bt: 'Buchungstexte', bv: 'Buchungswert (volle €)' }; let $bcol = { qtl: new fields_definition('Kontobericht', 'Kontoberichte', [ { name: 'InvoiceId', label: 'RechnungsNr', type: 'string' }, { name: 'ValueDate', label: 'Valuta', type: 'date' }, { name: 'InvoiceBalance', label: 'Rechnungsbetrag', type: 'string' }, { name: 'IsCanceled', label: 'Storno', type: 'bool' }, { name: 'Amount', label: 'Gutschrift', type: 'string' }, { name: 'Skonto', label: 'Skonto ?', type: 'bool' }, { name: 'Deviation', label: 'Abweichung [%]', type: 'bool' }, { name: 'AccountNumberOfPayer', label: 'IBAN', type: 'string' }, { name: 'NameOfPayer', label: 'Name', type: 'string' }, { name: 'SepaRemittanceInformation', label: 'Verwendungszweck', type: 'string' }, { name: 'EndToEndReference', label: 'Referenz', type: 'string' } ]), bsu: new fields_definition('Kontobericht', 'Kontoberichte', [ { name: 'bsu', label: 'Export der Buchungen', type: 'file', required: true, prop: { multiple: true } } ]) }; let gi = (n, c) => $$.sc(`glyphicon glyphicon-${n}`).aC(c); let $bam = { init2: function (type, options) { type = type || 'bam'; options = options || {}; $ocms.getScript([ //{ script: 'web/jstree.min.js', css: 'web/jstree.min.css', condition: typeof $.fn.jstree !== 'function' } //, { script: 'web/jquery.qtip.min.js', css: 'web/jquery.qtip.min.css', condition: typeof $.fn.qtip !== 'function' } //, { script: 'web/typeahead.min.js', css: '', condition: typeof $.fn.typeahead !== 'function' } //, { script: 'web/fullcalendar.min.js', module: 'FullCalendar', css: 'web/fullcalendar.min.css', condition: typeof FullCalendar !== 'object' } ], function () { //FullCalendar = $vm.FullCalendar; $bam.init3(type, options); }); }, init3: async function (type, options) { $fis.cf(true); let lf = $fis.lf(true); $bam.eM(); $('#activemodule').text($bct.mdl); await $fis.prepAuth('fds_bam,fds_inv,fds_reminder'); let pa = [(async () => { if ($fis.isAuth('fds_bam', 1) === true) { $bam.prepLst(''); lf.aC('fix'); //initially should be shown - for convenience } })(), (async () => { if ($fis.isAuth('fds_bam', 1) === true) { $bam.renderLst(false); //lf.aC('fix'); //initially should be shown - for convenience } })(), new Promise((resolve, reject) => { //$bam.123() })]; await Promise.all(pa); }, iMn: (ix) => { let fds = bool(ix.fds, false), id = ix.taID, m = []; m.push({ lbl: $bct.smd, fnc: () => { $bam.smd(id); } }); m.push({ lbl: $bct.ati, fnc: () => { $bam.ati(id); } }); return $('#topbar').ocmsmenu(m); }, eM : (r, re, opt) => { let m = []; if ($fis.isAuth('fds_bam', 2) === true) { m.push({ lbl: $bct.upl, fnc: $bam.ubs}); } if (bool(r, false) === true) { m.push({ lbl: $bct.rel, fnc: $bam.renderLst }); } return $('#topbar').ocmsmenu(m); /* empty Array => empty menu */ }, prepLst: function (includes) { let td = new Date(); let lf = $fis.lf(true).ldng(1), sd = new Date('2021-01-01'); let frm = $fis.frm_list(); frm.IN(function () { }); let osb = $$.i({ placeholder: $bct.in }).appendTo($$.dc('mth ivn', lf)).enterKey(function (ev) { let mth = $(this), v = mth.val() || ''; ev.stopPropagation(); mth.parent().siblings().rC('selected'); if (v.length > 3) { mth.parent().aC('selected'); $bam.renderbt('i:' + v, 's'); mth.val(''); } }); let osb2 = $$.i({ placeholder: $bct.bt }).appendTo($$.dc('mth ivn', lf)).enterKey(function (ev) { let mth = $(this), v = mth.val() || ''; ev.stopPropagation(); mth.parent().siblings().rC('selected'); if (v.length > 3) { mth.parent().aC('selected'); $bam.renderbt('b:' + v, 's'); mth.val(''); } }); let osb3 = $$.i({ placeholder: $bct.bv }).appendTo($$.dc('mth ivn', lf)).enterKey(function (ev) { let mth = $(this), v = mth.val() || ''; ev.stopPropagation(); mth.parent().siblings().rC('selected'); if (v.length > 3) { mth.parent().aC('selected'); $bam.renderbt(`v:${v}`, 's'); mth.val(''); } }); let opn = $$.dc('mth oreq', lf).text($bct.dqb).click(function (ev) { let mth = $(this); ev.stopPropagation(); mth.siblings().rC('selected'); if (mth.is('.selected') === true) { mth.tC('selected'); $bam.renderLst(false); } mth.aC('selected'); }); lf.append('
'); let mthl = $$.dc('mthl', lf), thisyear = td.getFullYear(), thismonth = td.getMonth() + 1; for (let tyr = sd.getFullYear(); tyr <= thisyear; tyr++) { let yr = $$.dc('yr').prependTo(mthl).text(`${$bct.iov[includes]} - ${tyr.toString()}`).toggleClass('selected', tyr === thisyear); yr.click({ yr: tyr }, function (ev) { ev.stopPropagation(); yr.siblings().rC('selected'); yr.aC('selected'); }); let mfrm = $$.dc('mfrm', yr); for (let tmt = 0; tmt < (tyr !== thisyear ? 12 : thismonth); tmt++) { sd = new Date(tyr, tmt, 1); let mth = $$.dc('mth').prependTo(mfrm).text(`${$bct.iov[includes]} - ${fdt(sd, 'MMM yyyy')}`); mth.click({ yr: tyr, mt: tmt }, function (ev) { ev.stopPropagation(); mth.siblings().rC('selected'); if (mth.is('.selected') === true) { mth.tC('selected'); let tgt = fdt(new Date(ev.data.yr, ev.data.mt, 1), 'yy-MM-dd'); $bam.renderbt(tgt, 'm'); } mth.aC('selected'); }); let fwf = getMonday(sd), rd = fwf, lwf = new Date(sd); lwf.setMonth(lwf.getMonth() + 1); lwf.setDate(0); lwf = getMonday(lwf); let wfrm = $$.dc('wfrm', mth); while (rd <= lwf) { let wk = $$.dc('wk', wfrm).text(`${($bct.wk || "W")} ${fdt(rd, "dd.MM.yy")}`); wk.click({ rd: new Date(rd) }, function (ev) { ev.stopPropagation(); let tgt = fdt(ev.data.rd, 'yy-MM-dd'); $bam.renderbt(tgt, 'w'); mth.siblings().rC('selected').find('.wk').rC('selected'); mth.aC('selected').find('.wk').rC('selected'); wk.aC('selected'); }); rd.setDate(rd.getDate() + 7); } } } lf.ldng(0); }, renderbt: function (tgt, mode) { let invlst = $fis.frm_list().ldng(1), invfrm = $$.dc('invfrm', invlst).aC('md' + mode); let lf = $fis.lf(); $ocms.postXT({ url: $ocms.url('bam/btl'), data: { mode: mode, tgt: tgt }, success: (response) => { lf.rC('fix').aC('hd'); $$.dc('ovhd', invfrm).append($$.s(response.admin.title)).appendIf($$.sc('note', response.admin.note), ne(response.admin.note, '') !== ''); let ts = $$.tblset({}, invfrm), fd = $bcol.qtl; let thr = $$.tr(ts.hd), haux = $$.th(thr); $.each(fd.fields || [], (ci, cx) => { $$.th(thr).text(cx.label); if (cx.name === 'vat') { $$.th(thr); } }); let ctr = 0, cst = false; $.each(response.bank || [], (ri, rw) => { if (ctr > 0) { cst = !cst; } let tr = $$.tr(ts.bdy).tC('alt', cst); tr.click(function () { lf.rC('fix').aC('hd'); tr.tC('selected').siblings().rC('selected').find('td.av').rC('av'); tr.find('td.av').rC('av'); }); let raux = $$.td(tr, { class: 'raux' }); $.each(fd.fields || [], (ci, cx) => { let td = $$.td(tr).aC(cx.dtype), val = rw[cx.name]; if (typeof cx.dfnc === 'function') { cx.dfnc.call(td, val, rw); } else { switch (cx.type || '') { case 'date': td.text(fdt(rw[cx.name], 'dd.MM.yy')); break; case 'datetime': td.text(fdt(rw[cx.name])); break; case 'html': td.append($$.dc('ctw').html(val)); td.append($$.dc('ttip').html(val)); break; default: td.text(rw[cx.name]); } } switch (typeof cx.title) { case 'function': cx.title.call(td, rw); break; case 'string': td.attr('title', cs.title); } }); }); }, complete: () => { invlst.ldng(0); } }); }, renderLst: function () { let mode = 'l'; //dummy for now let bslst = $fis.frm_list(true, true).ldng(1), bamfrm = $$.dc('bamfrm', bslst).aC('md' + mode); let lf = $fis.lf(); $bam.eM(true); $ocms.postXT({ url: $ocms.url('bam/qtl'), data: { mode: mode }, success: (response) => { lf.rC('fix').aC('hd'); $$.dc('ovhd', bamfrm).append($$.s(response.admin.title)).appendIf($$.sc('note', response.admin.note), ne(response.admin.note, '') !== ''); let ts = $$.tblset({}, bamfrm), fd = $bcol.qtl; let thr = $$.tr(ts.hd); let haux = $$.th(thr); $.each(fd.fields || [], (ci, cx) => { $$.th(thr).text(cx.label); }); $.each(response.bs || [], (ri, rw) => { let tr = $$.tr(ts.bdy, { id: `bt${rw.taID}` }); tr.click(function () { lf.rC('fix').aC('hd'); tr.toggleClass('selected').siblings().rC('selected').find('td.av').rC('av'); tr.find('td.av').rC('av'); if (tr.is('.selected') === true) { $bam.iMn(rw); } else { $bam.eM(true); } }); let raux = $$.td(tr, { class: 'raux' }); $.each(fd.fields || [], (ci, cx) => { let td = $$.td(tr).aC(cx.dtype), sel, o; if ((cx.type || '') === 'select') { td.text((cx.url || {})[rw[cx.name]] || ''); } else { td.text(rw[cx.name]) } }); }); }, complete: () => { bslst.ldng(0); } }); }, ubs : function () { $ocms.dlgform($bcol.bsu, { title: $bcol.bsu.label_sng || '', submit: function (e) { var c = $(this).ldng(1); var qs = new FormData(); let fi = c.find(':input[name="bsu"]'); if (fi.length > 0 && fi[0].files.length > 0) { $.each(fi[0].files, function (f, fl) { qs.append('bsu', fl); }); $ocms.postXT({ url: $ocms.url('bam/up'), data: qs, success: function (response) { c.trigger('modal_close'); }, error: function () { alert($t.l17); }, complete: function () { c.ldng(0); $bam.renderLst(); }, timeout: 0 }); } else { options.success.call(this, qs); c.trigger('modal_close'); } }, typedvalues: true }); }, smd: (taid) => { if (confirm($bct.smdc)) { $ocms.postXT({ url: $ocms.url('bam/smd'), data: { taid: taid }, success: (response) => { $(`#bt${taid}`).aC('mdone'); } }); } }, ati: (taid) => { let f = $$.dc('form'), fb = $$.dc('form-body',f), fg = $$.dc('form-group', fb), kl = $$.lbl($bct.ino, { for: 'rno' }).appendTo(fg), i = $$.i({ id: 'rno', placeholder: 'Rechnungs-Nummer' }).appendTo(fg); let r = $$.dc('rfrm bam', fb); i.change(function (ev) { $ocms.postXT({ url: $ocms.url('bam/vfi'), data: { invid: i.val() }, success: (response) => { r.empty(); if (response.length > 0) { $$.dc('nfo', r, $bct.fi); $.each(response, function (ri, rx) { let v = $$.dc('rinv', r, rx.InvoiceId).data('inv', rx).click(function (ex) { $(this).addClass('selected').siblings('.rinv').removeClass('selected'); }); $$.dc('invsta', v).rwText(rx.SendToAddress); }); } else { r.text($bct.ni); } } }); }); $ocms.dlg(f, { title: $bct.ati, size: [500, 700], confirm: function (e) { let c = $(this), inv = c.find('.rinv.selected:first'); if (inv.length === 1) { let rx = inv.data('inv') || {}; if (confirm(string($bct.atic, [rx.InvoiceId]))) { $ocms.postXT({ url: $ocms.url('bam/ati'), data: { taid: taid, iid: rx.Id }, success: (response) => { $(`#bt${taid}`).aC('mdone'); c.trigger('modal_close'); } }); } } } }); } } let $$bam = { init2: $bam.init2, auth: {} }; export default $$bam;