287 lines
14 KiB
JavaScript
287 lines
14 KiB
JavaScript
|
|
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('<hr />');
|
|
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; |