1 package SL::Controller::RequirementSpecPart;
5 use parent qw(SL::Controller::Base);
8 use List::MoreUtils qw(any);
13 use SL::DB::RequirementSpec;
14 use SL::DB::RequirementSpecPart;
15 use SL::Helper::Flash;
16 use SL::Locale::String;
18 use Rose::Object::MakeMethods::Generic
20 'scalar --get_set_init' => [ qw(requirement_spec js) ],
23 __PACKAGE__->run_before('check_auth');
30 my ($self, %params) = @_;
32 $self->render('requirement_spec_part/show', { layout => 0 });
35 sub action_ajax_edit {
36 my ($self, %params) = @_;
38 my $html = $self->render('requirement_spec_part/_edit', { output => 0 });
41 ->hide('#additional_parts_list_container')
42 ->after('#additional_parts_list_container', $html)
43 ->on('#edit_additional_parts_form INPUT[type=text]', 'keydown', 'kivi.requirement_spec.additional_parts_input_key_down')
44 ->focus('#additional_parts_add_part_id_name')
45 ->run('kivi.requirement_spec.prepare_edit_additional_parts_form')
53 my $part = SL::DB::Part->new(id => $::form->{part_id})->load(with => [ qw(unit_obj) ]);
54 my $rs_part = SL::DB::RequirementSpecPart->new(
57 unit => $part->unit_obj,
58 description => $part->description,
60 my $row = $self->render('requirement_spec_part/_part', { output => 0 }, part => $rs_part);
63 ->val( '#additional_parts_add_part_id', '')
64 ->val( '#additional_parts_add_part_id_name', '')
65 ->focus('#additional_parts_add_part_id_name')
66 ->append('#edit_additional_parts_list tbody', $row)
67 ->hide('#edit_additional_parts_list_empty')
68 ->show('#edit_additional_parts_list')
72 sub action_ajax_save {
75 my $db = $self->requirement_spec->db;
76 $db->with_transaction(sub {
79 my $parts = $::form->{additional_parts} || [];
81 $_->{position} = $position++ for @{ $parts };
83 $self->requirement_spec->update_attributes(parts => $parts)->load;
85 return $self->js->error(t8('Saving failed. Error message from the database: #1', $db->error))->render;
88 my $html = $self->render('requirement_spec_part/show', { output => 0 }, initially_hidden => !!$::form->{keep_open});
91 ->replaceWith('#additional_parts_list_container', $html)
92 ->action_if(!$::form->{keep_open}, 'remove', '#additional_parts_form_container')
101 my ($self, %params) = @_;
102 $::auth->assert('requirement_spec_edit');
109 sub init_js { SL::ClientJS->new(controller => $_[0]) }
111 sub init_requirement_spec {
112 SL::DB::RequirementSpec->new(id => $::form->{requirement_spec_id})->load(
113 with_objects => [ qw(parts parts.part parts.unit) ],