var originalTransactionAutofills = {}; $(document).on('change', '.purchase_input', function() { var input = $(this); var pd = input.closest('.purchase_details'); var ad = pd.closest('.app_details'); var movement = ad.find('.movement').val(); var timestamp = Date.now(); var container = input.closest('.appointment'); var app = container.attr('app'); if (!originalTransactionAutofills[app]) { originalTransactionAutofills[app] = { 'model': {}, 'option': {} }; } var name = input.attr('name'); var value = input.val(); var length = value.length; var attribute = input.attr('attribute'); if (!$(this).is('select') && $(this).attr('type') != 'checkbox') { if (1) { $.ajax({ url: '/manager/transaction/autofill', type: 'GET', data: { attribute: attribute, name: name, timestamp: timestamp, app: app, value: value, movement: movement }, success: function(response) { console.log(response); if (response.unformatted) { if (response.formatted) { input.val(response.formatted); transactionStorageSaver(app); } if (name == 'item') { var pu = pd.find('.purchase_input[name="unit"]'); var pa = pu.find('.purhcase_autofilled'); pa.remove(); pu.prepend(''); } if (name == 'quantity' && response.unit) { pd.find('.purchase_input[attribute="unit"]').val(response.unit); } var ti = pd.find('.transaction_information[app="' + app + '"]'); if (name == 'vendor' && response.informations.length > 0) { var informations = response.informations || []; console.log(informations); var htmls = []; var seen_htmls = []; pd.find('.purchase_input[attribute="information"]').each(function(i,v) { var okay = $.grep(seen_htmls, function(t,i) { return i == $(v).attr('uuid') }); console.log(okay); console.log(seen_htmls); console.log($(v).attr('uuid')); if (okay.length == 0) { seen_htmls.push($(v).attr('uuid')); htmls.push(''); } }); $.each(informations,function(i,v) { var vj = JSON.parse(v.data); var okay = $.grep(seen_htmls, function(t,i) { return i == v.uuid }); if (okay.length == 0) { console.log(seen_htmls); htmls.push(''); seen_htmls.push(v.uuid); } }); ti.html(htmls.join('')); ti.show(); } else if (name == 'vendor' && response.informations == 0) { ti.html('').hide(); ti.val(''); container.find('.transaction_information').val(undefined).html('').hide(); } } else { // container.find('.transaction_information').val(undefined).html('').hide(); } var amsc = $('.appointment_model_selector_container[attribute="' + name + '"]'); if (response.models && response.unformatted != '') { console.log('models are here! ' + name); if (amsc.html().match('[a-zA-Z]') && !originalTransactionAutofills[app]['model'][name]) { originalTransactionAutofills[app]['model'][name] = amsc.html(); } amsc.html(response.models); } else { amsc.html(originalTransactionAutofills[app]['model'][name]); } var asoc = pd.find('.appointment_option_selector_container[attribute="' + name + '"]'); if (response.options && response.unformatted != '') { console.log('options are here ' + name); if (amsc.html().match('[a-zA-Z]') && !originalTransactionAutofills[app]['option'][name]) { originalTransactionAutofills[app]['option'][name] = amsc.html(); } asoc.html(response.options); } else { asoc.html(originalTransactionAutofills[app]['option'][name]); } } }); } } else { if (input.attr('type') == 'checkbox') { if (input.prop('checked') == true) { value = 'on'; } else { value = 'off'; } } settingSetter({ 'app': app, 'setting': name, 'value': value }); } }); $(document).on('change', '.transaction_information', function() { var app = $(this).attr('app'); var appt = $(this).closest('.appointment'); var window_app = appt.attr('app'); var pd = $(this).closest('.purchase_details'); var uuid = $(this).val(); var timestamp = Date.now(); $.ajax({ url: '/manager/transaction/information', type: 'GET', data: { app: app, timestamp: timestamp, uuid: uuid }, success: function(response) { console.log(response); pd.find('.transaction_information_viewer[app="' + app + '"]').html(response.html).show().val(uuid); if (response.transaction) { $.each(response.autofillers, function(i,v) { pd.find('.purchase_input[attribute="' + v + '"]').val(response.transaction.data['formatted_' + v]).trigger('change'); }); pd.find('.purchase_config[attribute="has_totes"]').attr('enabled', 'on'); pd.find('.purchase_input[attribute="amount"]').val(response.transaction.data.numbers.price); if (response.transaction.data.numbers.tax) { pd.find('.purchase_config[attribute="has_tax"]').attr('enabled', 'on'); pd.find('.purchase_input[attribute="tax"]').val(response.transaction.data.numbers.tax); } else { pd.find('.purchase_config[attribute="has_tax"]').attr('enabled', 'off'); } pd.find('.purchase_input[attribute="aux"]').val(response.transaction.data.numbers.aux); pd.find('.purchase_input[attribute="total"]').val(response.transaction.data.numbers.balance).trigger('change'); setTimeout(function() { pd.find('.transaction_information').val(uuid); pd.find('.purchase_input[attribute="model"]').val(response.transaction.data.model.uuid); pd.find('.appointment_model_quantity').val(response.transaction.data.model.quantity); pd.find('.appointment_model_unit').val(response.transaction.data.model.unit); $.each(response.transaction.data.options, function(i,v) { $.each(v, function(ir,vr) { console.log(vr); var ao = pd.find('.appointment_option[uuid="' + vr.uuid + '"]'); console.log(ao); ao.attr('select','on'); ao.find('.appointment_option_quantity').val(vr.quantity); ao.find('.appointment_option_unit').val(vr.unit); }); }); },200); transactionStorageSaver(window_app); } } }); }); $(document).on('change', '.purchase_input', function() { var e = $(this); var iq = $(this).closest('.app_details'); var app = iq.attr('app'); iq = e.closest('.purchase_details'); var quantity_in = iq.find('.quantity'); var quantity = numeral(quantity_in.val() || 1).value(); var multiplier = 1; var totes = iq.find('.purchase_config[config="totes"]').attr('enabled'); var tax = iq.find('.purchase_config[config="tax"]').attr('enabled'); var original_me_tax = me_tax; if (totes != 'on') { if (quantity_in.attr('previously')) { var previously = numeral(quantity_in.attr('previously')).value(); if (quantity < previously) { multiplier = quantity / previously; } else { multiplier = quantity; } } else { multiplier = quantity; } } if (tax != 'on') { me_tax = 1; } var vendor = iq.find('.vendor').val(); var ago = iq.find('.ago').val(); var account = iq.find('.account').val(); var amount_in = iq.find('.amount'); var amount = numeral(amount_in.val()).value(); var tax_in = iq.find('.tax'); var tax = numeral(tax_in.val()).value(); var aux_in = iq.find('.aux'); var aux = numeral(aux_in.val()).value(); var total_in = iq.find('.total'); var total = numeral(total_in.val()).value(); $.each([total_in, amount_in, quantity_in, tax_in, aux_in], function(i,v) { var previously = $(v).val(); $(v).attr('previously', previously); }); var timestamp = Date.now(); if (e.hasClass('total')) { total = total * multiplier; total_in.val(numeral(total).format('0.00')); amount = total / me_tax; amount_in.val(numeral(amount).format('0.00')); tax = ((amount * me_tax) - amount); tax_in.val(numeral(tax).format('0.00')); aux = total - tax - amount; } else if (e.hasClass('aux')) { //$('.amount').val(numeral(total - aux - tax).format('0.00')); total_in.val(numeral(amount + aux + tax).format('0.00')); } else if (e.hasClass('tax')) { amount_in.val(numeral((total - aux - tax)).format('0.00')) } else if (e.hasClass('amount')) { amount = amount * multiplier; amount_in.val(numeral(amount).format('0.00')); total = amount * me_tax; total_in.val(numeral(total).format('0.00')); tax = ((amount * me_tax) - amount); tax_in.val(numeral(tax).format('0.00')); } else if (e.hasClass('quantity')) { amount = amount * multiplier; amount_in.val(numeral(amount).format('0.00')); total = amount * me_tax; total_in.val(numeral(total).format('0.00')); tax = ((amount * me_tax) - amount); tax_in.val(numeral(tax).format('0.00')); } else { amount = amount * multiplier; amount_in.val(numeral(amount).format('0.00')); total = amount * me_tax; total_in.val(numeral(total).format('0.00')); tax = ((amount * me_tax) - amount); tax_in.val(numeral(tax).format('0.00')); } me_tax = original_me_tax; transactionStorageSaver(app); }); $(document).on('keyup click', '.purchase_input', function() { var me = $(this); var value = me.val(); var attribute = me.attr('attribute'); var ad = me.closest('.app_details'); var pd = me.closest('.purchase_details'); var app = ad.attr('app'); console.log(me.attr('type')); if (!me.is('select') && me.attr('type') != 'checkbox') { console.log(me.attr('type')); $.ajax({ url: '/manager/transaction/autocomplete', type: 'GET', data: { attribute: attribute, value: value, app: app }, success: function(response) { var offset = me.offset(); var random = Math.random(); var now = Date.now(); var width = me.width(); var html = ''; $.each(response, function(i,v) { if (v.unformatted != '') { html += '
' + v.formatted + '
'; } }); var ac = ad.find('.transaction_autocomplete'); ac.html(html).show(); ac.attr('attribute', attribute); ac.attr('timestamp', now); ac.height(30 * response.length); ac.css({ 'top': offset.top - ac.height() - 3, 'left': offset.left, 'width': width }); me.attr('temp_uuid', random); } }); } }); $(document).on('blur', '.purchase_input', function() { setTimeout(function() { var now = Date.now(); var ac = $('.transaction_autocomplete'); $.each(ac, function(i,v) { if ($(v).attr('timestamp') < now - 300) { $(v).html('').hide(); } }); },500); }); $(document).on('click', '.autocomplete_item', function() { var item = $(this); var uuid = item.attr('uuid'); var ad = item.closest('.app_details'); var ac = ad.find('.transaction_autocomplete'); var attribute = ac.attr('attribute'); var input = ad.find('.purchase_input[temp_uuid="' + uuid + '"]'); input.val(item.attr('formatted')).trigger('change'); $('.transaction_autocomplete').html('').hide(); }); function transactionStorageSaver(app) { var appt = $('.appointment[app="' + app + '"]'); var movement = appt.find('.movement.app_setting[attribute="movement"]').val(); var uuid = appt.find('.app_details').attr('uuid'); var vendor = appt.find('.vendor.purchase_input').val(); var information = appt.find('.transaction_information.purchase_input').val(); var storage = localStorage.getItem('transactionSaver_' + app); var worth_it = 0; storage = {}; if (!storage[movement]) { storage[movement] = {}; storage[movement]['totals'] = { uuid: uuid, vendor: vendor, information: information }; } $('.purchase_details[app="' + app + '"]').each(function(i,v) { var uuid = $(v).attr('uuid'); if (!storage[movement][uuid]) { storage[movement][uuid] = {}; } $(v).find('.purchase_input,.purchase_config').each(function(ir,vr) { var attribute = $(vr).attr('attribute'); if (!storage[movement][uuid][attribute]) { } if ($(vr).attr('type') == 'checkbox') { if ($(vr).prop('checked')) { storage[movement][uuid][attribute] = 'on'; } else { storage[movement][uuid][attribute] = 'off'; } } else { storage[movement][uuid][attribute] = $(vr).val() || $(vr).attr('enabled'); } if (attribute == 'amount' || attribute == 'aux' || attribute == 'tax' || attribute == 'total') { storage[movement]['totals'][attribute] = numeral(storage[movement]['totals'][attribute]).value() + numeral(storage[movement][uuid][attribute]).value(); } }); }); $('.transaction_total').each( function(i,v) { var att = $(v).attr('attribute'); if (numeral(storage[movement]['totals'][att]).value() != 0) { worth_it = 1; } $(v).text(numeral(storage[movement]['totals'][att]).format('0.00')); }); var jStorage = JSON.stringify(storage); if (worth_it == 1) { localStorage.setItem('transactionSaver_' + app, jStorage); } else { localStorage.removeItem('transactionSaver_' + app); } return storage; } function transactionStorageRetriever(app) { var appt = $('.appointment[app="' + app + '"]'); var movement = appt.find('.movement.app_setting[attribute="movement"]').val(); var storage = localStorage.getItem('transactionSaver_' + app); var storage = eval(JSON.parse(storage) || {}); var uuid = appt.find('.app_details').attr('uuid'); if (storage[movement]) { if (storage[movement]['totals']['uuid']) { appt.find('.vendor.purchase_input').val(storage[movement]['totals']['vendor']); uuid = storage[movement]['totals']['uuid']; appt.find('.app_details').attr('uuid', uuid); appt.find('.purchase_details').attr('uuid', uuid); } $.each(storage[movement], function(i,v) { if (i != 'totals') { if (uuid != i) { appt.find('.add_transaction_item').trigger('click'); var count = appt.find('.purchase_details').length; $(appt.find('.purchase_details')[count - 1]).attr('uuid', i); $(appt.find('.purchase_details')[count - 1]).find('.remove_transaction_item').attr('uuid', i ); } $.each(storage[movement][i], function(ir,vr) { var input = $('.purchase_details[app="' + app + '"][uuid="' + i + '"]').find('[attribute="' + ir + '"]'); if (input.attr('type') == 'checkbox') { if (vr == 'on') { input.val('on').prop('checked', true); } else { input.val('off').prop('checked', false); } } else { input.val(vr); } }); } }); } appt.find('.purchase_input[attribute="vendor"]').trigger('change'); transactionStorageSaver(app); } function transactionStorageDeleter(app) { var appt = $('.appointment[app="' + app + '"]'); appt.find('.purchase_input').each(function(i,v) { if (!$(v).is('select')) { if ($(v).attr('attribute') == 'quantity') { $(v).val(1); } else { $(v).val(''); } } }); appt.find('.transaction_information').html('').val('').hide(); appt.find('.transaction_information_viewer').html('').hide(); appt.find('.appointment_model_selector_container').each(function(i,v) { $(v).html('').hide(); }); appt.find('.appointment_option_selector_container').each(function(i,v) { $(v).html('').hide(); }); var pd = appt.find('.purchase_details'); var length = pd.length; for (var n = 1; n <= length; n++) { $(pd[n]).remove(); } var storage = localStorage.removeItem('transactionSaver_' + app); } $(document).on('click', '.cancel_transaction', function() { var a = $(this); var app = a.attr('app'); var fapp = a.closest('.appointment').attr('formatted_name'); if (a.attr('armed') == 'yes') { transactionStorageDeleter(app); var obg = a.attr('obg'); a.css({'background-color': obg }); } else { a.attr('armed', 'yes'); var bgcolor = a.css('background-color'); a.attr('obg', bgcolor); a.css({'background-color': 'red' }); setTimeout(function() { a.css({'background-color': bgcolor }); a.attr('armed', 'no'); },2000); } }); $(document).on('click', '.add_transaction_item', function() { var ad = $(this).closest('.app_details'); var app = ad.attr('app'); var original_uuid = ad.attr('uuid'); var pd = $(this).closest('.app_details').find('.purchase_details[uuid="' + original_uuid + '"]'); var pdhtml = pd.clone(); var uuid = Math.random(); pdhtml.attr('uuid', uuid); pdhtml.find('.purchase_input').each(function(i,v) { if (!$(v).is('select')) { $(v).val(''); } }); pdhtml.append(''); $(this).closest('.app_details').find('.transaction_movement_container').append(pdhtml); }); $(document).on('click', '.remove_transaction_item', function() { var b = $(this); if (b.attr('armed') == 'yes') { var uuid = b.attr('uuid'); var app = b.attr('app'); $('.appointment[app="' + app + '"]').find('.purchase_details[uuid="' + uuid + '"]').remove(); transactionStorageSaver(app); } else { b.attr('armed', 'yes'); var bgcolor = b.css('background-color'); b.css({'background-color': 'red' }); setTimeout(function() { b.css({'background-color': bgcolor }); b.attr('armed', 'no'); },2000); } }); $(document).on('click', '.transaction_history_retriever', function() { var thr = $(this); var app = thr.attr('app'); var timestamp = thr.attr('timestamp') || Date.now(); $.ajax({ url: '/manager/transaction/history_retriever', data: { app: app, timestamp: timestamp }, success: function(response) { thr.attr('timestamp',response.timestamp); var history = JSON.parse(response.data); localStorage.setItem('transactionSaver_' + app, response.data); transactionStorageRetriever(app); } }); }); $(document).on('keyup','.vendor',function() { var e = $(this); var span = e.next(); span.children().each(function(i,v) { var text = v.text(); if (text.match(/^(val)/)) { } }); var text = e.val(); }); $(document).on('click', '.plusminus', function() { var iq = $(this).closest('.purchase_details'); var app = iq.attr('app'); $.each(['amount','tax','aux','total'], function(i,v) { var a = iq.find('.' + v).val(); var b = a * -1; iq.find('.' + v).val(b); }); transactionStorageSaver(app); }); $(document).on('click', '.purchase_config', function() { var con = $(this); var config = con.attr('config'); var pd = con.closest('.purchase_details'); var app = pd.attr('app'); var enabled = con.attr('enabled'); if (enabled == 'on') { con.attr('enabled', 'off'); con.css({ 'background-color':'lightgrey'}); } else { con.css({ 'background-color':'lightgreen'}); con.attr('enabled', 'on'); } var new_enabled = con.attr('enabled'); if (!con.closest('.appointment_edit_area')) { settingSetter({ 'app': app, 'setting': config, 'value': new_enabled }); } var total = pd.find('.purchase_input[attribute="total"]'); var quantity = pd.find('.purchase_input[attribute="quantity"]'); var new_total = total.val(); if (config == 'tax') { if (new_enabled == 'on') { if (pd.find('.purchase_config[config="totes"]').attr('enabled') == 'on') { var new_total = numeral(total.val()).value() / numeral(quantity.val()).value(); total.trigger('change'); } else { var new_total = numeral(total.val()).value() * numeral(quantity.val()).value(); quantity.trigger('change'); } } else { if (pd.find('.purchase_config[config="totes"]').attr('enabled') == 'on') { var new_total = numeral(total.val()).value() / numeral(quantity.val()).value(); total.trigger('change'); } else { var new_total = numeral(total.val()).value() * numeral(quantity.val()).value(); quantity.trigger('change'); } total.trigger('change'); } } if (config == 'totes') { var subtotal = pd.find('.purchase_input[attribute="amount"]'); if (new_enabled == 'on') { new_total = numeral(total.val()).value() / numeral(quantity.val()).value(); total.val(new_total); total.trigger('change'); } else { new_total = numeral(total.val()).value() * numeral(quantity.val()).value(); total.val(new_total); quantity.trigger('change'); } } transactionStorageSaver(app); }); $(document).on('change', '.transaction.movement', function() { var app = $(this).closest('.app_details').attr('app'); var movement = $(this).val(); if (movement == 'transfer') { $('.transferable_transaction').show(); $('.purchase_details').hide(); $('.inventory_transaction').hide(); } else if (movement == 'inventory') { $('.transferable_transaction').hide(); $('.purchase_details').hide(); $('.inventory_transaction').show(); } else { $('.transferable_transaction').hide(); $('.purchase_details').show(); $('.inventory_transaction').hide(); } $.ajax({ url: '/manager/transaction/movement', type: 'GET', data: { app: app, movement: movement }, success: function(response) { $('.transaction_movement_container[app="' + app + '"]').html(response.html); transactionStorageRetriever(app); } }); }); $(document).on('change', '.app_setting', function() { var app = $(this).attr('app') || $(this).closest('.app_details').attr('app') || $(this).closest('.appointment').attr('app') || $(this).closest('.wind').attr('app'); var setting = $(this).attr('attribute'); var value = $(this).val(); settingSetter({ 'app': app, 'setting': setting, 'value': value }); }); $(document).on('focus','.purchase_input', function() { if ($(this).val() == '0.00') { $(this).val(''); } }); $(document).on('click', '.record_purchase', function() { var timestamp = Date.now(); var time_machine = localStorage.getItem('time_machine'); var timeshift = localStorage.getItem('timeshift') + localStorage.getItem('timeshift_scope'); var iq = $(this).closest('.app_details'); var app = iq.attr('app'); var ago = iq.find('.ago').val(); var warranty = iq.find('.warranty').val(); var schedule = iq.find('.schedule').val(); var duration = iq.find('.duration').val() || ''; var navigation = iq.closest('.appointment').attr('navigation'); var transaction_information = iq.find('.transaction_information').val(); var account = iq.find('.account').val(); var project = iq.find('.project').val(); var notes = iq.find('.notes').val(); var movement = iq.find('.movement').val(); var currency = iq.find('.currency').val(); var amount = iq.find('.amount').val(); var quantity = iq.find('.quantity').val() || 1; var state = iq.find('.state').val(); var manufacturer = iq.find('.manufacturer').val(); var vendor = iq.find('.vendor').val(); var record_vendor = iq.find('.record_vendor').val(); if (record_vendor == true) { record_vendor = 'on'; } var tax = iq.find('.tax').val(); var has_tax = iq.find('.purchase_config[config="tax"]').attr('enabled'); var has_totes = iq.find('.purchase_config[config="totes"]').attr('enabled'); var aux = iq.find('.aux').val(); var item = iq.find('.item').val(); var model = iq.find('.model').val(); var total = iq.find('.total').val(); var unit = iq.find('.unit').val() || 1; var transfer_amount = iq.find('.transfer_amount').val(); var transfer_aux = iq.find('.transfer_aux').val(); var to_account = iq.find('.to_account').val(); var data = { ago: ago, duration: duration, warranty: warranty, schedule: schedule, timestamp: timestamp, currency: currency, app: app, notes: notes, account: account, project: project, movement: movement, time_machine: time_machine, timeshift: timeshift, amount: amount, item: item, state: state, model: model, tax: tax, aux: aux, total: total, manufacturer: manufacturer, vendor: vendor, record_vendor: record_vendor, quantity: quantity, unit: unit, transfer_amount: transfer_amount, to_account: to_account, has_tax: has_tax, has_totes: has_totes, transaction_information: transaction_information }; data['transactions'] = JSON.stringify(transactionStorageSaver(app)); if (1 == 1) { $.ajax({ url: '/manager/transaction/record', type: 'POST', data: data, success: function(response) { centreViewWriter(response['cv']); continent_record({'uuid':response['uuid'], 'app':response['app'],'purpose':'app','timestamp':response['timestamp'],'navigation':navigation}); appointment_chron(); appClearer(app); transactionStorageDeleter(app); } }); } });