Pflichtenhefte Angebote/Aufträge: "Artikel allen Abschnitten zuweisen" fixen
[kivitendo-erp.git] / js / requirement_spec.js
index 61babb8..00e4319 100644 (file)
@@ -174,6 +174,15 @@ ns.ask_delete_text_block = function(key, opt) {
   return true;
 };
 
+ns.text_block_input_key_down = function(event) {
+  if(event.keyCode == 13) {
+    event.preventDefault();
+    var prefix = $(this).attr('id').match("^edit_function_block_\\d+")[0];
+    $("#" + prefix + "_submit").click();
+    return false;
+  }
+};
+
 // --------------------------------------------------------------------------------
 // ------------------------------ sections and items ------------------------------
 // --------------------------------------------------------------------------------
@@ -218,9 +227,7 @@ ns.disable_edit_item_commands = function(key, opt) {
 };
 
 ns.disable_add_function_block_command = function(key, opt) {
-  if (ns.find_item_id(opt.$trigger))
-    return false;
-  return opt.$trigger.attr('id') != "section-list-empty";
+  return opt.$trigger.attr('id') == "sections";
 };
 
 ns.cancel_edit_item_form = function(form_id_base, options) {
@@ -274,11 +281,11 @@ ns.item_popup_menu_hidden = function(opt) {
 // -------------------------------------------------------------------------
 
 ns.paste_template = function(key, opt, other_data) {
-  open_jqm_window({ url: 'controller.pl?action=RequirementSpec/select_template_to_paste' });
+  kivi.popup_dialog({ url: 'controller.pl?action=RequirementSpec/select_template_to_paste', dialog: { title: kivi.t8("Select template to paste") } });
 };
 
 ns.paste_selected_template = function(template_id) {
-  $('#jqm_popup_dialog').jqmClose();
+  $('#jqueryui_popup_dialog').dialog("close");
 
   var data = {
     action:               "RequirementSpec/paste_template",
@@ -295,13 +302,37 @@ ns.paste_selected_template = function(template_id) {
   return true;
 };
 
+// -------------------------------------------------------------------------
+// ---------------------------- basic settings -----------------------------
+// -------------------------------------------------------------------------
+ns.standard_basic_settings_ajax_call = function(key, opt) {
+  if (key == 'cancel') {
+    if (confirm(kivi.t8('Do you really want to cancel?'))) {
+      $('#basic_settings').show();
+      $('#basic_settings_form').remove();
+    }
+    return true;
+  }
+
+  var data = 'action=RequirementSpec/ajax_' + key + '&id=' + encodeURIComponent($('#requirement_spec_id').val());
+
+  $.post("controller.pl", data, kivi.eval_json_result);
+
+  return true;
+};
+
 // -------------------------------------------------------------------------
 // -------------------------- time/cost estimate ---------------------------
 // -------------------------------------------------------------------------
 
 ns.standard_time_cost_estimate_ajax_call = function(key, opt) {
-  if ((key == 'cancel') && !confirm(kivi.t8('Do you really want to cancel?')))
+  if (key == 'cancel') {
+    if (confirm(kivi.t8('Do you really want to cancel?'))) {
+      $('#time_cost_estimate').show();
+      $('#time_cost_estimate_form_container').remove();
+    }
     return true;
+  }
 
   var data = "action=RequirementSpec/ajax_" + key + "_time_and_cost_estimate&";
 
@@ -317,6 +348,14 @@ ns.standard_time_cost_estimate_ajax_call = function(key, opt) {
   return true;
 };
 
+ns.time_cost_estimate_input_key_down = function(event) {
+  if(event.keyCode == 13) {
+    event.preventDefault();
+    ns.standard_time_cost_estimate_ajax_call('save');
+    return false;
+  }
+};
+
 // -------------------------------------------------------------------------
 // --------------------------- quotations/orders ---------------------------
 // -------------------------------------------------------------------------
@@ -326,8 +365,18 @@ ns.find_quotation_order_id = function(clicked_elt) {
 };
 
 ns.standard_quotation_order_ajax_call = function(key, opt) {
-  if ((key == 'cancel') && !confirm(kivi.t8('Do you really want to cancel?')))
+  if (key == 'cancel') {
+    if (confirm(kivi.t8('Do you really want to cancel?'))) {
+      $('#quotations_and_orders').show();
+      $('#quotations_and_orders_article_assignment,#quotations_and_orders_new,#quotations_and_orders_update').remove();
+    }
     return true;
+  }
+
+  else if ((key == 'create') && $('#quotations_and_orders_form INPUT[name="sections[].order_part_id"]').filter(function(idx, elt) { return ($(elt).val() || '') == '' }).size()) {
+    alert(kivi.t8('There is one or more sections for which no part has been assigned yet; therefore creating the new record is not possible yet.'));
+    return false;
+  }
 
   var data = 'action=RequirementSpecOrder/' + key
            + '&' + $('#requirement_spec_id').serialize();
@@ -359,10 +408,18 @@ ns.disable_create_quotation_order_commands = function(key, opt) {
 };
 
 ns.assign_order_part_id_to_all = function() {
-  var order_part_id = $('#quoations_and_orders_order_id').val();
-  $('#quotations_and_orders_form SELECT[name="sections[].order_part_id"]').each(function(idx, elt) {
+  var order_part_id   = $('#quotations_and_orders_order_id').val();
+  var order_part_name = $('#quotations_and_orders_order_id_name').val();
+
+  $('#quotations_and_orders_form INPUT[name="sections[].order_part_id"]').each(function(idx, elt) {
     $(elt).val(order_part_id);
   });
+
+  $('#quotations_and_orders_form [id^=quotations_and_orders_sections_order_pard_id_]').filter(function() {
+    return $(this).attr('id') && $(this).attr('id').match("^quotations_and_orders_sections_order_pard_id_[0-9]+_name$");
+  }).each(function(idx, elt) {
+    $(elt).val(order_part_name);
+  });
 };
 
 // -------------------------------------------------------------------------
@@ -410,10 +467,10 @@ ns.disable_versioned_copy_item_commands = function(key, opt) {
 };
 
 ns.create_version = function() {
-  open_jqm_window({ url:  'controller.pl',
-                    data: { action:              'RequirementSpecVersion/new',
-                            requirement_spec_id: $('#requirement_spec_id').val() },
-                    id:   'new_requirement_spec_version_window' });
+  kivi.popup_dialog({ url:    'controller.pl',
+                      data:   { action:              'RequirementSpecVersion/new',
+                                requirement_spec_id: $('#requirement_spec_id').val() },
+                      dialog: { title: kivi.t8('Create a new version') }});
   return true;
 };
 
@@ -442,6 +499,36 @@ ns.revert_to_versioned_copy_ajax_call = function(key, opt) {
   return true;
 };
 
+// -------------------------------------------------------------------------
+// ------------------------------- tab widget ------------------------------
+// -------------------------------------------------------------------------
+var content_div_ids_for_tab_headers = {
+    'tab-header-function-block':     'function-blocks-tab'
+  , 'tab-header-basic-settings':     'ui-tabs-1'
+  , 'tab-header-time-cost-estimate': 'ui-tabs-2'
+  , 'tab-header-versions':           'ui-tabs-3'
+  , 'tab-header-quotations-orders':  'ui-tabs-4'
+};
+
+ns.tabs_before_activate = function(event, ui) {
+  if (!ui.oldTab)
+    return true;
+
+  var content_div_id = content_div_ids_for_tab_headers[ $(ui.oldTab).attr('id') ];
+  if (!content_div_id || (content_div_id == 'function-blocks-tab'))
+    return true;
+
+  var inputs = $('#' + content_div_id).find('input,select,textarea').filter('[type!=hidden]');
+  if (!inputs.size() || confirm(kivi.t8("If you switch to a different tab without saving you will lose the data you've entered in the current tab.")))
+    return true;
+
+  var new_focus = $(inputs).filter(':focusable')[0];
+  if (new_focus)
+    $(new_focus).focus();
+
+  return false;
+};
+
 // -------------------------------------------------------------------------
 // ----------------------------- context menus -----------------------------
 // -------------------------------------------------------------------------
@@ -505,6 +592,23 @@ ns.create_context_menus = function(is_template) {
     }, general_actions)
   });
 
+  $.contextMenu({
+    selector: '.basic-settings-context-menu',
+    items:    $.extend({
+        heading: { name: kivi.t8('Basic settings actions'), className: 'context-menu-heading' }
+      , edit:    { name: kivi.t8('Edit'), icon: "edit", callback: kivi.requirement_spec.standard_basic_settings_ajax_call }
+    }, general_actions)
+  });
+
+  $.contextMenu({
+    selector: '.edit-basic-settings-context-menu',
+    items:    $.extend({
+        heading: { name: kivi.t8('Basic settings actions'), className: 'context-menu-heading' }
+      , save:    { name: kivi.t8('Save'),   icon: "save",  callback: kivi.requirement_spec.standard_basic_settings_ajax_call }
+      , cancel:  { name: kivi.t8('Cancel'), icon: "close", callback: kivi.requirement_spec.standard_basic_settings_ajax_call }
+    }, general_actions)
+  });
+
   $.contextMenu({
     selector: '.time-cost-estimate-context-menu',
     items:    $.extend({