diff --git a/RIGS/static/js/interaction.js b/RIGS/static/js/interaction.js index 6b7eff6f..b87c0135 100644 --- a/RIGS/static/js/interaction.js +++ b/RIGS/static/js/interaction.js @@ -1,77 +1,48 @@ function setupItemTable(items_json) { objectitems = JSON.parse(items_json) - $.each(objectitems, function(key, val) { + $.each(objectitems, function (key, val) { objectitems[key] = JSON.parse(val); }) - newitem = -1 + newitem = -1; } function updatePrices() { // individual rows - $('.item_row').each(function() { - var pk = $(this).data('pk'); + var sum = 0; + for (var pk in objectitems) { var fields = objectitems[pk].fields; var sub = fields.cost * fields.quantity; - $('#item-'+pk+' .sub-total').html(parseFloat(sub).toFixed(2)).data('subtotal', sub); - }) + $('#item-' + pk + ' .sub-total').html(parseFloat(sub).toFixed(2)).data('subtotal', sub); - var sum = 0; - - $('.sub-total').each(function() { - sum += Number($(this).data('subtotal')); - }); - $('#sumtotal').text(parseFloat(sum).toFixed(2)); - var vat = sum * Number($('#vat-rate').data('rate')); - $('#vat').text(parseFloat(vat).toFixed(2)); - $('#total').text(parseFloat(sum+vat).toFixed(2)); -} - -function addItemRow(url) { - $tbody = $('#item-table tbody'); - $.ajax({ - url:url, - success:function(r) { - $tbody.append(r); - updatePrices(); - } - }); -} - -var csrftoken = $.cookie('csrftoken'); -function csrfSafeMethod(method) { - // these HTTP methods do not require CSRF protection - return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); -} -$.ajaxSetup({ - crossDomain: false, // obviates need for sameOrigin test - beforeSend: function(xhr, settings) { - if (!csrfSafeMethod(settings.type)) { - xhr.setRequestHeader("X-CSRFToken", csrftoken); - } + sum += Number(sub); } -}); -$('#item-table').on('click', '.item-delete', function() { - delete objectitems[$(this).data('pk')] - $('#item-'+$(this).data('pk')).remove(); + $('#sumtotal').text(parseFloat(sum).toFixed(2)); + var vat = sum * Number($('#vat-rate').data('rate')); + $('#vat').text(parseFloat(vat).toFixed(2)); + $('#total').text(parseFloat(sum + vat).toFixed(2)); +} + +$('#item-table').on('click', '.item-delete', function () { + delete objectitems[$(this).data('pk')] + $('#item-' + $(this).data('pk')).remove(); updatePrices(); }); -$('#item-table').on('click', '.item-add', function() { - $('#item-form').data('pk', newitem--); +$('#item-table').on('click', '.item-add', function () { + $('#item-form').data('pk', newitem); // Set the form values - var fields = objectitems[pk].fields; $('#item_name').val(''); $('#item_description').val(''); $('#item_quantity').val(''); $('#item_cost').val(''); }); -$('#item-table').on('click', '.item-edit', function() { +$('#item-table').on('click', '.item-edit', function () { // set the pk as we will need this later var pk = $(this).data('pk'); - $('#item-form').data('pk', pk); + $('#item-form').data('pk', pk); // Set the form values var fields = objectitems[pk].fields; @@ -81,54 +52,74 @@ $('#item-table').on('click', '.item-edit', function() { $('#item_cost').val(fields.cost); }); -$('body').on('submit','#item-form', function(e) { - e.preventDefault(); +$('body').on('submit', '#item-form', function (e) { + e.preventDefault(); var pk = $(this).data('pk'); $('#itemModal').modal('hide'); - if(pk < 0) { - // @todo: Add new item + var fields; + if (pk == newitem--) { + // Create the new data structure and add it on. + fields = new Object(); + fields['name'] = $('#item_name').val() + fields['description'] = $('#item_description').val(); + fields['cost'] = $('#item_cost').val(); + fields['quantity'] = $('#item_quantity').val(); + + var order = 0; + for (item in objectitems) { + order++; + } + + fields['order'] = order; + + objectitems[pk] = new Object(); + objectitems[pk]['fields'] = fields; + + // Add the new table + $('#new-item-row').clone().attr('id', 'item-' + pk).data('pk', pk).appendTo('#item-table-body'); } else { + // Existing item // update data structure - var fields = objectitems[pk].fields; + fields = objectitems[pk].fields; fields.name = $('#item_name').val() fields.description = $('#item_description').val(); fields.cost = $('#item_cost').val(); fields.quantity = $('#item_quantity').val(); objectitems[pk].fields = fields; - // update the table - $row = $('#item-'+pk); - $row.find('.name').html(fields.name); - $row.find('.description').html(fields.description); - $row.find('.cost').html(parseFloat(fields.cost).toFixed(2)); - $row.find('.quantity').html(fields.quantity); - - updatePrices(); } + // update the table + $row = $('#item-' + pk); + $row.find('.name').html(fields.name); + $row.find('.description').html(fields.description); + $row.find('.cost').html(parseFloat(fields.cost).toFixed(2)); + $row.find('.quantity').html(fields.quantity); + + updatePrices(); }); -$('body').on('submit', '.itemised_form', function(e) { +$('body').on('submit', '.itemised_form', function (e) { $('#id_items_json').val(JSON.stringify(objectitems)); }); // Return a helper with preserved width of cells -var fixHelper = function(e, ui) { - ui.children().each(function() { - $(this).width($(this).width()); - }); - return ui; +var fixHelper = function (e, ui) { + ui.children().each(function () { + $(this).width($(this).width()); + }); + return ui; }; $("#item-table tbody").sortable({ - helper: fixHelper, - update: function(e, ui) { - info = $(this).sortable("toArray"); - itemorder = new Array(); - $.each(info, function(key, value) { - pk = $('#'+value).data('pk'); - objectitems[pk].fields.order = key; - }); + helper: fixHelper, + update: function (e, ui) { + info = $(this).sortable("toArray"); + itemorder = new Array(); + $.each(info, function (key, value) { + pk = $('#' + value).data('pk'); + objectitems[pk].fields.order = key; + }); - } + } }); \ No newline at end of file diff --git a/RIGS/templates/RIGS/item_row.html b/RIGS/templates/RIGS/item_row.html index ce55dc14..1ceb6f9f 100644 --- a/RIGS/templates/RIGS/item_row.html +++ b/RIGS/templates/RIGS/item_row.html @@ -1,11 +1,9 @@ -
|
+
+
+
+
+ |
+ £ | ++ | £ | + {% if edit %} ++ + + | + {% endif %} +