1872 lines
88 KiB
JavaScript
1872 lines
88 KiB
JavaScript
// Invoice generator
|
|
// Animation scripts
|
|
// elements
|
|
// function get_elements() {
|
|
// buttons
|
|
var btn_defaults_inv = document.getElementById("btn_defaults_inv");
|
|
var btn_defaults_est = document.getElementById("btn_defaults_est");
|
|
var btn_defaults_pay = document.getElementById("btn_defaults_pay");
|
|
// form type, type divs
|
|
var mycurrency = '';
|
|
var currency = document.getElementById("mycurrency");
|
|
var div_currency = document.getElementById('div_currency_else');
|
|
var currency_else = document.getElementById("currency_else");
|
|
var my_type_1 = document.getElementById("my_form_type_1");
|
|
var my_type_2 = document.getElementById("my_form_type_2");
|
|
var div_inv = document.getElementById("div_INVOICE");
|
|
var div_est = document.getElementById("div_ESTIMATE");
|
|
var div_pay = document.getElementById("div_PAYMENT-PLAN");
|
|
// my business
|
|
var my_b_name = document.getElementById('my_b_name');
|
|
var my_b_address1 = document.getElementById('my_b_address1');
|
|
var my_b_address2 = document.getElementById('my_b_address2');
|
|
var my_b_address3 = document.getElementById('my_b_address3');
|
|
var my_b_address4 = document.getElementById('my_b_address4');
|
|
var my_b_address5 = document.getElementById('my_b_address5');
|
|
var my_b_email = document.getElementById('my_b_email');
|
|
var my_b_number = document.getElementById('my_b_number');
|
|
// my business bank account
|
|
var bank_name = document.getElementById('bank_name');
|
|
var bank_AC_name = document.getElementById('bank_AC_name');
|
|
var bank_AC_no = document.getElementById('bank_AC_no');
|
|
var bank_SC = document.getElementById('bank_SC');
|
|
// contracted business
|
|
var to_b_name = document.getElementById('to_b_name');
|
|
var to_b_code = document.getElementById('to_b_code');
|
|
var to_b_address1 = document.getElementById('to_b_address1');
|
|
var to_b_address2 = document.getElementById('to_b_address2');
|
|
var to_b_address3 = document.getElementById('to_b_address3');
|
|
var to_b_address4 = document.getElementById('to_b_address4');
|
|
var to_b_address5 = document.getElementById('to_b_address5');
|
|
var to_b_email = document.getElementById('to_b_email');
|
|
var to_b_phone = document.getElementById('to_b_phone');
|
|
// client receiving services
|
|
var client_name = document.getElementById('client_name');
|
|
var client_contact = document.getElementById('client_contact');
|
|
var client_address1 = document.getElementById('client_address1');
|
|
var client_address2 = document.getElementById('client_address2');
|
|
var client_address3 = document.getElementById('client_address3');
|
|
var client_address4 = document.getElementById('client_address4');
|
|
// invoice
|
|
// billable rate and durations
|
|
var inv_date = document.getElementById('inv_date');
|
|
// var div_inv_goods = document.getElementById('div_inv_goods');
|
|
var div_inv_goods = document.getElementById('tbl_inv_goods');
|
|
var inv_type_goods = document.getElementById('inv_type_goods');
|
|
var inv_goods_n = document.getElementById('inv_goods_n');
|
|
var inv_goods_max = 1;
|
|
var div_inv_services = document.getElementById('div_inv_services');
|
|
// var div_inv_services = document.getElementById('tbl_inv_services');
|
|
var inv_type_services = document.getElementById('inv_type_services');
|
|
var inv_services_n = document.getElementById('inv_services_n');
|
|
var inv_services_max = 1;
|
|
var inv_services_children = [1];
|
|
var inv_type_both = document.getElementById('inv_type_both');
|
|
// estimate
|
|
// billable rate and durations
|
|
var est_date = document.getElementById('est_date');
|
|
// var div_est_goods = document.getElementById('div_est_goods');
|
|
var div_est_goods = document.getElementById('tbl_est_goods');
|
|
var est_type_goods = document.getElementById('est_type_goods');
|
|
var est_goods_n = document.getElementById('est_goods_n');
|
|
var est_goods_max = 1;
|
|
var div_est_services = document.getElementById('div_est_services');
|
|
// var div_est_services = document.getElementById('tbl_est_services');
|
|
var est_type_services = document.getElementById('est_type_services');
|
|
var est_services_n = document.getElementById('est_services_n');
|
|
var est_services_max = 1;
|
|
var est_services_children = [1];
|
|
var est_type_both = document.getElementById('est_type_both');
|
|
// payment plan
|
|
var pay_n = document.getElementById('pay_n');
|
|
var pay_discretisation = document.getElementById('pay_discretisation');
|
|
var div_pay_type = document.getElementById('div_pay_type');
|
|
var paytype_linear = document.getElementById('paytype_linear');
|
|
var paytype_multiplier = document.getElementById('paytype_multiplier');
|
|
var paytype_mult_max = 1
|
|
var paytype_random = document.getElementById('paytype_random');
|
|
var paytype_random_max = 1
|
|
var div_paytype_linear = document.getElementById('div_paytype_linear');
|
|
var div_paytype_multiplier = document.getElementById('div_paytype_multiplier');
|
|
var div_paytype_random = document.getElementById('div_paytype_random');
|
|
var div_payscheme = document.getElementById('div_payscheme');
|
|
var div_payscheme_linear = document.getElementById('div_payscheme_linear');
|
|
var div_payscheme_multiplier = document.getElementById('div_payscheme_multiplier');
|
|
var payscheme_linear = document.getElementById('payscheme_linear');
|
|
var payscheme_multiplier = document.getElementById('payscheme_multiplier');
|
|
var payscheme_mult_max = 1;
|
|
var pay_disc_type_absolute = document.getElementById('pay_disc_type_absolute');
|
|
var pay_disc_type_relative = document.getElementById('pay_disc_type_relative');
|
|
// }
|
|
// get_elements();
|
|
//document.onload = function() {
|
|
function reload_page() {
|
|
// let my_types = ['inv', 'est'];
|
|
for (let i = 1; i <= max(inv_services_max, est_services_max); i++) {
|
|
change_incremental_phrase('inv', i);
|
|
change_incremental_phrase('est', i);
|
|
change_rate_discretisation('inv', i);
|
|
change_rate_discretisation('est', i);
|
|
}
|
|
update_pay_durndisc();
|
|
show_services('inv');
|
|
show_services('est');
|
|
show_goods_services('inv');
|
|
show_goods_services('est');
|
|
show_paytypes();
|
|
show_schemes();
|
|
update_currency();
|
|
change_form_type(1);
|
|
}
|
|
|
|
reload_page();
|
|
// toggle_incremental_weeks('inv', 'Yes', 1);
|
|
// toggle_incremental_weeks('est', 'Yes', 1);
|
|
|
|
// element methods
|
|
btn_defaults_inv.addEventListener("click", function () {
|
|
fill_default();
|
|
});
|
|
btn_defaults_est.addEventListener("click", function () {
|
|
fill_default("ESTIMATE");
|
|
});
|
|
btn_defaults_pay.addEventListener("click", function () {
|
|
fill_default("PAYMENT-PLAN");
|
|
});
|
|
|
|
function change_form_type(input_id) {
|
|
let mytype = document.getElementById("my_form_type_" + input_id);
|
|
console.log('mytype = ');
|
|
console.log(mytype);
|
|
set_select(document.getElementById("my_form_type_" + (input_id == 1 ? 2 : 1)), get_select_text(mytype));
|
|
let my_options = mytype.getElementsByTagName('option');
|
|
if (mytype.value == '0' || mytype.value == '') {
|
|
for (let i = 1; i < my_options.length; i++) {
|
|
let temp_div = document.getElementById("div_" + my_options[i].innerText);
|
|
temp_div.style.display = 'inline-block';
|
|
}
|
|
} else {
|
|
for (let i = 1; i < my_options.length; i++) {
|
|
if (mytype.value == i.toString()) {
|
|
let temp_div = document.getElementById("div_" + my_options[i].innerText);
|
|
temp_div.style.display = 'inline-block';
|
|
} else {
|
|
let temp_div = document.getElementById("div_" + my_options[i].innerText);
|
|
temp_div.style.display = 'none';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function store() {
|
|
let formtype = get_select_text(my_type_1);
|
|
localStorage.setItem('form_type', formtype);
|
|
localStorage.setItem('currency', mycurrency);
|
|
// Your business
|
|
localStorage.setItem('my_b_name', my_b_name.value);
|
|
localStorage.setItem('my_b_address1', my_b_address1.value);
|
|
localStorage.setItem('my_b_address2', my_b_address2.value);
|
|
localStorage.setItem('my_b_address3', my_b_address3.value);
|
|
localStorage.setItem('my_b_address4', my_b_address4.value);
|
|
localStorage.setItem('my_b_address5', my_b_address5.value);
|
|
localStorage.setItem('my_b_email', my_b_email.value);
|
|
localStorage.setItem('my_b_number', my_b_number.value);
|
|
// Your business' bank
|
|
localStorage.setItem('bank_name', bank_name.value);
|
|
localStorage.setItem('bank_AC_name', bank_AC_name.value);
|
|
localStorage.setItem('bank_AC_no', bank_AC_no.value);
|
|
localStorage.setItem('bank_SC', bank_SC.value);
|
|
// Recipient business
|
|
localStorage.setItem('to_b_name', to_b_name.value);
|
|
localStorage.setItem('to_b_code', to_b_code.value);
|
|
localStorage.setItem('to_b_address1', to_b_address1.value);
|
|
localStorage.setItem('to_b_address2', to_b_address2.value);
|
|
localStorage.setItem('to_b_address3', to_b_address3.value);
|
|
localStorage.setItem('to_b_address4', to_b_address4.value);
|
|
localStorage.setItem('to_b_address5', to_b_address5.value);
|
|
localStorage.setItem('to_b_email', to_b_email.value);
|
|
localStorage.setItem('to_b_phone', to_b_phone.value);
|
|
// Recipient client
|
|
localStorage.setItem('client_name', client_name.value);
|
|
localStorage.setItem('client_contact', client_contact.value);
|
|
localStorage.setItem('client_address1', client_address1.value);
|
|
localStorage.setItem('client_address2', client_address2.value);
|
|
localStorage.setItem('client_address3', client_address3.value);
|
|
localStorage.setItem('client_address4', client_address4.value);
|
|
|
|
let dogoods, doservices;
|
|
switch (formtype) {
|
|
case 'INVOICE':
|
|
localStorage.setItem('date', inv_date.value);
|
|
dogoods = inv_type_goods.checked;
|
|
localStorage.setItem('bool_goods', dogoods);
|
|
if (dogoods) {
|
|
let mygoods_n = [];
|
|
let mygoods_q = [];
|
|
let mygoods_v = [];
|
|
let ngoods = Number(inv_goods_n.value);
|
|
localStorage.setItem('goods_n', ngoods.toString())
|
|
for (let i = 1; i <= ngoods; i++) {
|
|
let si = i.toString();
|
|
mygoods_n.push(document.getElementById('inv_name_g' + si).value);
|
|
mygoods_q.push(document.getElementById('inv_quantity_g' + si).value);
|
|
mygoods_v.push(document.getElementById('inv_value_g' + si).value);
|
|
}
|
|
localStorage.setObj('mygoods_n', mygoods_n);
|
|
localStorage.setObj('mygoods_q', mygoods_q);
|
|
localStorage.setObj('mygoods_v', mygoods_v);
|
|
}
|
|
doservices = inv_type_services.checked;
|
|
localStorage.setItem('bool_services', doservices);
|
|
if (doservices) {
|
|
let nservices = Number(inv_services_n.value);
|
|
localStorage.setItem('services_n', nservices.toString());
|
|
let rate_disc = [];
|
|
// let durn_disc = [];
|
|
let rate = [];
|
|
let sub_quantity = [];
|
|
let description = [];
|
|
let quantity = [];
|
|
localStorage.setItem('week1', document.getElementById('inv_week1_s1').value);
|
|
for (let i = 1; i <= nservices; i++) {
|
|
let si = i.toString();
|
|
let rate_disc_quantity = document.getElementById('inv_ratedisc_quantity_s' + si).value;
|
|
let temp_discrate = get_select_text(document.getElementById('inv_disc_rate_s' + si)).toUpperCase();
|
|
if (rate_disc_quantity == "1") {
|
|
rate_disc.push([temp_discrate, temp_discrate + 'S']); // + 's'
|
|
} else {
|
|
let temp = 'x' + rate_disc_quantity + ' ' + temp_discrate + 'S';
|
|
rate_disc.push([temp, temp]);
|
|
}
|
|
rate.push(document.getElementById('inv_rate_s' + si).value);
|
|
sub_quantity.push(document.getElementById('inv_sub_quantity_s' + si).value);
|
|
description.push([]);
|
|
quantity.push([]);
|
|
for (let j = 1; j <= Number(sub_quantity[i - 1]); j++) {
|
|
let sj = j.toString();
|
|
description[i - 1].push(document.getElementById('inv_description_s' + si + '_' + sj).value);
|
|
quantity[i - 1].push(document.getElementById('inv_quantity_s' + si + '_' + sj).value);
|
|
}
|
|
}
|
|
localStorage.setObj('ratediscs', rate_disc);
|
|
// localStorage.setObj('durndiscs', durn_disc);
|
|
localStorage.setObj('rates', rate);
|
|
// localStorage.setObj('durn_disc_qs', durn_disc_quantity);
|
|
localStorage.setObj('descriptions', description);
|
|
localStorage.setObj('quantities', quantity);
|
|
localStorage.setObj('subservice_quantities', sub_quantity);
|
|
} else {
|
|
let temp = document.getElementById('inv_name_g1').value;
|
|
localStorage.setItem('week1', temp.substring(0, min(8, temp.length)).toUpperCase());
|
|
}
|
|
break;
|
|
case 'ESTIMATE':
|
|
localStorage.setItem('date', est_date.value);
|
|
dogoods = est_type_goods.checked;
|
|
localStorage.setItem('bool_goods', dogoods);
|
|
if (dogoods) {
|
|
let mygoods_n = [];
|
|
let mygoods_q = [];
|
|
let mygoods_v = [];
|
|
let ngoods = Number(est_goods_n.value);
|
|
localStorage.setItem('goods_n', ngoods.toString())
|
|
for (let i = 1; i <= ngoods; i++) {
|
|
let si = i.toString();
|
|
mygoods_n.push(document.getElementById('est_name_g' + si).value);
|
|
mygoods_q.push(document.getElementById('est_quantity_g' + si).value);
|
|
mygoods_v.push(document.getElementById('est_value_g' + si).value);
|
|
}
|
|
localStorage.setObj('mygoods_n', mygoods_n);
|
|
localStorage.setObj('mygoods_q', mygoods_q);
|
|
localStorage.setObj('mygoods_v', mygoods_v);
|
|
}
|
|
doservices = est_type_services.checked;
|
|
localStorage.setItem('bool_services', doservices);
|
|
if (doservices) {
|
|
let nservices = Number(est_services_n.value);
|
|
localStorage.setItem('services_n', nservices.toString());
|
|
let rate_disc = [];
|
|
// let durn_disc = [];
|
|
let rate = [];
|
|
let sub_quantity = [];
|
|
let description = [];
|
|
let quantity = [];
|
|
localStorage.setItem('week1', document.getElementById('est_week1_s1').value);
|
|
for (let i = 1; i <= nservices; i++) {
|
|
let si = i.toString();
|
|
let rate_disc_quantity = document.getElementById('est_ratedisc_quantity_s' + si).value;
|
|
let temp_discrate = get_select_text(document.getElementById('est_disc_rate_s' + si)).toUpperCase();
|
|
if (rate_disc_quantity == "1") {
|
|
rate_disc.push([temp_discrate, temp_discrate + 'S']); // + 's'
|
|
} else {
|
|
let temp = 'x' + rate_disc_quantity + ' ' + temp_discrate + 'S';
|
|
rate_disc.push([temp, temp]);
|
|
}
|
|
// durn_disc.push(get_select_text(document.getElementById('est_disc_durn_s' + si)));
|
|
rate.push(document.getElementById('est_rate_s' + si).value);
|
|
sub_quantity.push(document.getElementById('est_sub_quantity_s' + si).value);
|
|
description.push([]);
|
|
quantity.push([]);
|
|
for (let j = 1; j <= Number(sub_quantity[i - 1]); j++) {
|
|
let sj = j.toString();
|
|
description[i - 1].push(document.getElementById('est_description_s' + si + '_' + sj).value);
|
|
quantity[i - 1].push(document.getElementById('est_quantity_s' + si + '_' + sj).value);
|
|
}
|
|
}
|
|
localStorage.setObj('ratediscs', rate_disc);
|
|
// localStorage.setObj('durndiscs', durn_disc);
|
|
localStorage.setObj('rates', rate);
|
|
// localStorage.setObj('durn_disc_qs', durn_disc_quantity);
|
|
localStorage.setObj('descriptions', description);
|
|
localStorage.setObj('quantities', quantity);
|
|
localStorage.setObj('subservice_quantities', sub_quantity);
|
|
} else {
|
|
let temp = document.getElementById('est_name_g1').value;
|
|
localStorage.setItem('week1', temp.substring(0, min(8, temp.length)).toUpperCase());
|
|
}
|
|
break;
|
|
case 'PAYMENT-PLAN':
|
|
let npayments = Number(pay_n.value);
|
|
localStorage.setItem('payments_n', npayments.toString());
|
|
localStorage.setItem('description', document.getElementById('pay_description').value);
|
|
localStorage.setItem('week1', localStorage.description.substring(0, min(12, localStorage.description.length)).toUpperCase());
|
|
if (paytype_linear.checked) {
|
|
localStorage.setItem('paytype', 'linear');
|
|
localStorage.setItem('pay_value_unit', document.getElementById('pay_linear_unit').value);
|
|
} else if (paytype_multiplier.checked) {
|
|
localStorage.setItem('paytype', 'multiplier');
|
|
localStorage.setItem('pay_value_unit', document.getElementById('pay_mult_unit').value);
|
|
let pay_multiplier = [];
|
|
for (let i = 1; i <= npayments; i++) {
|
|
let si = i.toString();
|
|
pay_multiplier.push(document.getElementById('paytype_mult_' + si).value);
|
|
}
|
|
localStorage.setObj('multiplier', pay_multiplier);
|
|
} else {
|
|
localStorage.setItem('paytype', 'random');
|
|
let pay_value = [];
|
|
for (let i = 1; i <= npayments; i++) {
|
|
let si = i.toString();
|
|
pay_value.push(document.getElementById('paytype_value_' + si).value);
|
|
}
|
|
localStorage.setObj('value', pay_value);
|
|
}
|
|
let date = [date2str(new Date(document.getElementById('pay_date').value))];
|
|
let discretisation = get_select_text(pay_discretisation);
|
|
let disc_quantity = Number(document.getElementById('pay_disc_quantity').value);
|
|
if (payscheme_linear.checked) {
|
|
localStorage.setItem('payscheme', 'linear');
|
|
if (npayments > 1) {
|
|
for (let i = 2; i <= npayments; i++) {
|
|
date.push(date2str(increment_date(new Date(date[i - 2]), discretisation, disc_quantity)));
|
|
}
|
|
}
|
|
// payscheme = 'linear';
|
|
} else { // if payscheme_multiple.checked
|
|
localStorage.setItem('payscheme', 'multiple');
|
|
// payscheme = 'multiple';
|
|
if (pay_disc_type_absolute.checked) {
|
|
for (let i = 1; i <= npayments; i++) {
|
|
date.push(date2str(increment_date(new Date(date[0]), discretisation, disc_quantity * document.getElementById('payscheme_mult_' + i.toString()).value)));
|
|
}
|
|
} else { // relative
|
|
for (let i = 1; i <= npayments; i++) {
|
|
date.push(date2str(increment_date(new Date(date[i - 1]), discretisation, disc_quantity * document.getElementById('payscheme_mult_' + i.toString()).value)));
|
|
}
|
|
}
|
|
}
|
|
localStorage.setItem('disc_quantity', disc_quantity.toString());
|
|
localStorage.setItem('discretisation', discretisation);
|
|
localStorage.setObj('dates', date);
|
|
break;
|
|
default:
|
|
// error - please select form type
|
|
break;
|
|
}
|
|
// store_btec_invoice(); // used to work for JLR in emergency - test?
|
|
}
|
|
|
|
function increment_date(date0, discretisation, quantity) {
|
|
// let y0 = Number(date0.substring(0, 4));
|
|
// let m0 = Number(date0.substring(5, 2));
|
|
// let d0 = Number(date0.substring(8, 2));
|
|
let y0 = date0.getFullYear();
|
|
let m0 = date0.getMonth();
|
|
let d0 = date0.getDate();
|
|
// let new_date = '';
|
|
switch (discretisation) {
|
|
case 'Year':
|
|
return new Date(y0 + quantity, m0, d0);
|
|
case 'Month':
|
|
return new Date(y0, m0 + quantity, d0);
|
|
case 'Week':
|
|
return new Date(y0, m0, d0 + quantity * 7);
|
|
default: // case 'Day':
|
|
return new Date(y0, m0, d0 + quantity);
|
|
}
|
|
}
|
|
|
|
function date2str(date_in) {
|
|
return date_in.getFullYear().toString() + '-' + (date_in.getMonth() + 1).toString().padStart(2, '0') + '-' + date_in.getDate().toString().padStart(2, '0');
|
|
}
|
|
|
|
Storage.prototype.setObj = function(key, obj) {
|
|
return this.setItem(key, JSON.stringify(obj))
|
|
}
|
|
Storage.prototype.getObj = function(key) {
|
|
return JSON.parse(this.getItem(key))
|
|
}
|
|
|
|
function store_btec_invoice() {
|
|
localStorage.setItem('rate', document.getElementById('inv_rate_s1').value);
|
|
localStorage.setItem('date', inv_date.value);
|
|
|
|
let nweeks = document.getElementById('inv_durndisc_quantity_s1').value;
|
|
localStorage.setItem('nweeks', nweeks);
|
|
localStorage.setItem('week1', document.getElementById('inv_ratedisc_quantity_s1').value);
|
|
localStorage.setItem('hours1', document.getElementById('inv_quantity_s1_1').value);
|
|
if (nweeks > 1) {
|
|
localStorage.setItem('hours2', document.getElementById('inv_quantity_s1_2').value);
|
|
}
|
|
if (nweeks > 2) {
|
|
localStorage.setItem('hours3', document.getElementById('inv_quantity_s1_3').value);
|
|
}
|
|
if (nweeks > 3) {
|
|
localStorage.setItem('hours4', document.getElementById('inv_quantity_s1_4').value);
|
|
}
|
|
if (nweeks == 5) {
|
|
localStorage.setItem('hours5', document.getElementById('inv_quantity_s1_5').value);
|
|
}
|
|
}
|
|
|
|
function fill_default(mytype = "INVOICE") {
|
|
// set_form_type(mytype);
|
|
set_select(my_type_1, mytype);
|
|
// set_select(my_type_2, mytype); // redundant?
|
|
change_form_type(1);
|
|
fill_defaults_me();
|
|
fill_defaults_JLR();
|
|
// fill_defaults_demo();
|
|
currency.value = '£';
|
|
switch (mytype) {
|
|
case "INVOICE":
|
|
fill_defaults_inv();
|
|
break;
|
|
case "ESTIMATE":
|
|
fill_defaults_est();
|
|
break;
|
|
case "PAYMENT-PLAN":
|
|
fill_defaults_pay();
|
|
break;
|
|
}
|
|
}
|
|
|
|
function fill_defaults_me() {
|
|
my_b_name.value = "Precision And Research Technology Systems Limited";
|
|
my_b_address1.value = "Unit 12a";
|
|
my_b_address2.value = 'Somers Road';
|
|
my_b_address3.value = 'Rugby';
|
|
my_b_address4.value = 'Warwickshire';
|
|
my_b_address5.value = 'CV22 7DH';
|
|
my_b_email.value = 'edward.middletonsmith@gmail.com';
|
|
my_b_number.value = 13587499;
|
|
bank_name.value = 'Starling';
|
|
bank_AC_name.value = "Precision And Research Technology Systems Limited";
|
|
bank_AC_no.value = 40168366;
|
|
bank_SC.value = '60-83-71';
|
|
}
|
|
|
|
function fill_defaults_JLR() {
|
|
to_b_name.value = 'Contechs Technical Resourcing Limited';
|
|
to_b_code.value = 'Contechs';
|
|
to_b_address1.value = '2 Sable Court';
|
|
to_b_address2.value = 'Southfields Business Park';
|
|
to_b_address3.value = 'Basildon';
|
|
to_b_address4.value = 'Essex';
|
|
to_b_address5.value = "SS15 6SR";
|
|
to_b_email.value = 'account@contechs.co.uk';
|
|
to_b_phone.value = "01268 582900";
|
|
client_name.value = "Jaguar Land Rover";
|
|
// Chassis Business Process Analyst
|
|
// client_contact.value = "Andrew Coldwell";
|
|
// client_contact.value = "Pamela Spencer";
|
|
// Component And Systems Software Engineer
|
|
client_contact.value = "Simon Bant";
|
|
client_address1.value = "Banbury Road";
|
|
client_address2.value = "Gaydon";
|
|
client_address3.value = "Warwickshire";
|
|
client_address4.value = "CV35 0RR";
|
|
}
|
|
|
|
function fill_defaults_demo() {
|
|
bank_AC_no.value = 12345678;
|
|
bank_SC.value = '01-23-45';
|
|
to_b_name.value = 'Company Limited';
|
|
to_b_code.value = 'Company';
|
|
to_b_address1.value = '123 Road Drive';
|
|
to_b_address2.value = 'Company Business Park';
|
|
to_b_address3.value = 'Central Region';
|
|
to_b_address4.value = 'Greater London';
|
|
to_b_address5.value = 'W1 9AA';
|
|
to_b_email.value = 'account@company.co.uk';
|
|
to_b_phone.value = "01234 567890";
|
|
client_name.value = "Company Limited";
|
|
client_contact.value = "Mrs. Employer";
|
|
client_address1.value = '123 Road Drive';
|
|
client_address2.value = 'Company Business Park';
|
|
client_address3.value = 'Greater London';
|
|
client_address4.value = 'W1 9AA';
|
|
}
|
|
|
|
function clear_me() {
|
|
my_b_name.value = "";
|
|
my_b_address1.value = "";
|
|
my_b_address2.value = '';
|
|
my_b_address3.value = '';
|
|
my_b_address4.value = '';
|
|
my_b_address5.value = '';
|
|
my_b_email.value = '';
|
|
my_b_number.value = '';
|
|
bank_name.value = '';
|
|
bank_AC_name.value = "";
|
|
bank_AC_no.value = '';
|
|
bank_SC.value = '';
|
|
}
|
|
|
|
function clear_recipient() {
|
|
to_b_name.value = '';
|
|
to_b_code.value = '';
|
|
to_b_address1.value = '';
|
|
to_b_address2.value = '';
|
|
to_b_address3.value = '';
|
|
to_b_address4.value = '';
|
|
to_b_address5.value = "";
|
|
to_b_email.value = '';
|
|
to_b_phone.value = "";
|
|
client_name.value = "";
|
|
client_contact.value = "";
|
|
client_address1.value = "";
|
|
client_address2.value = "";
|
|
client_address3.value = "";
|
|
client_address4.value = "";
|
|
}
|
|
|
|
function clear_invest(this_form_type) {
|
|
let tft = this_form_type;
|
|
document.getElementById(tft + '_date').value = '';
|
|
document.getElementById(tft + '_type_goods').checked = false;
|
|
document.getElementById(tft + '_type_services').checked = false;
|
|
document.getElementById(tft + '_goods_n').value = '1';
|
|
document.getElementById(tft + '_name_g1').value = '';
|
|
document.getElementById(tft + '_value_g1').value = '';
|
|
document.getElementById(tft + '_quantity_g1').value = '';
|
|
let goods_max = 0;
|
|
switch (tft) {
|
|
case 'inv':
|
|
goods_max = inv_goods_max;
|
|
inv_goods_max = 1;
|
|
break;
|
|
case 'est':
|
|
goods_max = est_goods_max;
|
|
est_goods_max = 1;
|
|
break;
|
|
}
|
|
if (goods_max > 1) {
|
|
for (let i = 2; i <= goods_max; i++) {
|
|
document.getElementById('div_' + tft + '_good_' + i.toString()).remove();
|
|
}
|
|
}
|
|
document.getElementById(tft + '_services_n').value = '1';
|
|
set_select(document.getElementById(tft + '_disc_rate_s1'), 'Hour');
|
|
document.getElementById(tft + '_ratedisc_quantity_s1').value = '';
|
|
document.getElementById(tft + '_rate_s1').value = '0';
|
|
set_select(document.getElementById(tft + '_disc_durn_s1'), 'Week');
|
|
document.getElementById(tft + '_durndisc_quantity_s1').value = '1';
|
|
document.getElementById(tft + '_sub_quantity_s1').value = '1';
|
|
document.getElementById(tft + '_increment_yes_s1').checked = true;
|
|
document.getElementById(tft + '_increment_no_s1').checked = false;
|
|
document.getElementById(tft + '_baseID_s1').value = '';
|
|
document.getElementById(tft + '_week1_s1').value = '';
|
|
document.getElementById(tft + '_description_s1_1').value = '';
|
|
document.getElementById(tft + '_quantity_s1_1').value = '';
|
|
let services_max = 0;
|
|
let services_children = [];
|
|
switch (tft) {
|
|
case 'inv':
|
|
services_max = inv_services_max;
|
|
services_children = inv_services_children;
|
|
inv_services_max = 1;
|
|
inv_services_children = [1];
|
|
break;
|
|
case 'est':
|
|
services_max = est_services_max;
|
|
services_children = est_services_children;
|
|
est_services_max = 1;
|
|
est_services_children = [1];
|
|
break;
|
|
}
|
|
if (services_max > 1) {
|
|
for (let i = 2; i <= services_max; i++) {
|
|
document.getElementById('div_' + tft + '_service_' + i.toString()).remove();
|
|
}
|
|
}
|
|
if (services_children[0] > 1) {
|
|
for (let i = 2; i <= services_children[0]; i++) {
|
|
document.getElementById('div_' + tft + '_service_1_' + i.toString()).remove();
|
|
}
|
|
}
|
|
}
|
|
|
|
function clear_pay() {
|
|
pay_n.value = '';
|
|
document.getElementById('pay_description').value = '';
|
|
paytype_linear.checked = true;
|
|
paytype_multiplier.checked = false;
|
|
paytype_random.checked = false;
|
|
document.getElementById('pay_linear_unit').value = '';
|
|
document.getElementById('pay_date').value = '';
|
|
payscheme_linear.checked = true;
|
|
payscheme_multiplier.checked = false;
|
|
if (paytype_mult_max > 1) {
|
|
for (let i = 2; i <= paytype_mult_max; i++) {
|
|
document.getElementById('div_payscheme_mult_' + i.toString()).remove();
|
|
}
|
|
}
|
|
set_select(pay_discretisation, 'Month');
|
|
document.getElementById('pay_disc_quantity').value = '';
|
|
pay_disc_type_absolute.checked = false;
|
|
pay_disc_type_relative.checked = false;
|
|
document.getElementById('payscheme_mult_1').value = '';
|
|
if (payscheme_mult_max > 1) {
|
|
for (let i = 2; i <= payscheme_mult_max; i++) {
|
|
document.getElementById('div_payscheme_mult_' + i.toString()).remove();
|
|
}
|
|
}
|
|
}
|
|
|
|
function clear_form() {
|
|
clear_me();
|
|
clear_recipient();
|
|
clear_invest('inv');
|
|
clear_invest('est');
|
|
clear_pay();
|
|
set_select(my_type_1, '-');
|
|
// set_select(my_type_2, '-'); // redundant?
|
|
reload_page();
|
|
}
|
|
|
|
function fill_defaults_inv() {
|
|
// .dispatchEvent(new Event('change'));
|
|
let nowtime = new Date(Date.now());
|
|
inv_date.value = date2str(new Date(nowtime.getFullYear(), nowtime.getMonth(), -1));
|
|
inv_type_goods.checked = false;
|
|
inv_type_services.checked = true;
|
|
// inv_type_services.dispatchEvent(new Event('change'));
|
|
show_goods_services('inv');
|
|
// inv_services_max = 1;
|
|
// inv_services_children = [1];
|
|
inv_services_n.value = "1";
|
|
show_services('inv');
|
|
document.getElementById('inv_ratedisc_quantity_s1').value = "1";
|
|
set_select(document.getElementById('inv_disc_rate_s1'), "Hour");
|
|
change_rate_discretisation('inv', 1);
|
|
// Chassis Business Process Analyst
|
|
// document.getElementById('inv_rate_s1').value = "20.33";
|
|
// RADs Software Engineer
|
|
document.getElementById('inv_rate_s1').value = "23.94";
|
|
document.getElementById('inv_durndisc_quantity_s1').value = "1";
|
|
set_select(document.getElementById('inv_disc_durn_s1'), 'Week');
|
|
change_rate_discretisation('inv', 1);
|
|
document.getElementById('inv_sub_quantity_s1').value = "4";
|
|
show_discs('inv', "s", 1, 4);
|
|
document.getElementById('inv_increment_yes_s1').checked = true;
|
|
toggle_incremental_weeks('inv', 'Yes', 1);
|
|
document.getElementById('inv_baseID_s1').value = "Contractor services - week ";
|
|
change_incremental_phrase('inv', 1);
|
|
document.getElementById('inv_week1_s1').value = "1";
|
|
change_incremental_phrase('inv', 1);
|
|
for (let i = 1; i <= 4; i++) {
|
|
let si = i.toString();
|
|
document.getElementById('inv_quantity_s1_' + si).value = "40";
|
|
}
|
|
update_currency();
|
|
}
|
|
|
|
// function fill_defaults_inv() {
|
|
// // .dispatchEvent(new Event('change'));
|
|
// let nowtime = new Date(Date.now());
|
|
// inv_date.value = date2str(new Date(nowtime.getFullYear(), nowtime.getMonth(), -1));
|
|
// inv_type_goods.checked = true;
|
|
// show_goods_services('inv');
|
|
// // inv_goods_max = 1;
|
|
// inv_goods_n.value = "4";
|
|
// // inv_goods_n.dispatchEvent(new Event('change'));
|
|
// show_goods('inv');
|
|
// let names = ['chicken', 'pies', '3d printers', "Tierney's used panties"];
|
|
// for (let i = 1; i <= 4; i++) {
|
|
// let si = i.toString();
|
|
// console.log('si = ' + si);
|
|
// document.getElementById('inv_name_g' + si).value = names[i - 1];
|
|
// document.getElementById('inv_value_g' + si).value = (5 * i).toString();
|
|
// document.getElementById('inv_quantity_g' + si).value = (60 / i).toString();
|
|
// }
|
|
// inv_type_services.checked = true;
|
|
// // inv_type_services.dispatchEvent(new Event('change'));
|
|
// show_goods_services('inv');
|
|
// // inv_services_max = 1;
|
|
// // inv_services_children = [1];
|
|
// inv_services_n.value = "2";
|
|
// show_services('inv');
|
|
// document.getElementById('inv_ratedisc_quantity_s1').value = "1";
|
|
// set_select(document.getElementById('inv_disc_rate_s1'), "Day");
|
|
// change_rate_discretisation('inv', 1);
|
|
// document.getElementById('inv_rate_s1').value = "20.33";
|
|
// document.getElementById('inv_durndisc_quantity_s1').value = "6";
|
|
// set_select(document.getElementById('inv_disc_durn_s1'), 'Year');
|
|
// change_rate_discretisation('inv', 1);
|
|
// document.getElementById('inv_sub_quantity_s1').value = "4";
|
|
// show_discs('inv', "s", 1, 4);
|
|
// document.getElementById('inv_increment_yes_s1').checked = true;
|
|
// toggle_incremental_weeks('inv', 'Yes', 1);
|
|
// document.getElementById('inv_baseID_s1').value = "Contractor services - year ";
|
|
// change_incremental_phrase('inv', 1);
|
|
// document.getElementById('inv_week1_s1').value = "1";
|
|
// change_incremental_phrase('inv', 1);
|
|
// for (let i = 1; i <= 4; i++) {
|
|
// let si = i.toString();
|
|
// document.getElementById('inv_quantity_s1_' + si).value = "40";
|
|
// }
|
|
// set_select(document.getElementById('inv_disc_rate_s2'), "Minute");
|
|
// change_rate_discretisation('inv', 2);
|
|
// document.getElementById('inv_rate_s2').value = "30";
|
|
// document.getElementById('inv_durndisc_quantity_s2').value = "3";
|
|
// set_select(document.getElementById('inv_disc_durn_s2'), 'Month');
|
|
// change_rate_discretisation('inv', 2);
|
|
// document.getElementById('inv_sub_quantity_s2').value = "5";
|
|
// show_discs('inv', "s", 2, 5);
|
|
// document.getElementById('inv_increment_yes_s2').checked = true;
|
|
// toggle_incremental_weeks('inv', 'Yes', 2);
|
|
// document.getElementById('inv_baseID_s2').value = "Contractor services - month ";
|
|
// change_incremental_phrase('inv', 2);
|
|
// document.getElementById('inv_week1_s2').value = "9";
|
|
// change_incremental_phrase('inv', 2);
|
|
// for (let i = 1; i <= 5; i++) {
|
|
// let si = i.toString();
|
|
// document.getElementById('inv_quantity_s2_' + si).value = "50";
|
|
// }
|
|
// update_currency();
|
|
// }
|
|
|
|
function fill_defaults_est() {
|
|
let nowtime = new Date(Date.now());
|
|
est_date.value = date2str(new Date(nowtime.getFullYear(), nowtime.getMonth(), -1));
|
|
est_type_goods.checked = true;
|
|
show_goods_services('est');
|
|
est_goods_n.value = "4";
|
|
show_goods('est');
|
|
let names = ['Airplanes', 'Seats', 'Turbines', 'Safety manuals']; // ['pork chops', 'juice', 'European children', 'DMT'];
|
|
for (let i = 1; i <= 4; i++) {
|
|
let si = i.toString();
|
|
console.log('si = ' + si);
|
|
document.getElementById('est_name_g' + si).value = names[i - 1];
|
|
document.getElementById('est_value_g' + si).value = (7 * i).toString();
|
|
document.getElementById('est_quantity_g' + si).value = (1200 / i).toString();
|
|
}
|
|
est_type_services.checked = true;
|
|
show_goods_services('est');
|
|
est_services_n.value = "2";
|
|
show_services('est');
|
|
document.getElementById('est_ratedisc_quantity_s1').value = "1";
|
|
set_select(document.getElementById('est_disc_rate_s1'), "Minute");
|
|
change_rate_discretisation('est', 1);
|
|
document.getElementById('est_rate_s1').value = "200";
|
|
document.getElementById('est_durndisc_quantity_s1').value = "6";
|
|
set_select(document.getElementById('est_disc_durn_s1'), 'Week');
|
|
change_rate_discretisation('est', 1);
|
|
document.getElementById('est_sub_quantity_s1').value = "3";
|
|
show_discs('est', "s", 1, 3);
|
|
document.getElementById('est_increment_yes_s1').checked = true;
|
|
toggle_incremental_weeks('est', 'Yes', 1);
|
|
document.getElementById('est_baseID_s1').value = "Contractor services - week ";
|
|
change_incremental_phrase('est', 1);
|
|
document.getElementById('est_week1_s1').value = "1";
|
|
change_incremental_phrase('est', 1);
|
|
for (let i = 1; i <= 3; i++) {
|
|
let si = i.toString();
|
|
document.getElementById('est_quantity_s1_' + si).value = "19.50";
|
|
}
|
|
set_select(document.getElementById('est_disc_rate_s2'), "Week");
|
|
change_rate_discretisation('est', 2);
|
|
document.getElementById('est_rate_s2').value = "35";
|
|
document.getElementById('est_durndisc_quantity_s2').value = "3";
|
|
set_select(document.getElementById('est_disc_durn_s2'), 'Week');
|
|
change_rate_discretisation('est', 2);
|
|
document.getElementById('est_sub_quantity_s2').value = "2";
|
|
show_discs('est', "s", 2, 2);
|
|
document.getElementById('est_increment_yes_s2').checked = true;
|
|
toggle_incremental_weeks('est', 'Yes', 2);
|
|
document.getElementById('est_baseID_s2').value = "Contractor services - week ";
|
|
change_incremental_phrase('est', 2);
|
|
document.getElementById('est_week1_s2').value = "15";
|
|
change_incremental_phrase('est', 2);
|
|
for (let i = 1; i <= 2; i++) {
|
|
let si = i.toString();
|
|
document.getElementById('est_quantity_s2_' + si).value = "25";
|
|
}
|
|
update_currency();
|
|
}
|
|
|
|
function fill_defaults_pay() {
|
|
// .dispatchEvent(new Event('change'));
|
|
pay_n.value = '24'; // redundant
|
|
show_payschemes();
|
|
document.getElementById('pay_description').value = 'Blackmail Repayments';
|
|
paytype_linear.checked = true;
|
|
paytype_multiplier.checked = false;
|
|
paytype_random.checked = false;
|
|
change_paytype('linear');
|
|
document.getElementById('pay_linear_unit').value = '200';
|
|
let nowtime = new Date(Date.now());
|
|
pay_date.value = date2str(new Date(nowtime.getFullYear(), nowtime.getMonth(), -1));
|
|
payscheme_linear.checked = false;
|
|
payscheme_multiplier.checked = true;
|
|
change_payscheme('multiplier');
|
|
set_select(pay_discretisation, 'Month');
|
|
update_pay_durndisc();
|
|
document.getElementById('pay_disc_quantity').value = '1';
|
|
pay_disc_type_absolute.checked = false;
|
|
pay_disc_type_relative.checked = true;
|
|
change_pay_disctype('relative');
|
|
for (let i = 1; i <= 24; i++) {
|
|
document.getElementById('payscheme_mult_' + i.toString()).value = 1 + ((i - 1) % 3);
|
|
}
|
|
}
|
|
|
|
currency.addEventListener('change', function() {
|
|
show_currency_else();
|
|
// update currency symbols throughout
|
|
update_currency();
|
|
});
|
|
|
|
currency_else.addEventListener('change', function() {
|
|
show_currency_else();
|
|
// update currency symbols throughout
|
|
update_currency();
|
|
});
|
|
|
|
function show_currency_else() {
|
|
mycurrency = get_select_text(currency);
|
|
switch (mycurrency) {
|
|
case 'Other':
|
|
div_currency.style.display = 'inline-block';
|
|
mycurrency = currency_else.value;
|
|
break;
|
|
default:
|
|
div_currency.style.display = 'none';
|
|
// mycurrency = get_select_text(currency);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function update_currency() {
|
|
// let mycurrency = currency.value;
|
|
mycurrency = currency.value;
|
|
// if (mycurrency == '-') {
|
|
// mycurrency = '';
|
|
// }
|
|
// invoice
|
|
for (let i = 1; i <= inv_goods_max; i++) {
|
|
let si = i.toString();
|
|
document.getElementById('inv_value_g' + si).innerText = 'Value [' + mycurrency + ']:';
|
|
}
|
|
for (let i = 1; i <= inv_services_max; i++) {
|
|
let si = i.toString();
|
|
let mylabel = document.getElementById('inv_rate_s' + si + '_label');
|
|
let temp = mylabel.innerText;
|
|
mylabel.innerText = 'Rate [' + mycurrency + temp.substring(temp.indexOf(']'), temp.length);
|
|
}
|
|
// estimate
|
|
for (let i = 1; i <= est_goods_max; i++) {
|
|
let si = i.toString();
|
|
let mylabel = document.getElementById('est_value_g' + si);
|
|
mylabel.innerText = 'Value [' + mycurrency + ']:';
|
|
}
|
|
for (let i = 1; i <= est_services_max; i++) {
|
|
let si = i.toString();
|
|
let mylabel = document.getElementById('est_rate_s' + si + '_label');
|
|
let temp = mylabel.innerText;
|
|
mylabel.innerText = 'Rate [' + mycurrency + temp.substring(temp.indexOf(']'), temp.length);
|
|
}
|
|
// payment-plan
|
|
document.getElementById('pay_linear_unit_label').value = 'Unit payment [' + mycurrency + ']';
|
|
document.getElementById('pay_mult_unit_label').value = 'Unit payment [' + mycurrency + ']';
|
|
if (paytype_multiplier.checked) {
|
|
for (let i = 1; i <= paytype_mult_max; i++) {
|
|
let si = i.toString();
|
|
document.getElementById('paytype_mult_' + si + '_label').innerText = 'Payment ' + si + ' [' + mycurrency + ']';
|
|
}
|
|
}
|
|
if (paytype_random.checked) {
|
|
for (let i = 1; i <= paytype_random_max; i++) {
|
|
let si = i.toString();
|
|
document.getElementById('paytype_value_' + si + '_label').innerText = 'Payment ' + si + ' [' + mycurrency + ']';
|
|
}
|
|
}
|
|
}
|
|
|
|
// invoice
|
|
function show_services(this_form_type) {
|
|
let N = Number(document.getElementById(this_form_type + '_services_n').value);
|
|
let services_max = 0;
|
|
switch (this_form_type) {
|
|
case 'inv':
|
|
services_max = inv_services_max;
|
|
break;
|
|
case 'est':
|
|
services_max = est_services_max;
|
|
break;
|
|
}
|
|
if (N > services_max) {
|
|
for (let i = services_max + 1; i <= N; i++) {
|
|
let si = String(i);
|
|
let child_div = document.createElement('div');
|
|
// child_div.outerHTML = '<div id="div_inv_service_'+ si + '" class="div_service">';
|
|
child_div.id = 'div_' + this_form_type + '_service_' + si;
|
|
// child_div.className = "div_service"; - d
|
|
let child_title = document.createElement('label');
|
|
child_title.className = 'div_title';
|
|
child_title.innerText = 'Service ' + si;
|
|
let child_disc_rate_label = document.createElement('label');
|
|
// child_disc_rate_label.outerHTML = '<label for="inv_disc_rate_s' + si + '">Invoice service rate discretisation:</label>';
|
|
child_disc_rate_label.id = this_form_type + '_disc_rate_s' + si + '_label';
|
|
child_disc_rate_label.innerText = 'Rate discretisation:';
|
|
child_disc_rate_label.className = 'input_label label_title';
|
|
let child_disc_durn_label = document.createElement('label');
|
|
// child_disc_rate_label.outerHTML = '<label for="inv_disc_rate_s' + si + '">Invoice service rate discretisation:</label>';
|
|
child_disc_durn_label.id = this_form_type + '_disc_rate_s' + si + '_label';
|
|
child_disc_durn_label.innerText = 'Duration discretisation:';
|
|
child_disc_durn_label.className = 'input_label label_title';
|
|
// let child_break = document.createElement('br');
|
|
let child_disc_rate_select = document.createElement('select');
|
|
// child_disc_rate_select.outerHTML = '<select id="inv_disc_rate_s' + si+'"></select>'
|
|
child_disc_rate_select.id = this_form_type + '_disc_rate_s' + si;
|
|
let child_disc_durn_select = document.createElement('select');
|
|
// child_disc_durn_select.outerHTML = '<select id="inv_disc_durn_s' + si+'"></select>'
|
|
child_disc_durn_select.id = this_form_type + '_disc_durn_s' + si;
|
|
let child_disc_rate_option_min = document.createElement('option');
|
|
// child_disc_rate_option_min.outerHTML = '<option value="m">Minute</option>';
|
|
child_disc_rate_option_min.value = 'm';
|
|
child_disc_rate_option_min.innerText = 'Minute';
|
|
let child_disc_rate_option_hr = document.createElement('option');
|
|
// child_disc_rate_option_hr.outerHTML = '<option value="h">Hour</option>';
|
|
child_disc_rate_option_hr.value = 'h';
|
|
child_disc_rate_option_hr.innerText = 'Hour';
|
|
child_disc_rate_option_hr.selected = true;
|
|
let child_disc_rate_option_day = document.createElement('option');
|
|
// child_disc_rate_option_day.outerHTML = '<option value="d">Day</option>';
|
|
child_disc_rate_option_day.value = 'd';
|
|
child_disc_rate_option_day.innerText = 'Day';
|
|
let child_disc_rate_option_week = document.createElement('option');
|
|
// child_disc_rate_option_week.outerHTML = '<option value="w">Week</option>';
|
|
child_disc_rate_option_week.value = 'w';
|
|
child_disc_rate_option_week.innerText = 'Week';
|
|
let child_disc_durn_option_day = document.createElement('option');
|
|
// child_disc_durn_option_month.outerHTML = '<option value="M">Month</option>';
|
|
child_disc_durn_option_day.value = 'd';
|
|
child_disc_durn_option_day.innerText = 'Day';
|
|
let child_disc_durn_option_week = document.createElement('option');
|
|
// child_disc_durn_option_month.outerHTML = '<option value="M">Month</option>';
|
|
child_disc_durn_option_week.value = 'w';
|
|
child_disc_durn_option_week.innerText = 'Week';
|
|
let child_disc_durn_option_month = document.createElement('option');
|
|
// child_disc_durn_option_month.outerHTML = '<option value="M">Month</option>';
|
|
child_disc_durn_option_month.value = 'M';
|
|
child_disc_durn_option_month.innerText = 'Month';
|
|
let child_disc_durn_option_year = document.createElement('option');
|
|
// child_disc_durn_option_year.outerHTML = '<option value="y">Year</option>';
|
|
child_disc_durn_option_year.value = 'y';
|
|
child_disc_durn_option_year.innerText = 'Year';
|
|
child_disc_rate_select.appendChild(child_disc_rate_option_min);
|
|
child_disc_rate_select.appendChild(child_disc_rate_option_hr);
|
|
child_disc_rate_select.appendChild(child_disc_rate_option_day);
|
|
child_disc_rate_select.appendChild(child_disc_rate_option_week);
|
|
child_disc_rate_select.onchange = function () {
|
|
change_rate_discretisation(this_form_type, i);
|
|
};
|
|
child_disc_durn_select.appendChild(child_disc_durn_option_day);
|
|
child_disc_durn_select.appendChild(child_disc_durn_option_week);
|
|
child_disc_durn_select.appendChild(child_disc_durn_option_month);
|
|
child_disc_durn_select.appendChild(child_disc_durn_option_year);
|
|
child_disc_durn_select.onchange = function () {
|
|
change_rate_discretisation(this_form_type, i);
|
|
};
|
|
let child_disc_rate_quantity_label = document.createElement('label');
|
|
// child_disc_rate_quantity_label.outerHTML = '<label for="inv_durndisc_quantity_s' + si + '">Quantity of duration discretisations:</label>';
|
|
child_disc_rate_quantity_label.id = this_form_type + '_ratedisc_quantity_s' + si + '_label';
|
|
child_disc_rate_quantity_label.innerText = 'Quantity of rate discretisations per minimum unit rate:';
|
|
child_disc_rate_quantity_label.className = 'input_label label_title';
|
|
let child_disc_rate_quantity = document.createElement('input');
|
|
// child_disc_rate_quantity.outerHTML = '<input type="number" id="inv_durndisc_quantity_s' + si + '" class="rate" placeholder="1" step="1" min="1"/>';
|
|
child_disc_rate_quantity.type = 'number';
|
|
child_disc_rate_quantity.id = this_form_type + '_ratedisc_quantity_s' + si;
|
|
child_disc_rate_quantity.value = "1";
|
|
child_disc_rate_quantity.step = '1';
|
|
child_disc_rate_quantity.min = '1';
|
|
child_disc_rate_quantity.onchange = function() {
|
|
change_rate_discretisation(this_form_type, i);
|
|
};
|
|
let child_rate_label = document.createElement('label');
|
|
// child_rate_label.outerHTML = '<label for="inv_rate_s' + si + '">Rate [£ / duration discretisation]</label>';
|
|
child_rate_label.id = this_form_type + '_rate_s' + si + '_label';
|
|
child_rate_label.innerText = 'Rate [£ / Hour]';
|
|
child_rate_label.className = 'input_label label_title';
|
|
let child_rate = document.createElement('input');
|
|
// child_rate.outerHTML = '<input type="number" id="inv_rate_s' + si + '" class="rate" placeholder="1" step="1"/>';
|
|
child_rate.type = 'number';
|
|
child_rate.id = this_form_type + '_rate_s' + si;
|
|
// Chassis Business Process Analyst
|
|
// child_rate.placeholder = "20.33";
|
|
// RADs Software Engineer
|
|
child_rate.placeholder = "23.94";
|
|
child_rate.step = '0.001';
|
|
child_rate.min = '0';
|
|
let child_disc_durn_quantity_label = document.createElement('label');
|
|
// child_disc_durn_quantity_label.outerHTML = '<label for="inv_durndisc_quantity_s' + si + '">Quantity of duration discretisations:</label>';
|
|
child_disc_durn_quantity_label.id = this_form_type + '_durndisc_quantity_s' + si + '_label';
|
|
child_disc_durn_quantity_label.innerText = 'Quantity of duration discretisations:';
|
|
child_disc_durn_quantity_label.className = 'input_label label_title'
|
|
let child_disc_durn_quantity = document.createElement('input');
|
|
// child_disc_durn_quantity.outerHTML = '<input type="number" id="inv_durndisc_quantity_s' + si + '" class="rate" placeholder="1" step="1" min="1"/>';
|
|
child_disc_durn_quantity.type = 'number';
|
|
child_disc_durn_quantity.id = this_form_type + '_durndisc_quantity_s' + si;
|
|
child_disc_durn_quantity.placeholder = "4";
|
|
child_disc_durn_quantity.step = "0.001";
|
|
child_disc_durn_quantity.min = "0.001";
|
|
child_disc_durn_quantity.onchange = function() {
|
|
show_discs(this_form_type, "s", i, Number(this.value));
|
|
};
|
|
let child_sub_quantity_label = document.createElement('label');
|
|
// child_quantity_label.outerHTML = '<label for="inv_quantity_s' + si + '_1">Week 1:</label>';
|
|
child_sub_quantity_label.id = this_form_type + '_sub_quantity_s' + si + '_label';
|
|
child_sub_quantity_label.innerText = 'Quantity of billing periods:';
|
|
child_sub_quantity_label.className = 'input_label label_title';
|
|
let child_sub_quantity = document.createElement('input');
|
|
// child_quantity.outerHTML = '<input type="text" id="inv_quantity_s' + si + '_1" class="date_disc"/>';
|
|
child_sub_quantity.type = 'number';
|
|
child_sub_quantity.id = this_form_type + '_sub_quantity_s' + si;
|
|
child_sub_quantity.onchange = function() {
|
|
show_discs(this_form_type, 's', i, Number(this.value));
|
|
}
|
|
child_sub_quantity.placeholder = "4";
|
|
child_sub_quantity.step = "1";
|
|
child_sub_quantity.min = "1";
|
|
// incremental
|
|
let child_incremental_label = document.createElement('label');
|
|
child_incremental_label.id = this_form_type + '_incremental_label_s' + si;
|
|
child_incremental_label.innerText = 'Incremental duration discretisation IDs:';
|
|
child_incremental_label.className = 'input_label label_title';
|
|
let child_incremental_check_yes = document.createElement('input');
|
|
child_incremental_check_yes.type = 'checkbox';
|
|
child_incremental_check_yes.id = this_form_type + '_increment_yes_s' + si;
|
|
child_incremental_check_yes.value = "Yes";
|
|
child_incremental_check_yes.checked = true;
|
|
child_incremental_check_yes.onchange = function () {
|
|
toggle_incremental_weeks(this_form_type, 'Yes', i);
|
|
};
|
|
let child_incremental_check_yes_label = document.createElement('label');
|
|
child_incremental_check_yes_label.id = this_form_type + '_increment_yes_s' + si + '_label';
|
|
child_incremental_check_yes_label.innerText = "Yes";
|
|
child_incremental_check_yes_label.className = 'input_subtitle';
|
|
let child_incremental_check_no = document.createElement('input');
|
|
child_incremental_check_no.type = 'checkbox';
|
|
child_incremental_check_no.id = this_form_type + '_increment_no_s' + si;
|
|
child_incremental_check_no.value = "No";
|
|
child_incremental_check_no.checked = false;
|
|
child_incremental_check_no.onchange = function () {
|
|
toggle_incremental_weeks(this_form_type, 'No', i);
|
|
};
|
|
let child_incremental_check_no_label = document.createElement('label');
|
|
child_incremental_check_no_label.id = this_form_type + '_increment_no_s' + si + '_label';
|
|
child_incremental_check_no_label.innerText = "No";
|
|
child_incremental_check_no_label.className = 'input_subtitle';
|
|
let child_div_incremental = document.createElement('div');
|
|
child_div_incremental.id = 'div_' + this_form_type + '_incremental_s' + si;
|
|
child_div_incremental.className = 'tbl_container';
|
|
let child_tbl_incremental = document.createElement('table');
|
|
child_tbl_incremental.id = 'tbl_inv_incremental_s' + si;
|
|
let child_tr_incremental = document.createElement('tr');
|
|
let child_td_incremental_base = document.createElement('td');
|
|
let child_div_incremental_base = document.createElement('div');
|
|
child_div_incremental_base.className = 'div_input_label';
|
|
let child_baseID_label = document.createElement('label');
|
|
child_baseID_label.id = this_form_type + '_baseID_s' + si + '_label';
|
|
child_baseID_label.innerText = 'Service description base (prefix):';
|
|
child_baseID_label.className = 'input_label label_title';
|
|
let child_baseID = document.createElement('input');
|
|
child_baseID.type = 'text';
|
|
child_baseID.id = this_form_type + '_baseID_s' + si;
|
|
child_baseID.onchange = function () {
|
|
change_incremental_phrase(this_form_type, i);
|
|
}
|
|
let child_td_incremental_suffix = document.createElement('td');
|
|
let child_div_incremental_suffix = document.createElement('div');
|
|
child_div_incremental_suffix.className = 'div_input_label';
|
|
let child_week1_label = document.createElement('label');
|
|
child_week1_label.id = this_form_type + '_week1_s' + si + '_label';
|
|
child_week1_label.innerText = 'First week ID:';
|
|
child_week1_label.className = 'input_label label_title';
|
|
let child_week1 = document.createElement('input');
|
|
child_week1.type = 'number';
|
|
child_week1.id = this_form_type + '_week1_s' + si;
|
|
child_week1.onchange = function () {
|
|
change_incremental_phrase(this_form_type, i);
|
|
};
|
|
child_div_incremental_base.appendChild(child_baseID_label);
|
|
child_div_incremental_base.appendChild(child_baseID);
|
|
child_td_incremental_base.appendChild(child_div_incremental_base);
|
|
child_tr_incremental.appendChild(child_td_incremental_base);
|
|
child_div_incremental_suffix.appendChild(child_week1_label);
|
|
child_div_incremental_suffix.appendChild(child_week1);
|
|
child_td_incremental_suffix.appendChild(child_div_incremental_suffix);
|
|
child_tr_incremental.appendChild(child_td_incremental_suffix);
|
|
child_tbl_incremental.appendChild(child_tr_incremental);
|
|
child_div_incremental.appendChild(child_tbl_incremental);
|
|
|
|
// bringing it all together
|
|
child_div.appendChild(child_title);
|
|
child_div.appendChild(document.createElement('br'));
|
|
child_div.appendChild(child_disc_rate_label);
|
|
child_div.appendChild(document.createElement('br'));
|
|
child_div.appendChild(child_disc_rate_select);
|
|
child_div.appendChild(document.createElement('br'));
|
|
child_div.appendChild(document.createElement('br'));
|
|
child_div.appendChild(child_disc_rate_quantity_label);
|
|
child_div.appendChild(document.createElement('br'));
|
|
child_div.appendChild(child_disc_rate_quantity);
|
|
child_div.appendChild(document.createElement('br'));
|
|
child_div.appendChild(document.createElement('br'));
|
|
child_div.appendChild(child_rate_label);
|
|
child_div.appendChild(document.createElement('br'));
|
|
child_div.appendChild(child_rate);
|
|
child_div.appendChild(document.createElement('br'));
|
|
child_div.appendChild(document.createElement('br'));
|
|
child_div.appendChild(child_disc_durn_label);
|
|
child_div.appendChild(document.createElement('br'));
|
|
child_div.appendChild(child_disc_durn_select);
|
|
child_div.appendChild(document.createElement('br'));
|
|
child_div.appendChild(document.createElement('br'));
|
|
child_div.appendChild(child_disc_durn_quantity_label);
|
|
child_div.appendChild(document.createElement('br'));
|
|
child_div.appendChild(child_disc_durn_quantity);
|
|
child_div.appendChild(document.createElement('br'));
|
|
child_div.appendChild(document.createElement('br'));
|
|
child_div.appendChild(child_sub_quantity_label);
|
|
child_div.appendChild(document.createElement('br'));
|
|
child_div.appendChild(child_sub_quantity);
|
|
child_div.appendChild(document.createElement('br'));
|
|
child_div.appendChild(document.createElement('br'));
|
|
child_div.appendChild(child_incremental_label);
|
|
child_div.appendChild(document.createElement('br'));
|
|
child_div.appendChild(child_incremental_check_yes);
|
|
child_div.appendChild(child_incremental_check_yes_label);
|
|
child_div.appendChild(child_incremental_check_no);
|
|
child_div.appendChild(child_incremental_check_no_label);
|
|
child_div.appendChild(document.createElement('br'));
|
|
child_div.appendChild(document.createElement('br'));
|
|
child_div.appendChild(child_div_incremental);
|
|
child_div.appendChild(document.createElement('br'));
|
|
// child_div.appendChild(child_div_service);
|
|
let date_disc = 'week'; // get_select_text(document.getElementById(this_form_type + '_disc_durn_s' + si));
|
|
let rate_disc = 'hour'; // get_select_text(document.getElementById(this_form_type + '_disc_rate_s' + si));
|
|
child_div.appendChild(create_service_div(this_form_type, si, date_disc, rate_disc));
|
|
|
|
switch (this_form_type) {
|
|
case 'inv':
|
|
div_inv_services.appendChild(child_div);
|
|
inv_services_children.push(1);
|
|
inv_services_max++;
|
|
break;
|
|
case 'est':
|
|
div_est_services.appendChild(child_div);
|
|
est_services_children.push(1);
|
|
est_services_max++;
|
|
break;
|
|
}
|
|
}
|
|
update_currency();
|
|
}
|
|
for (let i = 1; i <= N; i++) {
|
|
document.getElementById('div_' + this_form_type + '_service_' + String(i)).style.display = 'block'; // 'table';
|
|
}
|
|
if (N < inv_services_max) {
|
|
for (let i = N + 1; i <= inv_services_max; i++) {
|
|
document.getElementById('div_' + this_form_type + '_service_' + String(i)).style.display = 'none';
|
|
}
|
|
}
|
|
}
|
|
|
|
function create_service_div(this_form_type, i_str, date_disc, rate_disc) {
|
|
|
|
let child_div_service = document.createElement('div');
|
|
// child_div_service.outerHTML = '<div id="div_inv_service_' + i_str + '_1></div>';
|
|
child_div_service.id = 'div_' + this_form_type + '_service_' + i_str;
|
|
child_div_service.className = 'tbl_container';
|
|
let child_tbl_service = document.createElement('table');
|
|
child_tbl_service.id = 'tbl_' + this_form_type + '_service_' + i_str;
|
|
let child_tr_service = create_sub_service_tr(this_form_type, i_str, "1", date_disc, rate_disc);
|
|
child_tbl_service.appendChild(child_tr_service);
|
|
child_div_service.appendChild(child_tbl_service);
|
|
|
|
return child_div_service;
|
|
}
|
|
|
|
function show_goods(this_form_type) {
|
|
let N = Number(document.getElementById(this_form_type + '_goods_n').value);
|
|
let goods_max = 0;
|
|
switch (this_form_type) {
|
|
case 'inv':
|
|
goods_max = inv_goods_max;
|
|
break;
|
|
case 'est':
|
|
goods_max = est_goods_max;
|
|
break;
|
|
}
|
|
if (N > goods_max) {
|
|
for (let i = goods_max + 1; i <= N; i++) {
|
|
// let child_div = create_good_div(this_form_type, String(i));
|
|
let tr_good = create_sub_good_tr(this_form_type, String(i));
|
|
|
|
switch (this_form_type) {
|
|
case 'inv':
|
|
div_inv_goods.appendChild(tr_good);
|
|
inv_goods_max++;
|
|
break;
|
|
case 'est':
|
|
div_est_goods.appendChild(tr_good);
|
|
est_goods_max++;
|
|
break;
|
|
}
|
|
}
|
|
update_currency();
|
|
}
|
|
for (let i = 1; i <= N; i++) {
|
|
document.getElementById('tr_' + this_form_type + '_good_' + String(i)).style.display = 'flex';
|
|
}
|
|
switch (this_form_type) {
|
|
case 'inv':
|
|
if (N < inv_goods_max && this_form_type == 'inv') {
|
|
for (let i = N + 1; i <= inv_goods_max; i++) {
|
|
document.getElementById('tr_inv_good_' + String(i)).style.display = 'none';
|
|
}
|
|
}
|
|
break;
|
|
case 'est':
|
|
if (N < est_goods_max && this_form_type == 'est') {
|
|
for (let i = N + 1; i <= est_goods_max; i++) {
|
|
document.getElementById('tr_est_good_' + String(i)).style.display = 'none';
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function create_good_div(this_form_type, i_str) {
|
|
let child_div = document.createElement('div');
|
|
child_div.id = 'div_' + this_form_type + '_good_' + i_str;
|
|
child_div.className = 'div_good tbl_container';
|
|
let child_title = document.createElement('label');
|
|
child_title.className = 'div_title';
|
|
child_title.innerText = 'Good ' + i_str;
|
|
let child_table = document.createElement('table');
|
|
child_table.id = 'tbl_' + this_form_type + '_good_' + i_str;
|
|
|
|
// bringing it all together
|
|
child_div.appendChild(child_title);
|
|
child_div.appendChild(document.createElement('br'));
|
|
child_table.appendChild(create_sub_good_tr(this_form_type, i_str));
|
|
child_div.appendChild(child_table);
|
|
|
|
return child_div;
|
|
}
|
|
|
|
function create_sub_good_tr(this_form_type, i_str) {
|
|
let el_tr = document.createElement('tr');
|
|
el_tr.id = 'tr_' + this_form_type + '_good_' + i_str;
|
|
let el_td_heading = document.createElement('td');
|
|
// el_td_heading.style.width = '100px';
|
|
let el_heading_label = document.createElement('label');
|
|
el_heading_label.id = this_form_type + '_heading_g' + i_str + '_label';
|
|
el_heading_label.innerText = 'Good ' + i_str;
|
|
el_heading_label.className = 'input_label';
|
|
el_heading_label.style.whiteSpace = 'nowrap';
|
|
let el_td_name = document.createElement('td');
|
|
let el_div_name = document.createElement('div');
|
|
el_div_name.className = 'div_input_label';
|
|
let el_name_label = document.createElement('label');
|
|
// el_disc_rate_label.outerHTML = '<label for="inv_disc_rate_s' + i_str + '">Invoice service rate discretisation:</label>';
|
|
el_name_label.id = this_form_type + '_name_g' + i_str + '_label';
|
|
el_name_label.innerText = 'Name:';
|
|
el_name_label.className = 'input_label';
|
|
// let el_break = document.createElement('br');
|
|
let el_name = document.createElement('input');
|
|
// el_disc_rate_quantity.outerHTML = '<input type="number" id="inv_durndisc_quantity_s' + i_str + '" class="rate" placeholder="1" step="1" min="1"/>';
|
|
el_name.type = 'text';
|
|
el_name.id = this_form_type + '_name_g' + i_str;
|
|
el_name.className = 'input_label';
|
|
let el_td_value = document.createElement('td');
|
|
let el_div_value = document.createElement('div');
|
|
el_div_name.className = 'div_input_label';
|
|
let el_value_label = document.createElement('label');
|
|
// el_disc_rate_label.outerHTML = '<label for="inv_disc_rate_s' + i_str + '">Invoice service rate discretisation:</label>';
|
|
el_value_label.id = this_form_type + '_value_g' + i_str + '_label';
|
|
el_value_label.innerText = 'Value [£]:';
|
|
el_value_label.className = 'input_label';
|
|
// let el_break = document.createElement('br');
|
|
let el_value = document.createElement('input');
|
|
// el_disc_rate_quantity.outerHTML = '<input type="number" id="inv_durndisc_quantity_s' + i_str + '" class="rate" placeholder="1" step="1" min="1"/>';
|
|
el_value.type = 'number';
|
|
el_value.className = 'input_label';
|
|
el_value.id = this_form_type + '_value_g' + i_str;
|
|
el_value.placeholder = "20000";
|
|
el_value.step = '0.01';
|
|
let el_td_quantity = document.createElement('td');
|
|
let el_div_quantity = document.createElement('div');
|
|
el_div_name.className = 'div_input_label';
|
|
let el_quantity_label = document.createElement('label');
|
|
// el_disc_rate_label.outerHTML = '<label for="inv_disc_rate_s' + i_str + '">Invoice service rate discretisation:</label>';
|
|
el_quantity_label.id = this_form_type + '_quantity_g' + i_str + '_label';
|
|
el_quantity_label.innerText = 'Quantity of goods:';
|
|
el_quantity_label.className = 'input_label';
|
|
// let el_break = document.createElement('br');
|
|
let el_quantity = document.createElement('input');
|
|
// el_disc_rate_quantity.outerHTML = '<input type="number" id="inv_durndisc_quantity_s' + i_str + '" class="rate" placeholder="1" step="1" min="1"/>';
|
|
el_quantity.type = 'number';
|
|
el_quantity.id = this_form_type + '_quantity_g' + i_str;
|
|
el_quantity.className = 'input_label';
|
|
el_quantity.placeholder = "1";
|
|
el_quantity.step = '1';
|
|
el_quantity.min = '1';
|
|
|
|
// el_div_heading.appendChild(el_heading_label);
|
|
// el_td_heading.appendChild(el_div_heading);
|
|
el_td_heading.appendChild(el_heading_label);
|
|
el_tr.appendChild(el_td_heading);
|
|
el_div_name.appendChild(el_name_label);
|
|
el_div_name.appendChild(el_name);
|
|
el_td_name.appendChild(el_div_name);
|
|
el_tr.appendChild(el_td_name);
|
|
el_div_value.appendChild(el_value_label);
|
|
el_div_value.appendChild(el_value);
|
|
el_td_value.appendChild(el_div_value);
|
|
el_tr.appendChild(el_td_value);
|
|
el_div_quantity.appendChild(el_quantity_label);
|
|
el_div_quantity.appendChild(el_quantity);
|
|
el_td_quantity.appendChild(el_div_quantity);
|
|
el_tr.appendChild(el_td_quantity);
|
|
|
|
return el_tr;
|
|
}
|
|
|
|
function change_rate_discretisation(this_form_type, service_index) { // , subservice_index
|
|
// FUNCTION
|
|
// following change of rate discretisation, update UI
|
|
// ARGUMENTS
|
|
// string this_form_type - 'inv' or 'est'
|
|
// long service_index - index of service within form_type services
|
|
// long subservice_index - index of subservice within service within form_type
|
|
// OUTPUTS
|
|
// METHODS
|
|
// console.log('this form type = ' + this_form_type);
|
|
// console.log('service index = ' + service_index.toString());
|
|
let si = service_index.toString();
|
|
// let ssi = subservice_index.toString();
|
|
let elem_rate = document.getElementById(this_form_type + '_disc_rate_s' + si);
|
|
let rate_quant = document.getElementById(this_form_type + '_ratedisc_quantity_s' + si).value;
|
|
let new_rate = get_select_text(elem_rate);
|
|
let elem_durn = document.getElementById(this_form_type + '_disc_durn_s' + si);
|
|
let new_durn = get_select_text(elem_durn);
|
|
let durn_quant = document.getElementById(this_form_type + '_durndisc_quantity_s' + si).value;
|
|
let subservice_quantity = Number(document.getElementById(this_form_type + '_sub_quantity_s' + si).value);
|
|
// assign rate text
|
|
document.getElementById(this_form_type + '_ratedisc_quantity_s' + si + '_label').innerText = 'Quantity of ' + new_rate.toLowerCase() + 's per minimum unit rate:'; // does not work
|
|
if (rate_quant == "1") {
|
|
document.getElementById(this_form_type + '_rate_s' + si + '_label').innerText = 'Rate [£ / ' + new_rate + ']:';
|
|
for (let i = 1; i <= subservice_quantity; i++) {
|
|
let sj = String(i);
|
|
console.log('si = ' + si + ' + sj = ' + sj);
|
|
document.getElementById(this_form_type + '_quantity_s' + si + '_' + sj + '_label').innerText = new_rate + 's worked:';
|
|
}
|
|
} else {
|
|
document.getElementById(this_form_type + '_rate_s' + si + '_label').innerText = 'Rate [£ / ' + rate_quant + ' ' + new_rate + 's]:';
|
|
for (let i = 1; i <= subservice_quantity; i++) {
|
|
let sj = String(i);
|
|
console.log('si = ' + si + ' + sj = ' + sj);
|
|
document.getElementById(this_form_type + '_quantity_s' + si + '_' + sj + '_label').innerText = 'x' + rate_quant + ' ' + new_rate + 's worked:';
|
|
}
|
|
}
|
|
document.getElementById(this_form_type + '_durndisc_quantity_s' + si + '_label').innerText = 'Quantity of ' + new_durn.toLowerCase() + 's per billing period:';
|
|
if (durn_quant == "1") {
|
|
document.getElementById(this_form_type + '_week1_s' + si + '_label').innerText = 'First ' + new_durn.toLowerCase() + ' ID:';
|
|
document.getElementById(this_form_type + '_incremental_label_s' + si).innerText = 'Incremental ' + new_durn.toLowerCase() + ' IDs:';
|
|
for (let i = 1; i <= subservice_quantity; i++) {
|
|
let sj = String(i);
|
|
console.log('si = ' + si + ' + sj = ' + sj);
|
|
document.getElementById(this_form_type + '_description_s' + si + '_' + sj + '_label').innerText = new_durn + ' ' + sj + ':';
|
|
}
|
|
} else {
|
|
document.getElementById(this_form_type + '_week1_s' + si + '_label').innerText = 'First x' + durn_quant + ' ' + new_durn.toLowerCase() + 's ID:';
|
|
document.getElementById(this_form_type + '_incremental_label_s' + si).innerText = 'Incremental x' + durn_quant + ' ' + new_durn.toLowerCase() + 's IDs:';
|
|
for (let i = 1; i <= subservice_quantity; i++) {
|
|
let sj = String(i);
|
|
console.log('si = ' + si + ' + sj = ' + sj);
|
|
document.getElementById(this_form_type + '_description_s' + si + '_' + sj + '_label').innerText = 'x' + durn_quant + ' ' + new_durn.toLowerCase() + 's ' + sj + ':';
|
|
}
|
|
}
|
|
// document.getElementById(this_form_type + '_week1_s' + si + '_label').innerText = 'First ' + new_durn.toLowerCase() + ' ID:';
|
|
// document.getElementById(this_form_type + '_incremental_label_s' + si).innerText = 'Incremental ' + new_durn.toLowerCase() + ' IDs:';
|
|
// for (let i = 1; i <= subservice_quantity; i++) {
|
|
// let sj = String(i);
|
|
// console.log('si = ' + si + ' + sj = ' + sj);
|
|
// document.getElementById('inv_description_s' + si + '_' + sj + '_label').innerText = new_durn + ' ' + sj + ':';
|
|
// }
|
|
}
|
|
|
|
function change_incremental_phrase(this_form_type, service_index) {
|
|
let si = service_index.toString();
|
|
let week1 = Number(document.getElementById(this_form_type + '_week1_s' + si).value);
|
|
let baseID = document.getElementById(this_form_type + '_baseID_s' + si).value;
|
|
let N;
|
|
switch (this_form_type) {
|
|
case 'inv':
|
|
N = inv_services_children[service_index - 1];
|
|
break;
|
|
case 'est':
|
|
N = est_services_children[service_index - 1];
|
|
break;
|
|
}
|
|
for (let j = 1; j <= N; j++) {
|
|
let myphrase = baseID + (week1 + j - 1).toString();
|
|
let sj = j.toString();
|
|
console.log('si = ' + si + ' + sj = ' + sj);
|
|
let my_elem_str = this_form_type + '_description_s' + si + '_' + sj;
|
|
console.log('my_elem_str = ' + my_elem_str);
|
|
document.getElementById(my_elem_str).value = myphrase;
|
|
}
|
|
}
|
|
|
|
function toggle_incremental_weeks(this_form_type, increment, service_index) {
|
|
let si = service_index.toString();
|
|
let check_yes = document.getElementById(this_form_type + '_increment_yes_s' + si);
|
|
let check_no = document.getElementById(this_form_type + '_increment_no_s' + si);
|
|
let div_increment = document.getElementById('div_' + this_form_type + '_incremental_s' + si);
|
|
switch (increment) {
|
|
case 'Yes':
|
|
if (check_yes.checked) {
|
|
check_no.checked = false;
|
|
div_increment.style.display = 'flex';
|
|
change_incremental_phrase(this_form_type, service_index);
|
|
} else {
|
|
check_no.checked = true;
|
|
div_increment.style.display = 'none';
|
|
}
|
|
break;
|
|
case 'No':
|
|
if (check_no.checked) {
|
|
check_yes.checked = false;
|
|
div_increment.style.display = 'none';
|
|
} else {
|
|
check_yes.checked = true;
|
|
div_increment.style.display = 'flex';
|
|
change_incremental_phrase(this_form_type, service_index);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function show_discs(this_form_type, gvs, index, quantity) {
|
|
switch (gvs) {
|
|
case "g":
|
|
break;
|
|
case "s":
|
|
let N;
|
|
switch (this_form_type) {
|
|
case 'inv':
|
|
N = inv_services_children[index - 1];
|
|
break;
|
|
case 'est':
|
|
N = est_services_children[index - 1];
|
|
break;
|
|
}
|
|
let si = String(index);
|
|
let service_table = document.getElementById('tbl_' + this_form_type + '_service_' + si); //'div_' + this_form_type + '_service_' + si);
|
|
console.log('service_table id: ' + 'tbl_' + this_form_type + '_service_' + si);
|
|
let date_disc = get_select_text(document.getElementById(this_form_type + '_disc_durn_s' + si));
|
|
let rate_disc = get_select_text(document.getElementById(this_form_type + '_disc_rate_s' + si));
|
|
if (quantity > N) {
|
|
for (let i = N + 1; i <= quantity; i++) {
|
|
let sj = String(i);
|
|
let child_tr_service = create_sub_service_tr(this_form_type, si, sj, date_disc, rate_disc);
|
|
|
|
service_table.appendChild(child_tr_service);
|
|
|
|
switch (this_form_type) {
|
|
case 'inv':
|
|
inv_services_children[index - 1]++;
|
|
break;
|
|
case 'est':
|
|
est_services_children[index - 1]++;
|
|
break;
|
|
}
|
|
console.log('new service div added');
|
|
if (document.getElementById(this_form_type + '_increment_yes_s' + si).checked) {
|
|
change_incremental_phrase(this_form_type, index);
|
|
}
|
|
}
|
|
change_rate_discretisation(this_form_type, index);
|
|
}
|
|
for (let i = 1; i <= quantity; i++) {
|
|
// console.log("showing: " + 'tr_' + this_form_type + '_service_' + si + '_' + String(i));
|
|
document.getElementById('tr_' + this_form_type + '_service_' + si + '_' + String(i)).style.display = 'table-row';
|
|
}
|
|
if (quantity < N) {
|
|
for (let i = quantity + 1; i <= N; i++) {
|
|
document.getElementById('tr_' + this_form_type + '_service_' + si + '_' + String(i)).style.display = 'none';
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function create_sub_service_tr(this_form_type, i_str, j_str, date_disc, rate_disc) {
|
|
let child_tr_service = document.createElement('tr');
|
|
child_tr_service.id = 'tr_' + this_form_type + '_service_' + i_str + '_' + j_str;
|
|
let child_td_description = document.createElement('td');
|
|
let child_div_description = document.createElement('div');
|
|
// child_div_service.outerHTML = '<div id="div_inv_service_' + i_str + '_' + j_str + '></div>';
|
|
child_div_description.className = "div_input_label"
|
|
child_div_description.id = "div_" + this_form_type + "_service_" + i_str + "_" + j_str;
|
|
let child_description_label = document.createElement('label');
|
|
// child_description_label.outerHTML = '<label for="inv_description_s' + i_str + '_' + j_str + '">Week 1:</label>';
|
|
child_description_label.innerText = date_disc + " " + j_str + ":";
|
|
child_description_label.id = this_form_type + '_description_s' + i_str + '_' + j_str + '_label';
|
|
child_description_label.className = 'input_label';
|
|
let child_description = document.createElement('input');
|
|
// child_description.outerHTML = '<input type="text" id="inv_description_s' + i_str + '_' + j_str + '" class="date_disc"/>';
|
|
child_description.type = "text";
|
|
console.log('creating ' + this_form_type + '_description_s with i_str=' + i_str + ' + j_str=' + j_str);
|
|
child_description.id = this_form_type + "_description_s" + i_str + "_" + j_str;
|
|
child_description.className = "input_label";
|
|
|
|
let child_td_quantity = document.createElement('td');
|
|
let child_div_quantity = document.createElement('div');
|
|
let child_quantity_label = document.createElement('label');
|
|
// child_quantity_label.outerHTML = '<label for="inv_quantity_s' + i_str + '_' + j_str +'">Hours worked:</label>';
|
|
child_quantity_label.id = this_form_type + '_quantity_s' + i_str + '_' + j_str + '_label';
|
|
child_quantity_label.innerText = rate_disc + "s worked:";
|
|
child_quantity_label.className = 'input_label';
|
|
let child_quantity = document.createElement('input');
|
|
// child_quantity.outerHTML = '<input type="text" id="inv_quantity_s' + i_str + '_' + j_str + '" class="date_disc"/>';
|
|
child_quantity.type = "number";
|
|
child_quantity.id = this_form_type + "_quantity_s" + i_str + "_" + j_str;
|
|
child_quantity.className = "input_label";
|
|
child_quantity.step = "0.001";
|
|
// child_quantity.min = "0.001";
|
|
|
|
child_div_description.appendChild(child_description_label);
|
|
child_div_description.appendChild(child_description);
|
|
child_td_description.appendChild(child_div_description);
|
|
child_tr_service.appendChild(child_td_description);
|
|
|
|
child_div_quantity.appendChild(child_quantity_label);
|
|
child_div_quantity.appendChild(child_quantity);
|
|
child_td_quantity.appendChild(child_div_quantity);
|
|
child_tr_service.appendChild(child_td_quantity);
|
|
|
|
return child_tr_service;
|
|
}
|
|
|
|
function show_goods_services(this_form_type) {
|
|
let check_goods = document.getElementById(this_form_type + '_type_goods');
|
|
let check_services = document.getElementById(this_form_type + '_type_services');
|
|
let div_goods = document.getElementById('div_' + this_form_type + '_goods');
|
|
let div_services = document.getElementById('div_' + this_form_type + '_services');
|
|
if (check_goods.checked) {
|
|
div_goods.style.display = 'inline-block';
|
|
} else {
|
|
div_goods.style.display = 'none';
|
|
}
|
|
if (check_services.checked) {
|
|
div_services.style.display = 'inline-block';
|
|
} else {
|
|
div_services.style.display = 'none';
|
|
}
|
|
}
|
|
// estimate
|
|
// perfectly encompassed by invoice code?
|
|
|
|
// payment plan
|
|
function show_payschemes() {
|
|
let N = Number(pay_n.value);
|
|
if (N > 1) {
|
|
div_pay_type.style.display = 'inline-block';
|
|
show_paytypes(N);
|
|
div_payscheme.style.display = 'inline-block';
|
|
}
|
|
}
|
|
|
|
function change_paytype(my_paytype) {
|
|
let my_this, my_that1, my_that2;
|
|
switch (my_paytype) {
|
|
case 'linear':
|
|
my_this = paytype_linear;
|
|
my_that1 = paytype_multiplier;
|
|
my_that2 = paytype_random;
|
|
break;
|
|
case 'multiplier':
|
|
my_this = paytype_multiplier;
|
|
my_that1 = paytype_linear;
|
|
my_that2 = paytype_random;
|
|
break;
|
|
case 'random':
|
|
my_this = paytype_random;
|
|
my_that1 = paytype_multiplier;
|
|
my_that2 = paytype_linear;
|
|
break;
|
|
}
|
|
if (my_this.checked) {
|
|
my_that1.checked = false;
|
|
my_that2.checked = false;
|
|
} else {
|
|
if (!(my_that1.checked || my_that2.checked)) {
|
|
my_this.checked = true;
|
|
}
|
|
}
|
|
show_paytypes();
|
|
}
|
|
|
|
function show_paytypes(N = Number(pay_n.value)) {
|
|
if (paytype_linear.checked) {
|
|
div_paytype_linear.style.display = 'inline-block';
|
|
div_paytype_multiplier.style.display = 'none';
|
|
div_paytype_random.style.display = 'none';
|
|
} else if (paytype_multiplier.checked) {
|
|
div_paytype_linear.style.display = 'none';
|
|
div_paytype_multiplier.style.display = 'inline-block';
|
|
div_paytype_random.style.display = 'none';
|
|
if (N > paytype_mult_max) {
|
|
for (let i = 1 + paytype_mult_max; i <= N; i++) {
|
|
let si = i.toString();
|
|
let child_label = document.createElement('label');
|
|
// child_label.outerHTML = "<label for='paytype_mult_" + si + "' + id='label_paytype_mult_" + si + "'>Payment multiplier" + si + ":</label>";
|
|
child_label.id = 'paytype_mult_' + si + '_label';
|
|
child_label.innerText = "Payment multiplier " + si + ":";
|
|
child_label.className = 'input_label';
|
|
let child_input = document.createElement('input');
|
|
// child_input.outerHTML = "<input type='number' id='paytype_mult_" + si + "' placeholder='10' step='0.01'>";
|
|
child_input.type = 'number';
|
|
child_input.id = 'paytype_mult_' + si;
|
|
child_input.value = '1';
|
|
child_input.step = '0.001';
|
|
|
|
div_paytype_multiplier.appendChild(child_label);
|
|
div_paytype_multiplier.appendChild(child_input);
|
|
div_paytype_multiplier.appendChild(document.createElement('br'));
|
|
div_paytype_multiplier.appendChild(document.createElement('br'));
|
|
}
|
|
paytype_mult_max = N;
|
|
} else if (N < paytype_mult_max) {
|
|
for (let i = 1; i <= N; i++) {
|
|
let si = i.toString();
|
|
let element1 = document.getElementById("paytype_mult_" + si + '_label');
|
|
element1.style.display = 'inline-block';
|
|
let element2 = document.getElementById("paytype_mult_" + si);
|
|
element2.style.display = 'inline-block';
|
|
}
|
|
for (let i = N + 1; i <= paytype_mult_max; i++) {
|
|
let si = i.toString();
|
|
let element1 = document.getElementById("paytype_mult_" + si + '_label');
|
|
element1.style.display = 'none';
|
|
let element2 = document.getElementById("paytype_mult_" + si);
|
|
element2.style.display = 'none';
|
|
}
|
|
}
|
|
} else {
|
|
div_paytype_linear.style.display = 'none';
|
|
div_paytype_multiplier.style.display = 'none';
|
|
div_paytype_random.style.display = 'inline-block';
|
|
if (N > paytype_random_max) {
|
|
for (let i = 1 + paytype_random_max; i <= N; i++) {
|
|
let si = String(i);
|
|
let child_label = document.createElement('label');
|
|
// child_label.outerHTML = "<label for='paytype_mult_" + si + "' + id='label_paytype_mult_" + si + "'>Payment multiplier" + si + ":</label>";
|
|
child_label.id = 'paytype_value_' + si + '_label';
|
|
child_label.innerText = "Payment " + si + " [£]:";
|
|
child_label.className = 'input_label';
|
|
let child_input = document.createElement('input');
|
|
// child_input.outerHTML = "<input type='number' id='paytype_mult_" + si + "' placeholder='10' step='0.01'>";
|
|
child_input.type = 'number';
|
|
child_input.id = 'paytype_value_' + si;
|
|
child_input.placeholder = '10';
|
|
child_input.step = '0.01';
|
|
|
|
div_paytype_random.appendChild(child_label);
|
|
div_paytype_random.appendChild(child_input);
|
|
div_paytype_random.appendChild(document.createElement('br'));
|
|
div_paytype_random.appendChild(document.createElement('br'));
|
|
}
|
|
update_currency();
|
|
paytype_random_max = N;
|
|
} else if (N < paytype_random_max) {
|
|
for (let i = 1; i <= N; i++) {
|
|
let si = i.toString();
|
|
let element1 = document.getElementById("label_paytype_value_" + si);
|
|
element1.style.display = 'inline-block';
|
|
let element2 = document.getElementById("paytype_value_" + si);
|
|
element2.style.display = 'inline-block';
|
|
}
|
|
for (let i = N + 1; i <= paytype_random_max; i++) {
|
|
let si = i.toString();
|
|
let element1 = document.getElementById("label_paytype_value_" + si);
|
|
element1.style.display = 'none';
|
|
let element2 = document.getElementById("paytype_value_" + si);
|
|
element2.style.display = 'none';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function change_pay_disctype(my_disctype) {
|
|
let my_this, my_that;
|
|
switch (my_disctype) {
|
|
case 'absolute':
|
|
my_this = pay_disc_type_absolute;
|
|
my_that = pay_disc_type_relative;
|
|
break;
|
|
case 'relative':
|
|
my_this = pay_disc_type_relative;
|
|
my_that = pay_disc_type_absolute;
|
|
break;
|
|
}
|
|
if (my_this.checked) {
|
|
my_that.checked = false;
|
|
} else {
|
|
if (!my_that.checked) {
|
|
my_that.checked = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
function show_schemes(N = Number(pay_n.value)) {
|
|
if (payscheme_linear.checked) {
|
|
// div_payscheme_linear.style.display = 'inline-block';
|
|
div_payscheme_multiplier.style.display = 'none';
|
|
} else { // if (payscheme_multiplier.checked) {
|
|
// div_payscheme_linear.style.display = 'none';
|
|
div_payscheme_multiplier.style.display = 'inline-block';
|
|
if (N > payscheme_mult_max) {
|
|
for (let i = 1 + payscheme_mult_max; i <= N; i++) {
|
|
let si = String(i);
|
|
let child_div = document.createElement('div');
|
|
child_div.id = 'div_payscheme_mult_' + si;
|
|
let child_label = document.createElement('label');
|
|
// child_label.outerHTML = "<label for='paytype_mult_" + si + "' + id='label_paytype_mult_" + si + "'>Payment multiplier" + si + ":</label>";
|
|
child_label.id = 'payscheme_mult_' + si + '_label';
|
|
child_label.innerText = "Payment minimum unit duration multiplier " + si + ":";
|
|
child_label.className = 'input_label label_title';
|
|
let child_input = document.createElement('input');
|
|
// child_input.outerHTML = "<input type='number' id='paytype_mult_" + si + "' placeholder='10' step='0.01'>";
|
|
child_input.type = 'number';
|
|
child_input.id = 'payscheme_mult_' + si;
|
|
child_input.value = '1';
|
|
child_input.step = '1';
|
|
child_input.min = '1';
|
|
|
|
child_div.appendChild(child_label);
|
|
child_div.appendChild(document.createElement('br'));
|
|
child_div.appendChild(child_input);
|
|
child_div.appendChild(document.createElement('br'));
|
|
child_div.appendChild(document.createElement('br'));
|
|
|
|
div_payscheme_multiplier.appendChild(child_div);
|
|
div_payscheme_multiplier.appendChild(document.createElement('br'));
|
|
div_payscheme_multiplier.appendChild(document.createElement('br'));
|
|
}
|
|
update_currency();
|
|
payscheme_mult_max = N;
|
|
} else if (N < payscheme_mult_max) {
|
|
for (let i = 1; i <= N; i++) {
|
|
document.getElementById("label_payscheme_mult_" + si).style.display = 'inline-block';
|
|
document.getElementById("payscheme_mult_" + si).style.display = 'inline-block';
|
|
}
|
|
for (let i = N + 1; i <= payscheme_mult_max; i++) {
|
|
document.getElementById("label_payscheme_mult_" + si).style.display = 'none';
|
|
document.getElementById("payscheme_mult_" + si).style.display = 'none';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function change_payscheme(my_payscheme) {
|
|
let my_this, my_that;
|
|
switch (my_payscheme) {
|
|
case 'linear':
|
|
my_this = payscheme_linear;
|
|
my_that = payscheme_multiplier;
|
|
break;
|
|
case 'multiplier':
|
|
my_this = payscheme_multiplier;
|
|
my_that = payscheme_linear;
|
|
break;
|
|
}
|
|
if (my_this.checked) {
|
|
my_that.checked = false;
|
|
} else {
|
|
if (!(my_that.checked)) {
|
|
my_this.checked = true;
|
|
}
|
|
}
|
|
show_schemes();
|
|
}
|
|
|
|
function max(a, b) {
|
|
if (a > b) {
|
|
return a;
|
|
} else {
|
|
return b;
|
|
}
|
|
}
|
|
|
|
function min(a, b) {
|
|
return -1 * max(-a, -b);
|
|
}
|
|
|
|
function update_pay_durndisc() {
|
|
let new_durndisc = get_select_text(pay_discretisation);
|
|
document.getElementById('pay_disc_quantity_label').innerText = 'Quantity of ' + new_durndisc.toLowerCase() + 's in minimum unit duration:';
|
|
// document.getElementById('pay_disc_type_label').innerText = 'Payment ' + new_durndisc.toLowerCase() + 's in minimum unit duration:';
|
|
}
|
|
|
|
// element interation
|
|
function get_select_text(html_elem) {
|
|
let my_options = html_elem.getElementsByTagName('option');
|
|
let new_text = '';
|
|
for (let i = 0; i < my_options.length; i++) {
|
|
if (my_options[i].value == html_elem.value) {
|
|
console.log('my_options[i].value = ' + my_options[i].value + '= html_elem.value = ' + html_elem.value);
|
|
new_text = my_options[i].innerText;
|
|
break;
|
|
}
|
|
}
|
|
// console.log(new_text);
|
|
return new_text;
|
|
}
|
|
|
|
function set_select(select_elem, new_value) {
|
|
let my_options = select_elem.getElementsByTagName('option');
|
|
for (let i = 0; i < my_options.length; i++) {
|
|
if (new_value == my_options[i].innerText) {
|
|
my_options[i].selected = true;
|
|
} else {
|
|
my_options[i].selected = false;
|
|
}
|
|
}
|
|
} |