Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision cbdc5c37

Von Moritz Bunkus vor fast 8 Jahren hinzugefügt

  • ID cbdc5c3786939e37bcd3c2fcaf0cb5e5607c54b7
  • Vorgänger 2023adb0
  • Nachfolger 558c234e

Belegvorlagen: Anzeigen, Umbenennen, Löschen

Unterschiede anzeigen:

SL/Controller/RecordTemplate.pm
1
package SL::Controller::RecordTemplate;
2

  
3
use strict;
4

  
5
use base qw(SL::Controller::Base);
6

  
7
use SL::Helper::Flash qw(flash);
8
use SL::Locale::String qw(t8);
9
use SL::DB::RecordTemplate;
10

  
11
use Rose::Object::MakeMethods::Generic (
12
  'scalar --get_set_init' => [ qw(template_type template templates data) ],
13
);
14

  
15
__PACKAGE__->run_before('check_auth');
16

  
17
my %modules = (
18
  ar_transaction => {
19
    controller    => 'ar.pl',
20
    load_action   => 'load_record_template',
21
    save_action   => 'save_record_template',
22
    form_selector => '#form',
23
  },
24

  
25
  ap_transaction => {
26
    controller    => 'ap.pl',
27
    load_action   => 'load_record_template',
28
    save_action   => 'save_record_template',
29
    form_selector => '#form',
30
  },
31

  
32
  gl_transaction => {
33
    controller    => 'gl.pl',
34
    load_action   => 'load_record_template',
35
    save_action   => 'save_record_template',
36
    form_selector => '#form',
37
  },
38
);
39

  
40
#
41
# actions
42
#
43

  
44
sub action_show_dialog {
45
  my ($self) = @_;
46
  $self
47
    ->js
48
    ->dialog->open({
49
      html   => $self->dialog_html,
50
      id     => 'record_template_dialog',
51
      dialog => {
52
        title => t8('Record templates'),
53
      },
54
    })
55
    ->focus("#record_template_dialog_new_template_name")
56
    ->render;
57
}
58

  
59
sub action_rename {
60
  my ($self) = @_;
61

  
62
  $self->template_type($self->template->template_type);
63
  $self->template->update_attributes(template_name => $::form->{template_name});
64

  
65
  $self
66
    ->js
67
    ->html('#record_template_dialog', $self->dialog_html)
68
    ->focus("#record_template_dialog_new_template_name")
69
    ->reinit_widgets
70
    ->render;
71
}
72

  
73
sub action_delete {
74
  my ($self) = @_;
75

  
76
  $self->template_type($self->template->template_type);
77
  $self->template->delete;
78

  
79
  $self
80
    ->js
81
    ->html('#record_template_dialog', $self->dialog_html)
82
    ->focus("#record_template_dialog_new_template_name")
83
    ->reinit_widgets
84
    ->render;
85
}
86

  
87
#
88
# helpers
89
#
90

  
91
sub check_auth {
92
  $::auth->assert('ap_transactions | ar_transactions | gl_transactions');
93
}
94

  
95
sub init_template_type { $::form->{template_type} or die 'need template_type'   }
96
sub init_data          { $modules{ $_[0]->template_type }                       }
97
sub init_template      { SL::DB::RecordTemplate->new(id => $::form->{id})->load }
98

  
99
sub init_templates {
100
  my ($self) = @_;
101

  
102
  return scalar SL::DB::Manager::RecordTemplate->get_all_sorted(
103
    where => [ template_type => $self->template_type ],
104
  );
105
}
106

  
107
sub dialog_html {
108
  my ($self) = @_;
109

  
110
  return $self->render('record_template/dialog', { layout => 0, output => 0 });
111
}
112

  
113
1;
SL/DB/RecordTemplate.pm
3 3
use strict;
4 4

  
5 5
use DateTime::Format::Strptime;
6
use List::Util qw(first);
6 7

  
7 8
use SL::DB::MetaSetup::RecordTemplate;
8 9
use SL::DB::Manager::RecordTemplate;
......
112 113
  }
113 114
}
114 115

  
116
sub template_name_to_use {
117
  my ($self, @names) = @_;
118

  
119
  return first { ($_ // '') ne '' } (@names, $self->template_name, $::locale->text('unnamed record template'));
120
}
121

  
115 122
1;
116 123
__END__
117 124

  
js/kivi.RecordTemplate.js
1
namespace('kivi.RecordTemplate', function(ns) {
2
  'use strict';
3

  
4
  ns.popup = function(template_type) {
5
    $.get('controller.pl', {
6
      action:        'RecordTemplate/show_dialog.js',
7
      template_type: template_type,
8
    }, kivi.eval_json_result);
9
  };
10

  
11
  ns.create = function() {
12
    var new_name = $("#record_template_dialog_new_template_name").val();
13
    if (new_name === '') {
14
      alert(kivi.t8('Error: Name missing'));
15
      return false;
16
    }
17

  
18
    kivi.RecordTemplate.save(undefined, new_name);
19
  };
20

  
21
  ns.save = function(id, name) {
22
    var $type = $("#record_template_dialog_template_type");
23
    var $form = $($type.data('form_selector'));
24

  
25
    if (!$form) {
26
      console.log("nothing found for form_selector " + $type.data("form_selector"));
27
      return false;
28
    }
29

  
30
    var data = $form.serializeArray().filter(function(val) { return val.name !== 'action'; });
31
    data.push({ name: 'action',                            value: $type.data('save_action') });
32
    data.push({ name: 'record_template_id',                value: id });
33
    data.push({ name: 'record_template_new_template_name', value: name });
34

  
35
    $.post($type.data('controller'), data, kivi.eval_json_result);
36
  };
37

  
38
  ns.load = function(id) {
39
    if (!confirm(kivi.t8('Do you really want to load this record template? All unsaved data will be lose.')))
40
      return false;
41

  
42
    var $type = $("#record_template_dialog_template_type");
43
    var url   = encodeURIComponent($type.data('controller'))
44
              + '?action=' + encodeURIComponent($type.data('load_action'))
45
              + '&id='     + encodeURIComponent(id);
46

  
47
    console.log(url);
48

  
49
    window.location = url;
50
  };
51

  
52
  ns.rename = function(id) {
53
    var current_name = $("#record_template_dialog_template_name_" + id).val();
54
    var new_name     = prompt(kivi.t8("Please enter the new name:"), current_name);
55

  
56
    if ((new_name === current_name) || !new_name || (new_name === ''))
57
      return;
58

  
59
    $.post('controller.pl', {
60
      action: 'RecordTemplate/rename.js',
61
      id: id,
62
      template_name: new_name
63
    }, kivi.eval_json_result);
64
  };
65

  
66
  ns.delete = function(id) {
67
    if (!confirm(kivi.t8('Do you really want to delete this record template?')))
68
      return;
69

  
70
    $.post('controller.pl', {
71
      action: 'RecordTemplate/delete.js',
72
      id: id
73
    }, kivi.eval_json_result);
74
  };
75
});
js/locale/de.js
36 36
"Do you really want do continue?":"Wollen Sie wirklich fortfahren?",
37 37
"Do you really want to cancel?":"Wollen Sie wirklich abbrechen?",
38 38
"Do you really want to delete this draft?":"Wollen Sie diesen Entwurf wirklich löschen?",
39
"Do you really want to delete this record template?":"Wollen Sie diese Belegvorlage wirklich löschen?",
40
"Do you really want to load this record template? All unsaved data will be lose.":"Wollen Sie diese Belegvorlage wirklich laden? Alle nicht gespeicherten Daten gehen dabei verloren.",
39 41
"Do you really want to revert to this version?":"Wollen Sie wirklich auf diese Version zurücksetzen?",
40 42
"Do you really want to save?":"Wollen Sie wirklich speichern?",
41 43
"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?",
......
46 48
"Edit project link":"Projektverknüpfung bearbeiten",
47 49
"Edit text block":"Textblock bearbeiten",
48 50
"Enter longdescription":"Langtext eingeben",
51
"Error: Name missing":"Fehler: Name fehlt",
49 52
"Function block actions":"Funktionsblockaktionen",
50 53
"Hide all details":"Alle Details verbergen",
51 54
"Hide details":"Details verbergen",
......
58 61
"Part picker":"Artikelauswahl",
59 62
"Paste":"Einfügen",
60 63
"Paste template":"Vorlage einfügen",
64
"Please enter the new name:":"Bitte geben Sie den neuen Namen ein:",
61 65
"Please select a customer.":"Bitte wählen Sie einen Kunden aus.",
62 66
"Please select a vendor.":"Bitte wählen Sie einen Lieferanten aus.",
63 67
"Price Types":"Preistypen",
locale/de/all
203 203
  'Add new currency'            => 'Neue Währung hinzufügen',
204 204
  'Add new custom variable'     => 'Neue benutzerdefinierte Variable erfassen',
205 205
  'Add new price rule item'     => 'Neue Bedingung hinzufügen',
206
  'Add new record template'     => 'Neue Belegvorlage hinzufügen',
206 207
  'Add note'                    => 'Notiz erfassen',
207 208
  'Add part'                    => 'Artikel hinzufügen',
208 209
  'Add partsgroup'              => 'Warengruppe hinzufügen',
......
978 979
  'Do you really want to delete this draft?' => 'Wollen Sie diesen Entwurf wirklich löschen?',
979 980
  'Do you really want to delete this invoice?' => 'Wollen Sie diese Rechnung wirklich löschen?',
980 981
  'Do you really want to delete this object?' => 'Wollen Sie dieses Objekt wirklich löschen?',
982
  'Do you really want to delete this record template?' => 'Wollen Sie diese Belegvorlage wirklich löschen?',
981 983
  'Do you really want to delete this warehouse?' => 'Wollen Sie dieses Lager wirklich löschen?',
984
  'Do you really want to load this record template? All unsaved data will be lose.' => 'Wollen Sie diese Belegvorlage wirklich laden? Alle nicht gespeicherten Daten gehen dabei verloren.',
982 985
  'Do you really want to revert to this version?' => 'Wollen Sie wirklich auf diese Version zurücksetzen?',
983 986
  'Do you really want to save?' => 'Wollen Sie wirklich speichern?',
984 987
  'Do you want to <b>limit</b> your search?' => 'Wollen Sie Ihre Suche <b>spezialisieren</b>?',
......
1268 1271
  'Existing file on server'     => 'Auf dem Server existierende Datei',
1269 1272
  'Existing pending follow-ups for this item' => 'Noch nicht erledigte Wiedervorlagen f&uuml;r dieses Dokument',
1270 1273
  'Existing profiles'           => 'Existierende Profile',
1274
  'Existing templates'          => 'Vorhandene Belegvorlagen',
1271 1275
  'Exp. bill. date'             => 'Vorauss. Abr.datum',
1272 1276
  'Exp. netamount'              => 'Vorauss. Summe',
1273 1277
  'Expected Tax'                => 'Erwartete Steuern',
......
1662 1666
  'List of database upgrades to be applied:' => 'Liste der noch einzuspielenden Datenbankupgrades:',
1663 1667
  'List of tax zones'           => 'Liste der Steuerzonen',
1664 1668
  'List open SEPA exports'      => 'Noch nicht ausgeführte SEPA-Exporte anzeigen',
1669
  'Load'                        => 'Laden',
1665 1670
  'Load an existing draft'      => 'Einen bestehenden Entwurf laden',
1666 1671
  'Load letter draft'           => 'Briefentwurf laden',
1667 1672
  'Load profile'                => 'Profil laden',
......
1753 1758
  'Mobile2'                     => 'Mobil 2',
1754 1759
  'Model'                       => 'Lieferanten-Art-Nr.',
1755 1760
  'Model (with X being a number)' => 'Lieferanten-Art-Nr. (X ist eine fortlaufende Zahl)',
1761
  'Modification date'           => 'Änderungsdatum',
1756 1762
  'Module'                      => 'Modul',
1757 1763
  'Module home page'            => 'Modul-Webseite',
1758 1764
  'Module name'                 => 'Modulname',
......
2102 2108
  'Please enter the name for the new client.' => 'Bitte geben Sie einen Namen für den neuen Mandanten ein.',
2103 2109
  'Please enter the name for the new group.' => 'Bitte geben Sie den Namen für die neue Gruppe ein.',
2104 2110
  'Please enter the name of the database that will be used as the template for the new database:' => 'Bitte geben Sie den Namen der Datenbank an, die als Vorlage f&uuml;r die neue Datenbank benutzt wird:',
2111
  'Please enter the new name:'  => 'Bitte geben Sie den neuen Namen ein:',
2105 2112
  'Please enter the sales tax identification number.' => 'Bitte geben Sie die Umsatzsteueridentifikationsnummer an.',
2106 2113
  'Please enter the taxnumber in the client configuration.' => 'Bitte geben Sie in der Mandantenkonfiguration die Steuernummer an.',
2107 2114
  'Please enter values'         => 'Bitte Werte eingeben',
......
2305 2312
  'Record Vendor Invoice'       => 'Einkaufsrechnung erfassen',
2306 2313
  'Record in'                   => 'Buchen auf',
2307 2314
  'Record number'               => 'Belegnummer',
2315
  'Record templates'            => 'Belegvorlagen',
2308 2316
  'Record type to create'       => 'Anzulegender Belegtyp',
2309 2317
  'Recorded Tax'                => 'Gespeicherte Steuern',
2310 2318
  'Recorded taxkey'             => 'Gespeicherter Steuerschlüssel',
......
2335 2343
  'Removed spoolfiles!'         => 'Druckdateien entfernt!',
2336 2344
  'Removed text blocks: #1'     => 'Entfernte Textblöcke: #1',
2337 2345
  'Removing marked entries from queue ...' => 'Markierte Einträge werden von der Warteschlange entfernt ...',
2346
  'Rename'                      => 'Umbenennen',
2338 2347
  'Renumber sections and function blocks' => 'Abschnitte/Funktionsblöcke neu nummerieren',
2339 2348
  '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.',
2340 2349
  'Report Positions'            => 'Berichte',
......
3147 3156
  'There are no entries that match the filter.' => 'Es gibt keine Einträge, auf die der Filter zutrifft.',
3148 3157
  'There are no items in stock.' => 'Dieser Artikel ist nicht eingelagert.',
3149 3158
  'There are no items on your TODO list at the moment.' => 'Ihre Aufgabenliste enth&auml;lt momentan keine Eintr&auml;ge.',
3159
  'There are no record templates yet.' => 'Es gibt noch keine Belegvorlagen.',
3150 3160
  'There are several options you can handle this problem, please select one:' => 'Bitte wählen Sie eine der folgenden Optionen, um mit dem Problem umzugehen:',
3151 3161
  'There are still transfers not matching the qty of the delivery order. Stock operations can not be changed later. Do you really want to proceed?' => 'Einige der Lagerbewegungen sind nicht vollständig und Lagerbewegungen können nachträglich nicht mehr verändert werden. Wollen Sie wirklich fortfahren?',
3152 3162
  'There are undefined currencies in your system.' => 'In Ihrer Datenbank wurden Währungen benutzt, die nicht ordnungsgemäß in den Währungen eingetragen wurden.',
templates/webpages/record_template/dialog.html
1
[%- USE T8 %]
2
[%- USE L %]
3
[%- USE LxERP %]
4
[%- USE HTML %][%- USE JavaScript -%]
5

  
6
[% L.hidden_tag("", SELF.template_type, id="record_template_dialog_template_type",
7
                "data-controller"=SELF.data.controller,
8
                "data-load_action"=SELF.data.load_action,
9
                "data-save_action"=SELF.data.save_action,
10
                "data-form_selector"=SELF.data.form_selector) %]
11

  
12
<h2 class="listheading">[% LxERP.t8("Add new record template") %]</h2>
13

  
14
<p>
15
 [% LxERP.t8("Name") %]:
16
 [% L.input_tag("", "", id="record_template_dialog_new_template_name") %]
17
 [% L.button_tag("kivi.RecordTemplate.create()", LxERP.t8("Save")) %]
18
</p>
19

  
20
[% SET templates = SELF.templates.as_list %]
21

  
22
[% IF templates.size %]
23

  
24
<h2 class="listheading">[% LxERP.t8("Existing templates") %]</h2>
25

  
26
<table>
27
 <thead>
28
  <tr class="listheading">
29
   <th>[% LxERP.t8("Action") %]</th>
30
   <th>[% LxERP.t8("Name") %]</th>
31
   <th>[% LxERP.t8("Modification date") %]</th>
32
  </tr>
33
 </thead>
34

  
35
 <tbody>
36
[% FOREACH template = templates %]
37
  <tr class="listrow">
38
   <td>
39
    [% L.hidden_tag("", template.template_name, id="record_template_dialog_template_name_" _ template.id) %]
40
    [% L.button_tag("kivi.RecordTemplate.load(" _ template.id _ ")", LxERP.t8("Load")) %]
41
    [% L.button_tag("kivi.RecordTemplate.save(" _ template.id _ ")", LxERP.t8("Save")) %]
42
    [% L.button_tag("kivi.RecordTemplate.rename(" _ template.id _ ")", LxERP.t8("Rename")) %]
43
    [% L.button_tag("kivi.RecordTemplate.delete(" _ template.id _ ")", LxERP.t8("Delete")) %]
44
   </td>
45
   <td>[% HTML.escape(template.template_name) %]</td>
46
   <td>[% HTML.escape(template.mtime.to_kivitendo) %] [% HTML.escape(template.mtime.to_kivitendo_time) %]</td>
47
  </tr>
48
[% END %]
49
 </tbody>
50

  
51
</table>
52
[% ELSE %]
53

  
54
<p>[% LxERP.t8("There are no record templates yet.") %]</p>
55

  
56
[% END %]

Auch abrufbar als: Unified diff