]> wagnertech.de Git - mfinanz.git/blobdiff - SL/Presenter/Part.pm
Vereinfachte Abkürzungsmethode "typeclass_abbreviation" im Part Presenter
[mfinanz.git] / SL / Presenter / Part.pm
index 57eb1cf989d8cd54589d0d35714705e66feb8edc..3de612376cee021889339165232e8a441bd4b3df 100644 (file)
@@ -3,9 +3,11 @@ package SL::Presenter::Part;
 use strict;
 
 use SL::DB::Part;
+use SL::DB::PartClassification;
+use SL::Locale::String qw(t8);
 
 use Exporter qw(import);
-our @EXPORT = qw(part_picker part);
+our @EXPORT = qw(part_picker part select_classification classification_abbreviation type_abbreviation separate_abbreviation typeclass_abbreviation);
 
 use Carp;
 
@@ -17,7 +19,7 @@ sub part {
   croak "Unknown display type '$params{display}'" unless $params{display} =~ m/^(?:inline|table-cell)$/;
 
   my $text = join '', (
-    $params{no_link} ? '' : '<a href="ic.pl?action=edit&id=' . $self->escape($part->id) . '">',
+    $params{no_link} ? '' : '<a href="controller.pl?action=Part/edit&part.id=' . $self->escape($part->id) . '">',
     $self->escape($part->partnumber),
     $params{no_link} ? '' : '</a>',
   );
@@ -37,8 +39,8 @@ sub part_picker {
 
   my $ret =
     $self->input_tag($name, (ref $value && $value->can('id') ? $value->id : ''), class => "@classes", type => 'hidden', id => $id) .
-    join('', map { $params{$_} ? $self->input_tag("", delete $params{$_}, id => "${id}_${_}", type => 'hidden') : '' } qw(column type unit convertible_unit)) .
-    $self->input_tag("", (ref $value && $value->can('description')) ? $value->description : '', id => "${id}_name", %params);
+    join('', map { $params{$_} ? $self->input_tag("", delete $params{$_}, id => "${id}_${_}", type => 'hidden') : '' } qw(part_type unit convertible_unit)) .
+    $self->input_tag("", ref $value ? $value->displayable_name : '', id => "${id}_name", %params);
 
   $::request->layout->add_javascripts('autocomplete_part.js');
   $::request->presenter->need_reinit_widgets($id);
@@ -46,6 +48,70 @@ sub part_picker {
   $self->html_tag('span', $ret, class => 'part_picker');
 }
 
+#
+# shortcut for article type
+#
+sub type_abbreviation {
+  my ($self, $part_type) = @_;
+  return $::locale->text('Assembly (typeabbreviation)')   if $part_type eq 'assembly';
+  return $::locale->text('Part (typeabbreviation)')       if $part_type eq 'part';
+  return $::locale->text('Assortment (typeabbreviation)') if $part_type eq 'assortment';
+  return $::locale->text('Service (typeabbreviation)');
+}
+
+#
+# Translations for Abbreviations:
+#
+# $::locale->text('None (typeabbreviation)')
+# $::locale->text('Purchase (typeabbreviation)')
+# $::locale->text('Sales (typeabbreviation)')
+# $::locale->text('Merchandise (typeabbreviation)')
+# $::locale->text('Production (typeabbreviation)')
+#
+# and for descriptions
+# $::locale->text('Purchase')
+# $::locale->text('Sales')
+# $::locale->text('Merchandise')
+# $::locale->text('Production')
+
+#
+# shortcut for article type
+#
+sub classification_abbreviation {
+  my ($self, $id) = @_;
+  SL::DB::Manager::PartClassification->cache_all();
+  my $obj = SL::DB::PartClassification->load_cached($id);
+  $obj && $obj->abbreviation ? t8($obj->abbreviation) : '';
+}
+
+sub typeclass_abbreviation {
+  my ($self, $part) = @_;
+  return '' if !$part || !$part->isa('SL::DB::Part');
+  return $self->type_abbreviation($part->part_type).$self->classification_abbreviation($part->classification_id);
+}
+
+#
+# shortcut for article type
+#
+sub separate_abbreviation {
+  my ($self, $id) = @_;
+  SL::DB::Manager::PartClassification->cache_all();
+  my $obj = SL::DB::PartClassification->load_cached($id);
+  $obj && $obj->abbreviation && $obj->report_separate ? t8($obj->abbreviation) : '';
+}
+
+#
+# generate selection tag
+#
+sub select_classification {
+  my ($self, $name, %attributes) = @_;
+  $attributes{value_key} = 'id';
+  $attributes{title_key} = 'description';
+  my $collection = SL::DB::Manager::PartClassification->get_all_sorted();
+  $_->description($::locale->text($_->description)) for @{ $collection };
+  return $self->select_tag( $name, $collection, %attributes );
+}
+
 1;
 
 __END__
@@ -93,6 +159,40 @@ to the corresponding 'edit' action.
 
 =over 2
 
+=item C<classification_abbreviation $classification_id>
+
+Returns the shortcut of the classification
+
+=back
+
+=over 2
+
+=item C<separate_abbreviation $classification_id>
+
+Returns the shortcut of the classification if the classifiaction has the separate flag set.
+
+=back
+
+=over 2
+
+=item C<select_classification $name,%params>
+
+Returns a HTML Select Tag with all available Classifications
+
+C<%params> can include:
+
+=over 4
+
+=item * default
+
+The Id of the selected item .
+
+=back
+
+=back
+
+=over 2
+
 =item C<part_picker $name, $value, %params>
 
 All-in-one picker widget for parts. The name will be both id and name
@@ -105,7 +205,7 @@ C<PART PICKER SPECIFICATION>.
 
 C<$value> can be a parts id or a C<Rose::DB:Object> instance.
 
-If C<%params> contains C<type> only parts of this type will be used
+If C<%params> contains C<part_type> only parts of this type will be used
 for autocompletion. You may comma separate multiple types as in
 C<part,assembly>.
 
@@ -123,7 +223,7 @@ selectors though, they are not selectable once overridden.
 C<part_picker> will register it's javascript for inclusion in the next header
 rendering. If you write a standard controller that only call C<render> once, it
 will just work.  In case the header is generated in a different render call
-(multiple blocks, ajax, old C<bin/moilla> style controllers) you need to
+(multiple blocks, ajax, old C<bin/mozilla> style controllers) you need to
 include C<js/autocomplete_part.js> yourself.
 
 =back
@@ -214,4 +314,6 @@ None atm :)
 
 Sven Schöling E<lt>s.schoeling@linet-services.deE<gt>
 
+Martin Helmling E<lt>martin.helmling@opendynamic.deE<gt>
+
 =cut