1 package SL::Presenter::CustomerVendor;
 
   5 use parent qw(Exporter);
 
   7 use Exporter qw(import);
 
   8 our @EXPORT = qw(customer vendor customer_vendor_picker);
 
  13   my ($self, $customer, %params) = @_;
 
  14   return _customer_vendor($self, $customer, 'customer', %params);
 
  18   my ($self, $vendor, %params) = @_;
 
  19   return _customer_vendor($self, $vendor, 'vendor', %params);
 
  22 sub _customer_vendor {
 
  23   my ($self, $cv, $type, %params) = @_;
 
  25   $params{display} ||= 'inline';
 
  27   croak "Unknown display type '$params{display}'" unless $params{display} =~ m/^(?:inline|table-cell)$/;
 
  29   my $callback = $params{callback} ? '&callback=' . $::form->escape($params{callback}) : '';
 
  32     $params{no_link} ? '' : '<a href="controller.pl?action=CustomerVendor/edit&db=' . $type . '&id=' . $self->escape($cv->id) . '">',
 
  33     $self->escape($cv->name),
 
  34     $params{no_link} ? '' : '</a>',
 
  36   return $self->escaped_text($text);
 
  39 sub customer_vendor_picker {
 
  40   my ($self, $name, $value, %params) = @_;
 
  42   croak 'Unknown "type" parameter' unless $params{type} =~ m{^(?:customer|vendor)$};
 
  43   croak 'Unknown value class'      if     $value && ref($value) && (ref($value) !~ m{^SL::DB::(?:Customer|Vendor)$});
 
  45   if ($value && !ref $value) {
 
  46     my $class = $params{type} eq 'customer' ? 'SL::DB::Manager::Customer' : 'SL::DB::Manager::Vendor';
 
  47     $value    = $class->find_by(id => $value);
 
  50   my $id = delete($params{id}) || $self->name_to_id($name);
 
  51   my $fat_set_item = delete $params{fat_set_item};
 
  53   my @classes = $params{class} ? ($params{class}) : ();
 
  54   push @classes, 'customer_vendor_autocomplete';
 
  55   push @classes, 'customer-vendor-picker-fat-set-item' if $fat_set_item;
 
  58     $self->input_tag($name, (ref $value && $value->can('id') ? $value->id : ''), class => "@classes", type => 'hidden', id => $id) .
 
  59     join('', map { $params{$_} ? $self->input_tag("", delete $params{$_}, id => "${id}_${_}", type => 'hidden') : '' } qw(type)) .
 
  60     $self->input_tag("", (ref $value && $value->can('name')) ? $value->name : '', id => "${id}_name", %params);
 
  62   $::request->presenter->need_reinit_widgets($id);
 
  64   $self->html_tag('span', $ret, class => 'customer_vendor_picker');
 
  77 SL::Presenter::CustomerVendor - Presenter module for customer and
 
  78 vendor Rose::DB objects
 
  83   my $customer = SL::DB::Manager::Customer->get_first;
 
  84   my $html     = SL::Presenter->get->customer($customer, display => 'inline');
 
  87   my $vendor = SL::DB::Manager::Vendor->get_first;
 
  88   my $html   = SL::Presenter->get->vendor($customer, display => 'inline');
 
  94 =item C<customer $object, %params>
 
  96 Returns a rendered version (actually an instance of
 
  97 L<SL::Presenter::EscapedText>) of the customer object C<$object>.
 
  99 C<%params> can include:
 
 105 Either C<inline> (the default) or C<table-cell>. At the moment both
 
 106 representations are identical and produce the customer's name linked
 
 107 to the corresponding 'edit' action.
 
 111 If falsish (the default) then the customer's name will be linked to
 
 112 the "edit customer" dialog from the master data menu.
 
 116 =item C<vendor $object, %params>
 
 118 Returns a rendered version (actually an instance of
 
 119 L<SL::Presenter::EscapedText>) of the vendor object C<$object>.
 
 121 C<%params> can include:
 
 127 Either C<inline> (the default) or C<table-cell>. At the moment both
 
 128 representations are identical and produce the vendor's name linked
 
 129 to the corresponding 'edit' action.
 
 133 If falsish (the default) then the vendor's name will be linked to
 
 134 the "edit vendor" dialog from the master data menu.
 
 146 Moritz Bunkus E<lt>m.bunkus@linet-services.deE<gt>