let gi = (n, c) => $$.sc('glyphicon glyphicon-' + n).aC(c); let $inv = {}, $req = { init2: function (type, options) { type = type || 'inv'; 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; $req.init3(type, options); }); }, init3: async function (type, options) { let cf = $fis.cf(true), lf = $fis.lf(true); $('#topbar').ocmsmenu([]); //{ lbl: 'home', fnc: $inv.init3 } $('#activemodule').text($rct.mdl); await $fis.prepAuth('fds_req,fds_inv,fds_reminder'); let pa = [(async () => { if ($fis.isAuth('fds_req', 1) === true) { $req.prepLst(''); lf.aC('fix'); //initially should be shown - for convenience } })(), new Promise((resolve, reject) => { lf.find('div.oreq2').aC('selected'); $req.renderreq(fdt(new Date(), 'yy-MM-dd'), 'r'); resolve(); })]; await Promise.all(pa); }, 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 opn = $$.dc('mth oreq', lf).text($rct.or).click(function (ev) { let mth = $(this); ev.stopPropagation(); mth.siblings().rC('selected'); if (mth.is('.selected') === true) { mth.tC('selected'); $req.renderreq(fdt(new Date(), 'yy-MM-dd'), 'o'); } mth.aC('selected'); }); let opnr = $$.dc('mth oreq2', lf).text($rct.orr).click(function (ev) { let mth = $(this); ev.stopPropagation(); mth.siblings().rC('selected'); if (mth.is('.selected') === true) { mth.tC('selected'); $req.renderreq(fdt(new Date(), 'yy-MM-dd'), 'r'); } mth.aC('selected'); }); let osb = $$.i({ placeholder: $rct.rn }).appendTo($$.dc('mth oreqn', 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'); $req.renderreq('n:' + v, 's'); mth.val(''); } }); 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($rct.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($rct.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'); $req.renderreq(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(($rct.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'); $req.renderreq(tgt, 'w'); mth.siblings().rC('selected').find('.wk').rC('selected'); mth.aC('selected').find('.wk').rC('selected'); wk.aC('selected'); }); let wkdl = $$.dc('wkdl', wk).append($$.sc('ico glyphicon glyphicon-compressed')); if ($fis.isAuth('fds_inv', 2) === true) { wkdl.click({ rd: new Date(rd) }, function (ev) { ev.stopPropagation(); let tgt = fdt(ev.data.rd, 'yy-MM-dd'); $req.downloadzip.call(tgt, 'w'); }); } rd.setDate(rd.getDate() + 7); } } } lf.ldng(0); }, renderreq: 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('req/reql'), 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 = $rcol.req; 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.requests || [], (ri, rw) => { if (ctr > 0 && ctr !== rw.ParentServiceRequestId) { cst = !cst; } let tr = $$.tr(ts.bdy).tC('alt', cst); ctr = rw.ParentServiceRequestId; 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'); }); tr.tC('child', rw.isChild); let raux = $$.td(tr, { class: 'raux' }); if (bool(rw.open, false) === true) { $$.dc('ihd ilbtn', raux).append(gi('eye-close', 'ico')).click({ id: rw.Id }, $req.tHd); } $$.dc('iitm ilbtn', raux).append(gi('list', 'ico')).click({ id: rw.Id }, $req.showitm); if ($fis.isAuth('fds_inv', 2) === true) { $$.dc('invc ilbtn', raux).append(gi('edit', 'ico')).click({ id: rw.Id }, $inv.cInv); } $.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 (cx.name || '') { case 'State': td.text($rct.sts[val || '-']); break; case 'Name': td.aC(cx.name.toLowerCase()); break; case 'vat': $$.sel().appendTo($$.td(tr, { class: 'vsel' })).click(function (ev) { ev.stopPropagation(); }).append([$$.opt('19,0 %', '19,0 %'), $$.opt('16,0 %', '16,0 %'), $$.opt('0,0 %', '0,0 %')]).val(rw[cx.name]).change().change({ frm: invfrm, tgt: tgt, mode: mode, id: rw.Id, td: td }, $req.setvat); td.tC('hl', rw[cx.name].substr(0, 2) !== '19').click(function (ev) { ev.stopPropagation(); $(this).tC('av'); }); break; case 'balance': td.aC('sh_' + (rw.SollHaben || '').toLowerCase()); break; case 'InvoiceId': td.aC('keep'); break; } switch (typeof cx.title) { case 'function': cx.title.call(td, rw); break; case 'string': td.attr('title', cs.title); } }); }); }, complete: () => { invlst.ldng(0); } }); }, tHd: function (ev) { let tr = $(this).closest('tr'); ev.stopPropagation(); if (tr.is('.selected') === false) { return; } else if (confirm($rct.cthd)){ $ocms.postXT({ url: $ocms.url('req/rthd'), data: { id: ev.data.id }, success: (response) => { if (response.id === ev.data.id && bool(response.visible, true) === false) { if (tr.is('.tbhd') === false) { setTimeout(() => { tr.filter('.tbhd').remove(); }, 15000); // by the filter, it can be prevented by removing the class } tr.aC('tbhd'); } else if (response.id === ev.data.id) { tr.rC('tbhd'); } } }); } }, showitm: function (ev) { let tr = $(this).closest('tr'); ev.stopPropagation(); if (tr.is('.selected') === false) { return; } let fr = $$.dc('rfrm').ldng(1); $ocms.postXT({ url: $ocms.url('req/pget'), data: { id: ev.data.id }, success: (response) => { $ocms.postXT({ url: $ocms.url('req/get'), data: { id: ev.data.id, mode: 'ful' }, success: (response) => { let rqa = {}; if ((response.requests || []).length < 1) { fr.text($rct.nd); } else { let rq = $$.dc('srq', fr); let rif = $$.tblset({ class: 'if' }, rq); $.each(response.requests || [], function (ri, rx) { if (ri > 0) { $$.tr(rif.bdy).aC('sep').append($$.td({ colspan: 6 })); } let rtr = $$.tr(rif.bdy).aC('title'), cl = $rcol.itm.lbl(); let worknotes = $inv.worknotes(rx); $$.td(rtr, { colspan: 6 }).append([$$.s($rcol.req.label_sng), $$.sc('eid', rx.ExternalId), $$.sc('nme', fdt(rx.WorkDoneAt,'dd.MM.yy') + ': ' + worknotes.ne(rx.Name))]); let sdh = $$.tr(rif.bdy).aC('shd').append([$$.td(), $$.td(cl.NameOrNumber), $$.td(cl.Type), $$.td(cl.net_pos), $$.td(cl.bo_pos), $$.td(cl.vat)]); /* header row for items */ $.each(rx.items || [], (ii, ix) => { let sid = ix.ServiceRequestId; let itr = $$.tr(rif.bdy, { id: 'itm' + ix.Id }).aC(ix.Type); $$.td(itr).aC('ico'); $$.td(itr).text(ix.NameOrNumber); $$.td(itr).text(ix.Type); $$.td(itr).aC('currency').text(ix.net_pos); $$.td(itr).aC('currency').text(ix.bo_pos); $$.td(itr).aC('num').text(ix.vat); }); }); } }, error: () => { fr.text($t.t12); }, complete: () => { fr.ldng(0); } }); }, error: () => { fr.text($t.t12); fr.ldng(0); } }); $ocms.dlg(fr, { width: 1000 }); } } let $$req = { init2: $req.init2, auth: {} }; export default $$req;