Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 9c194331

Von Moritz Bunkus vor fast 8 Jahren hinzugefügt

  • ID 9c19433144efc5b50d90a969aa9ac6ea65b2dbbf
  • Vorgänger 945bae4c
  • Nachfolger cd07d289

SimpleSystemSetting: Umstellung von »Warengruppen«

Unterschiede anzeigen:

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

  
3
use strict;
4

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

  
7
use SL::Helper::Flash;
8
use SL::Locale::String;
9
use SL::DB::Default;
10
use SL::DB::Manager::PartsGroup;
11

  
12
use Rose::Object::MakeMethods::Generic (
13
  scalar                  => [ qw(partsgroup) ],
14
  'scalar --get_set_init' => [ qw(all_partsgroups) ],
15
);
16

  
17
__PACKAGE__->run_before('check_auth');
18
__PACKAGE__->run_before('load_partsgroup', only => [ qw(edit update delete) ]);
19

  
20
#
21
# actions
22
#
23

  
24
sub action_list {
25
  my ($self) = @_;
26

  
27
  $self->render('partsgroup/list',
28
                title   => t8('Partsgroups'),
29
               );
30
}
31

  
32
sub action_new {
33
  my ($self) = @_;
34

  
35
  $self->partsgroup( SL::DB::PartsGroup->new );
36
  $self->render('partsgroup/form',
37
                 title => t8('Add partsgroup'),
38
               );
39
}
40

  
41
sub action_edit {
42
  my ($self) = @_;
43

  
44
  $self->render('partsgroup/form',
45
                 title   => t8('Edit partsgroup'),
46
                );
47
}
48

  
49
sub action_create {
50
  my ($self) = @_;
51

  
52
  $self->partsgroup( SL::DB::PartsGroup->new );
53
  $self->create_or_update;
54
}
55

  
56
sub action_update {
57
  my ($self) = @_;
58
  $self->create_or_update;
59
}
60

  
61
sub action_delete {
62
  my ($self) = @_;
63

  
64
  if ( !$self->partsgroup->orphaned ) {
65
    flash_later('error', $::locale->text('The partsgroup has been used and cannot be deleted.'));
66
  } elsif ( eval { $self->partsgroup->delete; 1; } ) {
67
    flash_later('info',  $::locale->text('The partsgroup has been deleted.'));
68
  } else {
69
    flash_later('error', $::locale->text('The partsgroup has been used and cannot be deleted.'));
70
  };
71
  $self->redirect_to(action => 'list');
72
}
73

  
74
sub action_reorder {
75
  my ($self) = @_;
76

  
77
  SL::DB::PartsGroup->reorder_list(@{ $::form->{partsgroup_id} || [] });
78
  $self->render(\'', { type => 'json' });
79
}
80

  
81
#
82
# filters
83
#
84

  
85
sub check_auth {
86
  $::auth->assert('config');
87
}
88

  
89
sub load_partsgroup {
90
  my ($self) = @_;
91

  
92
  $self->partsgroup( SL::DB::PartsGroup->new(id => $::form->{id})->load );
93
}
94

  
95
sub init_all_partsgroups { SL::DB::Manager::PartsGroup->get_all_sorted }
96

  
97
#
98
# helpers
99
#
100

  
101
sub create_or_update {
102
  my ($self) = @_;
103
  my $is_new = !$self->partsgroup->id;
104

  
105
  my $params = delete($::form->{partsgroup}) || { };
106

  
107
  $self->partsgroup->assign_attributes(%{ $params });
108

  
109
  my @errors = $self->partsgroup->validate;
110

  
111
  if (@errors) {
112
    flash('error', @errors);
113
    $self->render('partsgroup/form',
114
                   title => $is_new ? t8('Add partsgroup') : t8('Edit partsgroup'),
115
                 );
116
    return;
117
  }
118

  
119
  $self->partsgroup->save;
120

  
121
  flash_later('info', $is_new ? t8('The partsgroup has been created.') : t8('The partsgroup has been saved.'));
122
  $self->redirect_to(action => 'list');
123
}
124

  
125
1;
126

  
127
__END__
128

  
129
=encoding utf-8
130

  
131
=head1 NAME
132

  
133
SL::Controller::PartsGroup - CRUD controller for partsgroups
134

  
135
=head1 SYNOPSIS
136

  
137
A new controller to create / edit / delete partsgroups.
138

  
139
Partsgroups can only be deleted if they haven't been used anywhere.
140

  
141
=head1 OBSOLETE PARTSGROUPS
142

  
143
A partsgroup can be deleted if it hasn't been used anywhere / is orphaned.
144

  
145
A partsgroup can be set to obsolete, which means new items can't be assigned
146
that partsgroup, but old items with that partsgroup can keep it. And you can
147
also still filter for these obsolete partsgroups in reports.
148

  
149
=head1 ISSUES
150

  
151
Unlike the old version (pe.pl/PE.pm), there is no way to filter/search the
152
partsgroups in the overview page, it always shows the complete (ordered) list,
153
ordered by sortkey.
154

  
155
=head1 AUTHOR
156

  
157
G. Richardson E<lt>grichardson@kivitendo-premium.deE<gt>
158

  
159
=cut
SL/Controller/SimpleSystemSetting.pm
40 40
    ],
41 41
  },
42 42

  
43
  parts_group => {
44
    # Make locales.pl happy: $self->render("simple_system_setting/_parts_group_form")
45
    class  => 'PartsGroup',
46
    titles => {
47
      list => t8('Partsgroups'),
48
      add  => t8('Add partsgroup'),
49
      edit => t8('Edit partsgroup'),
50
    },
51
    list_attributes => [
52
      { method => 'partsgroup', title => t8('Description') },
53
      { method => 'obsolete',   title => t8('Obsolete'), formatter => sub { $_[0]->obsolete ? t8('yes') : t8('no') } },
54
    ],
55
  },
56

  
43 57
  pricegroup => {
44 58
    # Make locales.pl happy: $self->render("simple_system_setting/_pricegroup_form")
45 59
    class  => 'Pricegroup',
locale/de/all
3074 3074
  'The parts for this delivery order have already been transferred out.' => 'Die Artikel dieses Lieferscheins wurden bereits ausgelagert.',
3075 3075
  'The parts have been removed.' => 'Die Waren wurden aus dem Lager entnommen.',
3076 3076
  'The parts have been transferred.' => 'Die Waren wurden umgelagert.',
3077
  'The partsgroup has been created.' => 'Die Warengruppe wurde erstellt.',
3078
  'The partsgroup has been deleted.' => 'Die Warengruppe wurde gelöscht.',
3079
  'The partsgroup has been saved.' => 'Die Warengruppe wurde gespeichert.',
3080
  'The partsgroup has been used and cannot be deleted.' => 'Die Warengruppe wurde bereits verwendet und kann nicht gelöscht werden.',
3081 3077
  'The password is too long (maximum length: #1).' => 'Das Passwort ist zu lang (maximale Länge: #1).',
3082 3078
  'The password is too short (minimum length: #1).' => 'Das Password ist zu kurz (minimale Länge: #1).',
3083 3079
  'The password is weak (e.g. it can be found in a dictionary).' => 'Das Passwort ist schwach (z.B. wenn es in einem Wörterbuch steht).',
menus/user/00-erp.yaml
1072 1072
  name: Partsgroups
1073 1073
  order: 900
1074 1074
  params:
1075
    action: PartsGroup/list
1075
    action: SimpleSystemSetting/list
1076
    type: parts_group
1076 1077
- parent: system
1077 1078
  id: system_part_classification
1078 1079
  name: Parts Classification
templates/webpages/partsgroup/form.html
1
[%- USE HTML -%][%- USE LxERP -%][%- USE L -%][%- USE T8 -%]
2

  
3
[% SET style="width: 400px" %]
4
[% SET size=15 %]
5

  
6
<h1>[% HTML.escape(title) %]</h1>
7

  
8
<form action="controller.pl" method="post">
9

  
10
[%- INCLUDE 'common/flash.html' %]
11

  
12
[%- L.hidden_tag("id", SELF.partsgroup.id) %]
13

  
14
<table>
15
  <tr>
16
    <th align="right">[% 'Description' | $T8 %]</th>
17
    <td>
18
       [%- L.input_tag("partsgroup.partsgroup", SELF.partsgroup.partsgroup) %]
19
   </td>
20
  [% IF SELF.partsgroup.id %]
21
  <tr>
22
    <th align="right">[% 'Obsolete' | $T8 %]</th>
23
    <td>[% L.checkbox_tag('partsgroup.obsolete', checked = SELF.partsgroup.obsolete, for_submit=1) %]</td>
24
  </tr>
25
  </tr>
26
  [% END %]
27
</table>
28

  
29
 <p>
30
  [% L.hidden_tag("action", "PartsGroup/dispatch") %]
31
  [% L.submit_tag("action_" _  (SELF.partsgroup.id ? "update" : "create"), LxERP.t8('Save'), onclick="return check_prerequisites();") %]
32
  [%- IF SELF.partsgroup.id AND SELF.partsgroup.orphaned -%]
33
    [% L.submit_tag("action_delete", LxERP.t8('Delete')) %]
34
  [%- END %]
35
  <a href="[% SELF.url_for(action='list') %]">[%- LxERP.t8("Cancel") %]</a>
36
 </p>
37

  
38
 <hr>
39

  
40
<script type="text/javascript">
41
<!--
42
function check_prerequisites() {
43
  if ($('#partsgroup_partsgroup').val() === "") {
44
    alert(kivi.t8('The description is missing.'));
45
    return false;
46
  }
47
  return true;
48
}
49
-->
50
</script>
templates/webpages/partsgroup/list.html
1
[%- USE HTML -%][%- USE LxERP -%][%- USE L -%][%- USE T8 -%][%- INCLUDE 'common/flash.html' %]
2

  
3
<h1>[% title %]</h1>
4

  
5
<p>
6
 <table width="100%" id="partsgroup_list">
7
  <thead>
8
   <tr class="listheading">
9
    <th align="center" width="1%"><img src="image/updown.png" alt="[ LxERP.t8('reorder item') %]"></th>
10
    <th>[% 'Description' | $T8 %]</th>
11
    <th>[% 'Obsolete'    | $T8 %]</th>
12
   </tr>
13
  </thead>
14

  
15
  <tbody>
16
   [%- FOREACH partsgroup = SELF.all_partsgroups %]
17
    <tr class="listrow" id="partsgroup_id_[% partsgroup.id %]">
18
     <td align="center" class="dragdrop"><img src="image/updown.png" alt="[ LxERP.t8('reorder item') %]"></td>
19
     <td><a href="[% SELF.url_for(action='edit', id=partsgroup.id) %]">[% HTML.escape(partsgroup.partsgroup) %]</a></td>
20
     <td>[% HTML.escape(partsgroup.obsolete) %]</a></td>
21
    </tr>
22
   [%- END %]
23
  </tbody>
24
 </table>
25
</p>
26

  
27
<hr height="3">
28

  
29
[% L.sortable_element('#partsgroup_list tbody', url=SELF.url_for(action='reorder'), with='partsgroup_id') %]
30

  
31
<p>
32
 <a href="[% SELF.url_for(action='new') %]">[%- 'Add' | $T8 %]</a>
33
</p>
templates/webpages/simple_system_setting/_parts_group_form.html
1
[%- USE LxERP -%][%- USE L -%]
2
<table>
3
 <tr>
4
  <th align="right">[% LxERP.t8("Description") %]</th>
5
  <td>
6
   [%- L.input_tag("object.partsgroup", SELF.object.partsgroup, "data-validate"="required", "data-title"=LxERP.t8("Description")) %]
7
  </td>
8
 </tr>
9
 <tr>
10
  <th align="right">[% LxERP.t8("Obsolete") %]</th>
11
  <td>[% L.checkbox_tag("object.obsolete", checked=SELF.object.obsolete, for_submit=1) %]</td>
12
 </tr>
13
</table>

Auch abrufbar als: Unified diff