]> wagnertech.de Git - kivitendo-erp.git/commitdiff
Pflichtenhefte: Funktion Abschnitte/Funktionsblöcke neu nummerieren
authorMoritz Bunkus <m.bunkus@linet-services.de>
Mon, 3 Nov 2014 15:36:18 +0000 (16:36 +0100)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Wed, 5 Nov 2014 08:11:19 +0000 (09:11 +0100)
SL/Controller/RequirementSpec.pm
css/requirement_spec.css
image/format-list-ordered.png [new file with mode: 0644]
js/locale/de.js
js/requirement_spec.js
locale/de/all

index f762b9794a14a4fdd19d25033757d5bb62306f32..d88ec8f29a873042f4108ac3d53a5a3d6f928a74 100644 (file)
@@ -265,6 +265,33 @@ sub action_paste_template {
   $self->invalidate_version->render($self);
 }
 
+sub action_renumber_sections {
+  my ($self)  = @_;
+
+  my %numbers = map { ($_ => 1)                                                                         } qw(section function_block);
+  my %formats = map { my $method = "${_}_number_format"; ($_ => $self->requirement_spec->type->$method) } qw(section function_block);
+  my @items   = @{ $self->requirement_spec->sections_sorted };
+
+  $self->requirement_spec->db->with_transaction(sub {
+    while (@items) {
+      my $item = shift @items;
+      my $type = $item->parent_id ? 'function_block' : 'section';
+
+      $item->update_attributes(fb_number => SL::PrefixedNumber->new(number => $formats{$type} || 0)->set_to($numbers{$type}));
+
+      $numbers{$type}++;
+
+      unshift @items, @{ $item->children_sorted };
+    }
+
+    $self->requirement_spec->invalidate_version unless $self->requirement_spec->is_template;
+
+    1;
+  });
+
+  $self->redirect_to(action => 'show', id => $self->requirement_spec->id);
+}
+
 #
 # filters
 #
index f4c4cd4ecdb4dc50cfcd5815ae49f409c8c29296..1237133983ad4954901fc8c513f61d3c9af326d1 100644 (file)
@@ -50,6 +50,7 @@ table.rs_input_field input, table.rs_input_field select {
 .context-menu-item.icon-pdf    { background-image: url("../image/application-pdf.png"); }
 .context-menu-item.icon-add-picture { background-image: url("../image/add-picture.png"); }
 .context-menu-item.icon-download    { background-image: url("../image/download.png"); }
+.context-menu-item.icon-renumber    { background-image: url("../image/format-list-ordered.png"); }
 
 /* ------------------------------------------------------------ */
 /* Sections & function blocks */
diff --git a/image/format-list-ordered.png b/image/format-list-ordered.png
new file mode 100644 (file)
index 0000000..3ee1ea7
Binary files /dev/null and b/image/format-list-ordered.png differ
index a382fd990c19cc261e6bc09a1f72f89ed5b0d088..34be75d99a307037c811e4bf1d9ed09757938ea5 100644 (file)
@@ -27,6 +27,7 @@ namespace("kivi").setupLocale({
 "Delete requirement spec":"Pflichtenheft löschen",
 "Delete template":"Vorlage löschen",
 "Delete text block":"Textblock löschen",
+"Do you really want do continue?":"Wollen Sie wirklich fortfahren?",
 "Do you really want to cancel?":"Wollen Sie wirklich abbrechen?",
 "Do you really want to revert to this version?":"Wollen Sie wirklich auf diese Version zurücksetzen?",
 "Do you want to set the account number \"#1\" to \"#2\" and the name \"#3\" to \"#4\"?":"Soll die Kontonummer \"#1\" zu \"#2\" und den Name \"#3\" zu \"#4\" geändert werden?",
@@ -40,12 +41,15 @@ namespace("kivi").setupLocale({
 "Function block actions":"Funktionsblockaktionen",
 "If you switch to a different tab without saving you will lose the data you've entered in the current tab.":"Wenn Sie auf einen anderen Tab wechseln, ohne vorher zu speichern, so gehen die im aktuellen Tab eingegebenen Daten verloren.",
 "Map":"Karte",
+"No":"Nein",
 "Part picker":"Artikelauswahl",
 "Paste":"Einfügen",
 "Paste template":"Vorlage einfügen",
 "Project link actions":"Projektverknüpfungs-Aktionen",
 "Quotations/Orders actions":"Aktionen für Angebote/Aufträge",
+"Re-numbering all sections and function blocks in the order they are currently shown cannot be undone.":"Das Neu-Nummerieren aller Abschnitte und Funktionsblöcke kann nicht rückgängig gemacht werden.",
 "Remove article":"Artikel entfernen",
+"Renumber sections and function blocks":"Abschnitte/Funktionsblöcke neu nummerieren",
 "Requirement spec actions":"Pflichtenheftaktionen",
 "Requirement spec template actions":"Pflichtenheftvorlagen-Aktionen",
 "Revert to version":"Auf Version zurücksetzen",
@@ -71,6 +75,7 @@ namespace("kivi").setupLocale({
 "Update":"Erneuern",
 "Update quotation/order":"Auftrag/Angebot aktualisieren",
 "Version actions":"Aktionen für Versionen",
+"Yes":"Ja",
 "flat-rate position":"Pauschalposition",
 "time and effort based position":"Aufwandsposition"
 });
index b4e9cd950db2361633760e1f789ab418fbcd6f8b..cc2f3323bb261df90111b746a959f3494ced9d9b 100644 (file)
@@ -413,6 +413,47 @@ ns.init_function_block_keypress_events = function(form_id) {
     .bind('keypress', 'shift+return', function(event) { return ns.submit_function_block.apply(this, [ event, true ]); });
 };
 
+ns.renumber_callback = function(accepted) {
+  console.log(accepted ? "yay :)" : "oh no :(");
+  if (!accepted)
+    return;
+
+  $.ajax({
+    url:     'controller.pl?action=RequirementSpec/renumber_sections',
+    type:    'post',
+    data:    { id: $('#requirement_spec_id').val() },
+    success: kivi.eval_json_result
+  });
+};
+
+ns.renumber = function(opt) {
+  $('#rs-dialog-confirm').remove();
+
+  var text1   = kivi.t8('Re-numbering all sections and function blocks in the order they are currently shown cannot be undone.');
+  var text2   = kivi.t8('Do you really want do continue?');
+  var $dialog = $('<div id="rs-dialog-confirm"><p>' + text1 + '</p><p>' + text2 + '</p></div>').hide().appendTo('body');
+  var buttons = {};
+
+  buttons[kivi.t8('Yes')] = function() {
+    $(this).dialog('close');
+    ns.renumber_callback(true);
+  };
+
+  buttons[kivi.t8('No')] = function() {
+    $(this).dialog('close');
+    ns.renumber_callback(false);
+  };
+
+  $dialog.dialog({
+      resizable: false
+    , modal:     true
+    , title:     kivi.t8('Are you sure?')
+    , height:    250
+    , width:     400
+    , buttons:   buttons
+  });
+};
+
 // -------------------------------------------------------------------------
 // ------------------------------- templates -------------------------------
 // -------------------------------------------------------------------------
@@ -829,6 +870,8 @@ ns.create_context_menus = function(is_template) {
       // , sep99:           "---------"
       , copy_reqspec:    { name: kivi.t8('Copy template'),   icon: "copy",   callback: kivi.requirement_spec.copy_reqspec   }
       , delete_reqspec:  { name: kivi.t8('Delete template'), icon: "delete", callback: kivi.requirement_spec.delete_reqspec }
+      , sep_paste_template: "---------"
+      , renumber:        { name: kivi.t8('Renumber sections and function blocks'), icon: "renumber", callback: kivi.requirement_spec.renumber }
     };
 
     $.contextMenu({
@@ -848,6 +891,8 @@ ns.create_context_menus = function(is_template) {
       , copy_reqspec:       { name: kivi.t8('Copy requirement spec'),   icon: "copy",   callback: kivi.requirement_spec.copy_reqspec   }
       , delete_reqspec:     { name: kivi.t8('Delete requirement spec'), icon: "delete", callback: kivi.requirement_spec.delete_reqspec }
       , sep_paste_template: "---------"
+      , renumber:           { name: kivi.t8('Renumber sections and function blocks'), icon: "renumber", callback: kivi.requirement_spec.renumber }
+      , sep_paste_template: "---------"
       , paste_template:     { name: kivi.t8('Paste template'),     icon: "paste",  callback: kivi.requirement_spec.paste_template }
     };
 
index 195c189c7f8896fa67ab703f1d7ce5d78fa5ebbf..76b703b30837a492cae76b01d6a70da943323bd4 100755 (executable)
@@ -834,6 +834,7 @@ $self->{texts} = {
   'Do not link to a project.'   => 'Nicht mit einem Projekt verknüpfen.',
   'Do not modify this position' => 'Diese Position nicht verändern',
   'Do not set default buchungsgruppe' => 'Nie Standardbuchungsgruppe setzen',
+  'Do you really want do continue?' => 'Wollen Sie wirklich fortfahren?',
   'Do you really want to cancel?' => 'Wollen Sie wirklich abbrechen?',
   'Do you really want to close the following SEPA exports? No payment will be recorded for bank collections that haven\'t been marked as executed yet.' => 'Wollen Sie wirklich die folgenden SEPA-Exporte abschließen? Für Überweisungen, die noch nicht gebucht wurden, werden dann keine Zahlungen verbucht.',
   'Do you really want to close the following SEPA exports? No payment will be recorded for bank transfers that haven\'t been marked as executed yet.' => 'Wollen Sie wirklich die folgenden SEPA-Exporte abschließen? Für Überweisungen, die noch nicht gebucht wurden, werden dann keine Zahlungen verbucht.',
@@ -1927,6 +1928,7 @@ $self->{texts} = {
   'RFQs'                        => 'Preisanfragen',
   'ROP'                         => 'Mindestlagerbestand',
   'Ranges of numbers'           => 'Nummernkreise',
+  'Re-numbering all sections and function blocks in the order they are currently shown cannot be undone.' => 'Das Neu-Nummerieren aller Abschnitte und Funktionsblöcke kann nicht rückgängig gemacht werden.',
   'Re-run analysis'             => 'Analyse wiederholen',
   'Receipt'                     => 'Zahlungseingang',
   'Receipt posted!'             => 'Beleg gebucht!',
@@ -1962,6 +1964,7 @@ $self->{texts} = {
   'Removed spoolfiles!'         => 'Druckdateien entfernt!',
   'Removed text blocks: #1'     => 'Entfernte Textblöcke: #1',
   'Removing marked entries from queue ...' => 'Markierte Einträge werden von der Warteschlange entfernt ...',
+  'Renumber sections and function blocks' => 'Abschnitte/Funktionsblöcke neu nummerieren',
   'Replace the orphaned currencies by other not orphaned currencies. To do so, please delete the currency in the textfields above and replace it by another currency. You could loose or change unintentionally exchangerates. Go on very carefully since you could destroy transactions.' => 'Ersetze die Währungen durch andere gültige Währungen. Wenn Sie sich hierfür entscheiden, ersetzen Sie bitte alle Währungen, die oben angegeben sind, durch Währungen, die in Ihrem System ordnungsgemäß eingetragen sind. Alle eingetragenen Wechselkurse für die verwaiste Währung werden dabei gelöscht. Bitte gehen Sie sehr vorsichtig vor, denn die betroffenen Buchungen können unter Umständen kaputt gehen.',
   'Report Positions'            => 'Berichte',
   'Report about warehouse contents' => 'Lagerbestand anzeigen',