Revision 9de3ed1d
Von Tamino Steinert vor 7 Monaten hinzugefügt
SL/Controller/Part.pm | ||
---|---|---|
112 | 112 |
sub action_save { |
113 | 113 |
my ($self, %params) = @_; |
114 | 114 |
|
115 |
# checks that depend only on submitted $::form |
|
116 |
$self->check_form or return $self->js->render; |
|
117 |
|
|
118 |
my $is_new = !$self->part->id; # $ part gets loaded here |
|
119 |
|
|
120 |
# check that the part hasn't been modified |
|
121 |
unless ( $is_new ) { |
|
122 |
$self->check_part_not_modified or |
|
123 |
return $self->js->error(t8('The document has been changed by another user. Please reopen it in another window and copy the changes to the new window'))->render; |
|
124 |
} |
|
125 |
|
|
126 |
if ( $is_new |
|
127 |
&& $::form->{part}{partnumber} |
|
128 |
&& SL::DB::Manager::Part->find_by(partnumber => $::form->{part}{partnumber}) |
|
129 |
) { |
|
130 |
return $self->js->error(t8('The partnumber is already being used'))->render; |
|
131 |
} |
|
132 |
|
|
133 |
$self->parse_form; |
|
134 |
|
|
135 |
my @errors = $self->part->validate; |
|
136 |
return $self->js->error(@errors)->render if @errors; |
|
137 |
|
|
138 |
if ($is_new) { |
|
139 |
# Ensure CVars that should be enabled by default actually are when |
|
140 |
# creating new parts. |
|
141 |
my @default_valid_configs = |
|
142 |
grep { ! $_->{flag_defaults_to_invalid} } |
|
143 |
grep { $_->{module} eq 'IC' } |
|
144 |
@{ CVar->get_configs() }; |
|
145 |
|
|
146 |
$::form->{"cvar_" . $_->{name} . "_valid"} = 1 for @default_valid_configs; |
|
147 |
} else { |
|
148 |
$self->{lastcost_modified} = $self->check_lastcost_modified; |
|
149 |
} |
|
150 |
|
|
151 |
# $self->part has been loaded, parsed and validated without errors and is ready to be saved |
|
152 |
$self->part->db->with_transaction(sub { |
|
153 |
|
|
154 |
$self->part->save(cascade => 1); |
|
155 |
$self->part->set_lastcost_assemblies_and_assortiments if $self->{lastcost_modified}; |
|
156 |
|
|
157 |
SL::DB::History->new( |
|
158 |
trans_id => $self->part->id, |
|
159 |
snumbers => 'partnumber_' . $self->part->partnumber, |
|
160 |
employee_id => SL::DB::Manager::Employee->current->id, |
|
161 |
what_done => 'part', |
|
162 |
addition => 'SAVED', |
|
163 |
)->save(); |
|
164 |
|
|
165 |
CVar->save_custom_variables( |
|
166 |
dbh => $self->part->db->dbh, |
|
167 |
module => 'IC', |
|
168 |
trans_id => $self->part->id, |
|
169 |
variables => $::form, # $::form->{cvar} would be nicer |
|
170 |
save_validity => 1, |
|
171 |
); |
|
115 |
my $is_new = !$self->part->id; |
|
172 | 116 |
|
173 |
1; |
|
174 |
}) or return $self->js->error(t8('The item couldn\'t be saved!') . " " . $self->part->db->error )->render; |
|
117 |
$self->save_with_render_error() or return; |
|
175 | 118 |
|
176 | 119 |
flash_later('info', $is_new ? t8('The item has been created.') . " " . $self->part->displayable_name : t8('The item has been saved.')); |
177 | 120 |
|
... | ... | |
1208 | 1151 |
); |
1209 | 1152 |
} |
1210 | 1153 |
|
1154 |
sub save { |
|
1155 |
my ($self) = @_; |
|
1156 |
my @errors = (); |
|
1157 |
|
|
1158 |
my $is_new = !$self->part->id; |
|
1159 |
|
|
1160 |
# check that the part hasn't been modified |
|
1161 |
unless ( $is_new ) { |
|
1162 |
$self->check_part_not_modified or |
|
1163 |
return [t8('The document has been changed by another user. Please reopen it in another window and copy the changes to the new window')]; |
|
1164 |
} |
|
1165 |
|
|
1166 |
if ( $is_new |
|
1167 |
&& $::form->{part}{partnumber} |
|
1168 |
&& SL::DB::Manager::Part->find_by(partnumber => $::form->{part}{partnumber}) |
|
1169 |
) { |
|
1170 |
return $self->js->error(t8('The partnumber is already being used'))->render; |
|
1171 |
} |
|
1172 |
|
|
1173 |
$self->parse_form; |
|
1174 |
|
|
1175 |
@errors = $self->part->validate; |
|
1176 |
return \@errors if @errors; |
|
1177 |
|
|
1178 |
if ($is_new) { |
|
1179 |
# Ensure CVars that should be enabled by default actually are when |
|
1180 |
# creating new parts. |
|
1181 |
my @default_valid_configs = |
|
1182 |
grep { ! $_->{flag_defaults_to_invalid} } |
|
1183 |
grep { $_->{module} eq 'IC' } |
|
1184 |
@{ CVar->get_configs() }; |
|
1185 |
|
|
1186 |
$::form->{"cvar_" . $_->{name} . "_valid"} = 1 for @default_valid_configs; |
|
1187 |
} else { |
|
1188 |
$self->{lastcost_modified} = $self->check_lastcost_modified; |
|
1189 |
} |
|
1190 |
|
|
1191 |
# $self->part has been loaded, parsed and validated without errors and is ready to be saved |
|
1192 |
$self->part->db->with_transaction(sub { |
|
1193 |
|
|
1194 |
$self->part->save(cascade => 1); |
|
1195 |
$self->part->set_lastcost_assemblies_and_assortiments if $self->{lastcost_modified}; |
|
1196 |
|
|
1197 |
SL::DB::History->new( |
|
1198 |
trans_id => $self->part->id, |
|
1199 |
snumbers => 'partnumber_' . $self->part->partnumber, |
|
1200 |
employee_id => SL::DB::Manager::Employee->current->id, |
|
1201 |
what_done => 'part', |
|
1202 |
addition => 'SAVED', |
|
1203 |
)->save(); |
|
1204 |
|
|
1205 |
CVar->save_custom_variables( |
|
1206 |
dbh => $self->part->db->dbh, |
|
1207 |
module => 'IC', |
|
1208 |
trans_id => $self->part->id, |
|
1209 |
variables => $::form, # $::form->{cvar} would be nicer |
|
1210 |
save_validity => 1, |
|
1211 |
); |
|
1212 |
|
|
1213 |
1; |
|
1214 |
}) || push(@errors, $self->part->db->error); |
|
1215 |
|
|
1216 |
return \@errors; |
|
1217 |
} |
|
1218 |
|
|
1219 |
sub save_with_render_error { |
|
1220 |
my ($self) = @_; |
|
1221 |
|
|
1222 |
# checks that depend only on submitted $::form |
|
1223 |
if (!$self->check_form) { |
|
1224 |
$self->js->render(); |
|
1225 |
return 0; |
|
1226 |
} |
|
1227 |
|
|
1228 |
my $errors = $self->save(); |
|
1229 |
|
|
1230 |
if (scalar @{ $errors }) { |
|
1231 |
$self->js->error(t8('The item couldn\'t be saved!')); |
|
1232 |
$self->js->error(@{ $errors }); |
|
1233 |
$self->js->render(); |
|
1234 |
return 0; |
|
1235 |
} |
|
1236 |
|
|
1237 |
return 1; |
|
1238 |
} |
|
1239 |
|
|
1240 |
sub js_reset_part_after_save { |
|
1241 |
my ($self) = @_; |
|
1242 |
|
|
1243 |
$self->js |
|
1244 |
->val('#part_id', $self->part->id) |
|
1245 |
->val('#part_partnumber', $self->part->partnumber) |
|
1246 |
->val('#part_weight_as_number', $self->part->weight_as_number) |
|
1247 |
->val('#last_modification', "$self->part->last_modification"); |
|
1248 |
} |
|
1211 | 1249 |
|
1212 | 1250 |
# get_set_inits for partpicker |
1213 | 1251 |
|
... | ... | |
2099 | 2137 |
|
2100 | 2138 |
Doesn't work for recursive items. |
2101 | 2139 |
|
2140 |
=item C<save> |
|
2141 |
|
|
2142 |
Helper function for saving the part object in $self->part. Returns a error list |
|
2143 |
on failure. |
|
2144 |
|
|
2145 |
=item C<save_with_render_error> |
|
2146 |
|
|
2147 |
Helper function for checking the form, saving the part object and error |
|
2148 |
rendering. Returns 1 on success and 0 when a error is rendered. |
|
2149 |
|
|
2150 |
It can be called like this: |
|
2151 |
|
|
2152 |
$self->save_with_render_error() or return; |
|
2153 |
|
|
2154 |
=item C<js_reset_part_after_save> |
|
2155 |
|
|
2156 |
Helper function for updating changed values after save in the form via js. It |
|
2157 |
chances 'part_id', 'part_partnumber', 'part_weight_as_number' and |
|
2158 |
'last_modification'. |
|
2159 |
|
|
2102 | 2160 |
=back |
2103 | 2161 |
|
2104 | 2162 |
=head1 GET SET INITS |
Auch abrufbar als: Unified diff
Part: separate save und save_with_render_error Funktionen