1 namespace('kivi.Part', function(ns) {
 
   3   ns.open_history_popup = function() {
 
   4     var id = $("#part_id").val();
 
   6       url:    'controller.pl?action=Part/history&part.id=' + id,
 
   7       dialog: { title: kivi.t8('History') },
 
  11   ns.save = function() {
 
  12     var data = $('#ic').serializeArray();
 
  13     data.push({ name: 'action', value: 'Part/save' });
 
  15     $.post("controller.pl", data, kivi.eval_json_result);
 
  18   ns.use_as_new = function() {
 
  19     var oldid = $("#part_id").val();
 
  20     $('#ic').attr('action', 'controller.pl?action=Part/use_as_new&old_id=' + oldid);
 
  24   ns.delete = function() {
 
  25     var data = $('#ic').serializeArray();
 
  26     data.push({ name: 'action', value: 'Part/delete' });
 
  28     $.post("controller.pl", data, kivi.eval_json_result);
 
  31   ns.reformat_number = function(event) {
 
  32     $(event.target).val(kivi.format_amount(kivi.parse_amount($(event.target).val()), -2));
 
  35   ns.set_tab_active_by_index = function (index) {
 
  36     $("#ic_tabs").tabs({active: index})
 
  39   ns.set_tab_active_by_name= function (name) {
 
  40     var index = $('#ic_tabs a[href=#' + name + ']').parent().index();
 
  41     ns.set_tab_active_by_index(index);
 
  44   ns.reorder_items = function(order_by) {
 
  45     var dir = $('#' + order_by + '_header_id a img').attr("data-sort-dir");
 
  46     var part_type = $("#part_part_type").val();
 
  49     if (part_type === 'assortment') {
 
  50       $('#assortment thead a img').remove();
 
  51       data = $('#assortment :input').serializeArray();
 
  52     } else if ( part_type === 'assembly') {
 
  53       $('#assembly thead a img').remove();
 
  54       data = $('#assembly :input').serializeArray();
 
  63       src = "image/down.png";
 
  66     $('#' + order_by + '_header_id a').append('<img border=0 data-sort-dir=' + dir + ' src=' + src + ' alt="' + kivi.t8('sort items') + '">');
 
  68     data.push({ name: 'action',    value: 'Part/reorder_items' },
 
  69               { name: 'order_by',  value: order_by             },
 
  70               { name: 'part_type', value: part_type            },
 
  71               { name: 'sort_dir',  value: dir                  });
 
  73     $.post("controller.pl", data, kivi.eval_json_result);
 
  76   ns.assortment_recalc = function() {
 
  77     var data = $('#assortment :input').serializeArray();
 
  78     data.push({ name: 'action', value: 'Part/update_item_totals' },
 
  79               { name: 'part_type', value: 'assortment'                   });
 
  81     $.post("controller.pl", data, kivi.eval_json_result);
 
  84   ns.assembly_recalc = function() {
 
  85     var data = $('#assembly :input').serializeArray();
 
  86     data.push( { name: 'action',    value: 'Part/update_item_totals' },
 
  87                { name: 'part_type', value: 'assembly'                        });
 
  89     $.post("controller.pl", data, kivi.eval_json_result);
 
  92   ns.set_assortment_sellprice = function() {
 
  93     $("#part_sellprice_as_number").val($("#items_sellprice_sum").html());
 
  94     // ns.set_tab_active_by_name('basic_data');
 
  95     // $("#part_sellprice_as_number").focus();
 
  98   ns.set_assortment_lsg_sellprice = function() {
 
  99     $("#items_lsg_sellprice_sum_basic").closest('td').find('input').val($("#items_lsg_sellprice_sum").html());
 
 102   ns.set_assortment_douglas_sellprice = function() {
 
 103     $("#items_douglas_sellprice_sum_basic").closest('td').find('input').val($("#items_douglas_sellprice_sum").html());
 
 106   ns.set_assortment_lastcost = function() {
 
 107     $("#part_lastcost_as_number").val($("#items_lastcost_sum").html());
 
 108     // ns.set_tab_active_by_name('basic_data');
 
 109     // $("#part_lastcost_as_number").focus();
 
 112   ns.set_assembly_sellprice = function() {
 
 113     $("#part_sellprice_as_number").val($("#items_sellprice_sum").html());
 
 114     // ns.set_tab_active_by_name('basic_data');
 
 115     // $("#part_sellprice_as_number").focus();
 
 118   ns.renumber_positions = function() {
 
 119     var part_type = $("#part_part_type").val();
 
 121     if (part_type === 'assortment') {
 
 122       rows = $('.assortment_item_row [name="position"]');
 
 123     } else if ( part_type === 'assembly') {
 
 124       rows = $('.assembly_item_row [name="position"]');
 
 126     $(rows).each(function(idx, elt) {
 
 128       var row = $(elt).closest('tr');
 
 129       if ( idx % 2 === 0 ) {
 
 130         if ( row.hasClass('listrow1') ) {
 
 131           row.removeClass('listrow1');
 
 132           row.addClass('listrow0');
 
 135         if ( row.hasClass('listrow0') ) {
 
 136           row.removeClass('listrow0');
 
 137           row.addClass('listrow1');
 
 143   ns.delete_item_row = function(clicked) {
 
 144     var row = $(clicked).closest('tr');
 
 146     var part_type = $("#part_part_type").val();
 
 147     ns.renumber_positions();
 
 148     if (part_type === 'assortment') {
 
 149       ns.assortment_recalc();
 
 150     } else if ( part_type === 'assembly') {
 
 151       ns.assembly_recalc();
 
 155   ns.add_assortment_item = function() {
 
 156     if ($('#add_assortment_item_id').val() === '') return;
 
 158     $('#row_table_id thead a img').remove();
 
 160     var data = $('#assortment :input').serializeArray();
 
 161     data.push({ name: 'action', value: 'Part/add_assortment_item' },
 
 162               { name: 'part.id', value: $('#part_id').val()       },
 
 163               { name: 'part.part_type', value: 'assortment'       });
 
 165     $.post("controller.pl", data, kivi.eval_json_result);
 
 168   ns.add_assembly_item = function() {
 
 169     if ($('#add_assembly_item_id').val() === '') return;
 
 171     var data = $('#assembly :input').serializeArray();
 
 172     data.push({ name: 'action', value: 'Part/add_assembly_item' },
 
 173               { name: 'part.id', value: $("#part_id").val()     },
 
 174               { name: 'part.part_type', value: 'assortment'     });
 
 176     $.post("controller.pl", data, kivi.eval_json_result);
 
 179   ns.redisplay_items = function(data) {
 
 181     var part_type = $("#part_part_type").val();
 
 182     if (part_type === 'assortment') {
 
 183       old_rows = $('.assortment_item_row').detach();
 
 184     } else if ( part_type === 'assembly') {
 
 185       old_rows = $('.assembly_item_row').detach();
 
 188     $(data).each(function(idx, elt) {
 
 189       new_rows.push(old_rows[elt.old_pos - 1]);
 
 191     if (part_type === 'assortment') {
 
 192       $(new_rows).appendTo($('#assortment_items'));
 
 193     } else if ( part_type === 'assembly') {
 
 194       $(new_rows).appendTo($('#assembly_items'));
 
 196     ns.renumber_positions();
 
 199   ns.focus_last_assortment_input = function () {
 
 200     $("#assortment_items tr:last").find('input[type=text]').filter(':visible:first').focus();
 
 203   ns.focus_last_assembly_input = function () {
 
 204     $("#assembly_rows tr:last").find('input[type=text]').filter(':visible:first').focus();
 
 207   ns.show_multi_items_dialog = function(part_type,part_id) {
 
 209     $('#row_table_id thead a img').remove();
 
 212       url: 'controller.pl?action=Part/show_multi_items_dialog',
 
 213       data: { callback:         'Part/add_multi_' + part_type + '_items',
 
 214               callback_data_id: 'ic',
 
 215               'part.part_type': part_type,
 
 218       id: 'jq_multi_items_dialog',
 
 220         title: kivi.t8('Add multiple items'),
 
 228   ns.close_multi_items_dialog = function() {
 
 229     $('#jq_multi_items_dialog').dialog('close');
 
 234   ns.makemodel_renumber_positions = function() {
 
 235     $('.makemodel_row [name="position"]').each(function(idx, elt) {
 
 240   ns.delete_makemodel_row = function(clicked) {
 
 241     var row = $(clicked).closest('tr');
 
 244     ns.makemodel_renumber_positions();
 
 247   ns.add_makemodel_row = function() {
 
 248     if ($('#add_makemodelid').val() === '') return;
 
 250     var data = $('#makemodel_table :input').serializeArray();
 
 251     data.push({ name: 'action', value: 'Part/add_makemodel_row' });
 
 253     $.post("controller.pl", data, kivi.eval_json_result);
 
 256   ns.focus_last_makemodel_input = function () {
 
 257     $("#makemodel_rows tr:last").find('input[type=text]').filter(':visible:first').focus();
 
 261   ns.reload_bin_selection = function() {
 
 262     $.post("controller.pl", { action: 'Part/warehouse_changed', warehouse_id: function(){ return $('#part_warehouse_id').val() } },   kivi.eval_json_result);
 
 268     // TODO: allow units for assortment items
 
 269     $('#add_assortment_item_id').on('set_item:PartPicker', function(e,o) { $('#add_item_unit').val(o.unit) });
 
 271     $('#ic').on('focusout', '.reformat_number', function(event) {
 
 272        ns.reformat_number(event);
 
 275     $('.add_assortment_item_input').keydown(function(event) {
 
 276       if(event.keyCode == 13) {
 
 277         event.preventDefault();
 
 278         if ($("input[name='add_items[+].parts_id']").val() != '' ) {
 
 279           kivi.Part.show_multi_items_dialog("assortment");
 
 280          // ns.add_assortment_item();
 
 286     $('.add_assembly_item_input').keydown(function(event) {
 
 287       if(event.keyCode == 13) {
 
 288         event.preventDefault();
 
 289         if ($("input[name='add_items[+].parts_id']").val() != '' ) {
 
 290           kivi.Part.show_multi_items_dialog("assortment");
 
 291           // ns.add_assembly_item();
 
 297     $('.add_makemodel_input').keydown(function(event) {
 
 298       if(event.keyCode == 13) {
 
 299         event.preventDefault();
 
 300         ns.add_makemodel_row();
 
 305     $('#part_warehouse_id').change(kivi.Part.reload_bin_selection);