Revision 6ef53d3f
Von Sven Schöling vor etwa 7 Jahren hinzugefügt
SL/Controller/RequirementSpec.pm | ||
---|---|---|
490 | 490 |
if (!$is_template) { |
491 | 491 |
%column_defs = ( |
492 | 492 |
%column_defs, |
493 |
customer => { raw_data => sub { $self->presenter->customer($_[0]->customer, display => 'table-cell', callback => $callback) },
|
|
493 |
customer => { raw_data => sub { $_[0]->customer->presenter->customer(display => 'table-cell', callback => $callback) },
|
|
494 | 494 |
sub => sub { $_[0]->customer->name } }, |
495 |
projectnumber => { raw_data => sub { $self->presenter->project($_[0]->project, display => 'table-cell', callback => $callback) },
|
|
495 |
projectnumber => { raw_data => sub { $_[0]->project ? $_[0]->project->presenter->project(display => 'table-cell', callback => $callback) : '' },
|
|
496 | 496 |
sub => sub { $_[0]->project_id ? $_[0]->project->projectnumber : '' } }, |
497 | 497 |
status => { sub => sub { $_[0]->status->description } }, |
498 | 498 |
type => { sub => sub { $_[0]->type->description } }, |
... | ... | |
555 | 555 |
->hide('#text-block-list-empty'); |
556 | 556 |
} |
557 | 557 |
|
558 |
my $node = $self->presenter->requirement_spec_text_block_jstree_data($text_block);
|
|
558 |
my $node = $text_block->presenter->jstree_data;
|
|
559 | 559 |
my $front_back = $text_block->output_position == 0 ? 'front' : 'back'; |
560 | 560 |
$self->js |
561 | 561 |
->jstree->create_node('#tree', "#tb-${front_back}", 'last', $node) |
... | ... | |
577 | 577 |
sub render_pasted_section { |
578 | 578 |
my ($self, $item, $parent_id) = @_; |
579 | 579 |
|
580 |
my $node = $self->presenter->requirement_spec_item_jstree_data($item);
|
|
580 |
my $node = $item->presenter->jstree_data;
|
|
581 | 581 |
$self->js |
582 | 582 |
->jstree->create_node('#tree', $parent_id ? "#fb-${parent_id}" : '#sections', 'last', $node) |
583 | 583 |
->jstree->open_node( '#tree', $parent_id ? "#fb-${parent_id}" : '#sections'); |
SL/Controller/RequirementSpecItem.pm | ||
---|---|---|
19 | 19 |
use SL::Helper::Flash; |
20 | 20 |
use SL::JSON; |
21 | 21 |
use SL::Locale::String; |
22 |
use SL::Presenter::Text qw(truncate); |
|
22 | 23 |
|
23 | 24 |
use Rose::Object::MakeMethods::Generic |
24 | 25 |
( |
... | ... | |
192 | 193 |
my $type = $self->item->item_type; |
193 | 194 |
|
194 | 195 |
if ($type eq 'section') { |
195 |
my $node = $self->presenter->requirement_spec_item_jstree_data($self->item);
|
|
196 |
my $node = $self->item->presenter->jstree_data;
|
|
196 | 197 |
$self->invalidate_version; |
197 | 198 |
$self->render_list($self->item) |
198 | 199 |
->hide('#section-list-empty') |
... | ... | |
205 | 206 |
|
206 | 207 |
my $template = 'requirement_spec_item/_' . (apply { s/-/_/g; $_ } $type); |
207 | 208 |
my $html = $self->render($template, { output => 0 }, requirement_spec_item => $self->item, id_prefix => $type eq 'function-block' ? '' : 'sub-'); |
208 |
my $node = $self->presenter->requirement_spec_item_jstree_data($self->item);
|
|
209 |
my $node = $self->item->presenter->jstree_data;
|
|
209 | 210 |
|
210 | 211 |
$self->js |
211 | 212 |
->replaceWith('#' . $prefix . '_form', $html) |
... | ... | |
298 | 299 |
->remove('#edit_section_form') |
299 | 300 |
->html('#section-header-' . $self->item->id, $html) |
300 | 301 |
->show('#section-header-' . $self->item->id) |
301 |
->jstree->rename_node('#tree', '#fb-' . $self->item->id, $::request->presenter->requirement_spec_item_tree_node_title($self->item))
|
|
302 |
->jstree->rename_node('#tree', '#fb-' . $self->item->id, $self->item->presenter->tree_node_title)
|
|
302 | 303 |
->prop('#fb-' . $self->item->id . ' a', 'title', $self->item->content_excerpt) |
303 | 304 |
->addClass('#fb-' . $self->item->id . ' a', 'tooltip') |
304 | 305 |
->reinit_widgets |
... | ... | |
319 | 320 |
->prop('#fb-' . $self->item->id . ' a', 'title', $self->item->content_excerpt) |
320 | 321 |
->addClass('#fb-' . $self->item->id . ' a', 'tooltip') |
321 | 322 |
->reinit_widgets |
322 |
->jstree->rename_node('#tree', '#fb-' . $self->item->id, $::request->presenter->requirement_spec_item_tree_node_title($self->item));
|
|
323 |
->jstree->rename_node('#tree', '#fb-' . $self->item->id, $self->item->presenter->tree_node_title);
|
|
323 | 324 |
|
324 | 325 |
$self->replace_bottom($self->item, id_prefix => $id_prefix); |
325 | 326 |
$self->replace_bottom($self->item->parent) if $type eq 'sub-function-block'; |
... | ... | |
439 | 440 |
sub create_and_insert_node_rec { |
440 | 441 |
my ($self, $item, $new_parent_id, $insert_after) = @_; |
441 | 442 |
|
442 |
my $node = $self->presenter->requirement_spec_item_jstree_data($item);
|
|
443 |
my $node = $item->presenter->jstree_data;
|
|
443 | 444 |
$self->js->jstree->create_node('#tree', $insert_after ? ('#fb-' . $insert_after, 'after') : $new_parent_id ? ('#fb-' . $new_parent_id, 'last') : ('#sections', 'last'), $node); |
444 | 445 |
|
445 | 446 |
$self->create_and_insert_node_rec($_, $item->id) for @{ $item->children || [] }; |
... | ... | |
562 | 563 |
|
563 | 564 |
sub create_dependency_item { |
564 | 565 |
my $self = shift; |
565 |
[ $_[0]->id, $self->presenter->truncate(join(' ', grep { $_ } ($_[1], $_[0]->fb_number, $_[0]->description_as_stripped_html))) ];
|
|
566 |
[ $_[0]->id, truncate(join(' ', grep { $_ } ($_[1], $_[0]->fb_number, $_[0]->description_as_stripped_html))) ]; |
|
566 | 567 |
} |
567 | 568 |
|
568 | 569 |
sub create_dependencies { |
SL/Controller/RequirementSpecTextBlock.pm | ||
---|---|---|
102 | 102 |
$self->text_block->add_to_list(position => 'after', reference => $insert_after) if $insert_after; |
103 | 103 |
|
104 | 104 |
my $html = $self->render('requirement_spec_text_block/_text_block', { output => 0 }, text_block => $self->text_block); |
105 |
my $node = $self->presenter->requirement_spec_text_block_jstree_data($self->text_block);
|
|
105 |
my $node = $self->text_block->presenter->jstree_data;
|
|
106 | 106 |
|
107 | 107 |
$self->invalidate_version |
108 | 108 |
->hide('#text-block-list-empty') |
... | ... | |
272 | 272 |
$self->js->action($::form->{id} ? 'insertAfter' : 'appendTo', $html, '#text-block-' . ($::form->{id} || 'list')); |
273 | 273 |
} |
274 | 274 |
|
275 |
my $node = $self->presenter->requirement_spec_text_block_jstree_data($self->text_block);
|
|
275 |
my $node = $self->text_block->presenter->jstree_data;
|
|
276 | 276 |
$self->invalidate_version |
277 | 277 |
->run(SORTABLE_PICTURE_LIST()) |
278 | 278 |
->jstree->create_node('#tree', $::form->{id} ? ('#tb-' . $::form->{id}, 'after') : ("#tb-${front_back}", 'last'), $node) |
templates/print/RB/requirement_spec.tex | ||
---|---|---|
145 | 145 |
\begin{longtable}{p{2.8cm}p{11.7cm}} |
146 | 146 |
Funktionsblock & $( KiviLatex.filter(item.fb_number) )$\\ |
147 | 147 |
Beschreibung & $( KiviLatex.filter_html(item.description_as_restricted_html) )$\\ |
148 |
Abhängigkeiten & $( KiviLatex.filter(P.requirement_spec_item_dependency_list(item)) )$
|
|
148 |
Abhängigkeiten & $( KiviLatex.filter(item.presenter.requirement_spec_item_dependency_list) )$
|
|
149 | 149 |
\end{longtable}} |
150 | 150 |
|
151 | 151 |
% $( FOREACH sub_item = item.children_sorted )$ |
... | ... | |
155 | 155 |
\begin{longtable}{p{2.8cm}p{11.7cm}} |
156 | 156 |
Unterfunktionsblock & $( KiviLatex.filter(sub_item.fb_number) )$\\ |
157 | 157 |
Beschreibung & $( KiviLatex.filter_html(sub_item.description_as_restricted_html) )$\\ |
158 |
Abhängigkeiten & $( KiviLatex.filter(P.requirement_spec_item_dependency_list(sub_item)) )$
|
|
158 |
Abhängigkeiten & $( KiviLatex.filter(sub_item.presenter.requirement_spec_item_dependency_list) )$
|
|
159 | 159 |
\end{longtable}} |
160 | 160 |
|
161 | 161 |
% $( END )$ |
templates/webpages/requirement_spec/show.html | ||
---|---|---|
56 | 56 |
attr: { id: "tb-front", class: "text-block-context-menu" }, |
57 | 57 |
children: [ |
58 | 58 |
[% FOREACH tb = SELF.requirement_spec.text_blocks_sorted(output_position=0) %] |
59 |
[% P.requirement_spec_text_block_jstree_data(tb).json %][% IF !loop.last %],[% END %]
|
|
59 |
[% tb.presenter.jstree_data.json %][% IF !loop.last %],[% END %]
|
|
60 | 60 |
[% END %] |
61 | 61 |
]}, |
62 | 62 |
|
... | ... | |
65 | 65 |
attr: { id: "sections", class: "section-context-menu" }, |
66 | 66 |
children: [ |
67 | 67 |
[% FOREACH section = sections %] |
68 |
[% P.requirement_spec_item_jstree_data(section).json %][% IF !loop.last %],[% END %]
|
|
68 |
[% section.presenter.jstree_data.json %][% IF !loop.last %],[% END %]
|
|
69 | 69 |
[% END %] |
70 | 70 |
]}, |
71 | 71 |
|
... | ... | |
74 | 74 |
attr: { id: "tb-back", class: "text-block-context-menu" }, |
75 | 75 |
children: [ |
76 | 76 |
[% FOREACH tb = SELF.requirement_spec.text_blocks_sorted(output_position=1) %] |
77 |
[% P.requirement_spec_text_block_jstree_data(tb).json %][% IF !loop.last %],[% END %]
|
|
77 |
[% tb.presenter.jstree_data.json %][% IF !loop.last %],[% END %]
|
|
78 | 78 |
[% END %] |
79 | 79 |
]} |
80 | 80 |
]; |
templates/webpages/requirement_spec_item/_function_block_content_bottom.html | ||
---|---|---|
1 | 1 |
[%- USE LxERP -%][%- USE P -%]<div id="[% id_prefix %]function-block-content-bottom-[% requirement_spec_item.id %]" class="smaller" style="text-align:right"> |
2 | 2 |
[%- IF requirement_spec_item.dependencies.size -%] |
3 | 3 |
<span class="gray"> |
4 |
[%- LxERP.t8("Dependencies") -%]: [%- P.requirement_spec_item_dependency_list(requirement_spec_item) -%]
|
|
4 |
[%- LxERP.t8("Dependencies") -%]: [%- requirement_spec_item.presenter.requirement_spec_item_dependency_list -%]
|
|
5 | 5 |
</span><br> |
6 | 6 |
[%- END -%] |
7 | 7 |
<span class="gray"> |
templates/webpages/requirement_spec_order/_assignment_form.html | ||
---|---|---|
18 | 18 |
<tr> |
19 | 19 |
<td>[% LxERP.t8("Assign the following article to all sections") %]:</td> |
20 | 20 |
<td data-unit="[% HTML.escape(SELF.section_order_part.unit) %]"> |
21 |
[% P.part_picker('quotations_and_orders_dummy', SELF.section_order_part.id, id='quotations_and_orders_order_id', style=style) %]
|
|
21 |
[% P.part.picker('quotations_and_orders_dummy', SELF.section_order_part.id, id='quotations_and_orders_order_id', style=style) %]
|
|
22 | 22 |
[% L.button_tag('kivi.requirement_spec.assign_order_part_id_to_all()', LxERP.t8('Assign article')) %] |
23 | 23 |
</td> |
24 | 24 |
</tr> |
... | ... | |
43 | 43 |
<td>[% HTML.escape(section.fb_number) %]</td> |
44 | 44 |
<td>[% HTML.escape(section.title) %]</td> |
45 | 45 |
<td>[% HTML.escape(P.truncate(section.description_as_stripped_html)) %]</td> |
46 |
<td>[% P.part_picker('sections[].order_part_id', section.order_part_id, id='quotations_and_orders_sections_order_pard_id_' _ loop.count, style=style) %]</td>
|
|
46 |
<td>[% P.part.picker('sections[].order_part_id', section.order_part_id, id='quotations_and_orders_sections_order_pard_id_' _ loop.count, style=style) %]</td>
|
|
47 | 47 |
<td data-unit-column=1>[% HTML.escape(section.order_part.unit) %]</td> |
48 | 48 |
<td data-position-type-column=1> |
49 | 49 |
[% IF section.order_part_id && section.order_part.unit_obj.is_time_based %] |
templates/webpages/requirement_spec_part/_edit.html | ||
---|---|---|
7 | 7 |
|
8 | 8 |
<div> |
9 | 9 |
[% LxERP.t8("Add part") %]: |
10 |
[% P.part_picker('additional_parts_add_part_id', '', style="width: 300px") %]
|
|
10 |
[% P.part.picker('additional_parts_add_part_id', '', style="width: 300px") %]
|
|
11 | 11 |
[% L.button_tag('kivi.requirement_spec.add_additional_part()', LxERP.t8('Add part')) %] |
12 | 12 |
</div> |
13 | 13 |
|
Auch abrufbar als: Unified diff
Presenter: Neue Struktur in RequirementSpecs umgesetzt