// 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 = '
'; 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 = ''; 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 = ''; 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 = '' 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 = '' 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 = ''; 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 = ''; 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 = ''; 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 = ''; 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 = ''; 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 = ''; 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 = ''; 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 = ''; 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 = ''; 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 = ''; 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 = ''; 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 = ''; 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 = ''; 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 = ''; 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 = ''; 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 = ''; 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 = '
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 = ''; 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 = ''; 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 = ''; 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 = ''; 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 = ''; 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 = ''; 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 = '
Week 1:'; 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 = ''; 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 = ''; 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 = ''; 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 = ""; 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 = ""; 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 = ""; 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 = ""; 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 = ""; 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 = ""; 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; } } }