047ed658c7d4b0ad04fcae2df0ca871250da0d2c
[kivitendo-erp.git] / SL / Controller / Pricegroup.pm
1 package SL::Controller::Pricegroup;
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::Pricegroup;
11
12 use Rose::Object::MakeMethods::Generic (
13   scalar                  => [ qw(pricegroup) ],
14   'scalar --get_set_init' => [ qw(all_pricegroups) ],
15 );
16
17 __PACKAGE__->run_before('check_auth');
18 __PACKAGE__->run_before('load_pricegroup', only => [ qw(edit update delete) ]);
19
20 #
21 # actions
22 #
23
24 sub action_list {
25   my ($self) = @_;
26
27   $self->render('pricegroup/list',
28                 title   => t8('Pricegroups'),
29                );
30 }
31
32 sub action_new {
33   my ($self) = @_;
34
35   $self->pricegroup( SL::DB::Pricegroup->new );
36   $self->render('pricegroup/form',
37                  title => t8('Add pricegroup'),
38                );
39 }
40
41 sub action_edit {
42   my ($self) = @_;
43
44   $self->render('pricegroup/form',
45                  title   => t8('Edit pricegroup'),
46                 );
47 }
48
49 sub action_create {
50   my ($self) = @_;
51
52   $self->pricegroup( SL::DB::Pricegroup->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->pricegroup->orphaned ) {
65     flash_later('error', $::locale->text('The pricegroup has been used and cannot be deleted.'));
66   } elsif ( eval { $self->pricegroup->delete; 1; } ) {
67     flash_later('info',  $::locale->text('The pricegroup has been deleted.'));
68   } else {
69     flash_later('error', $::locale->text('The pricegroup 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::Pricegroup->reorder_list(@{ $::form->{pricegroup_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_pricegroup {
90   my ($self) = @_;
91
92   $self->pricegroup( SL::DB::Pricegroup->new(id => $::form->{id})->load );
93 }
94
95 sub init_all_pricegroups { SL::DB::Manager::Pricegroup->get_all_sorted }
96
97 #
98 # helpers
99 #
100
101 sub create_or_update {
102   my ($self) = @_;
103   my $is_new = !$self->pricegroup->id;
104
105   my $params = delete($::form->{pricegroup}) || { };
106
107   $self->pricegroup->assign_attributes(%{ $params });
108
109   my @errors = $self->pricegroup->validate;
110
111   if (@errors) {
112     flash('error', @errors);
113     $self->render('pricegroup/form',
114                    title => $is_new ? t8('Add pricegroup') : t8('Edit pricegroup'),
115                  );
116     return;
117   }
118
119   $self->pricegroup->save;
120
121   flash_later('info', $is_new ? t8('The pricegroup has been created.') : t8('The pricegroup 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::Pricegroup - CRUD controller for pricegroups
134
135 =head1 SYNOPSIS
136
137 A new controller to create / edit / delete pricegroups.
138
139 Pricegroups can only be deleted if they haven't been used anywhere.
140
141 =head1 OBSOLETE PRICEGROUPS
142
143 Pricegroups can't be obsoleted while any of the customers still use that
144 pricegroup as their default pricegroup. Obsoleting a pricegroup means it can't
145 be selected when editing customers and it can't be selected as a price source
146 for new records.
147
148 =head1 AUTHOR
149
150 G. Richardson E<lt>grichardson@kivitendo-premium.deE<gt>
151
152 =cut