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->displayable_name : '', id => "${id}_name", %params);
62 $::request->layout->add_javascripts('autocomplete_customer.js');
63 $::request->presenter->need_reinit_widgets($id);
65 $self->html_tag('span', $ret, class => 'customer_vendor_picker');
78 SL::Presenter::CustomerVendor - Presenter module for customer and
79 vendor Rose::DB objects
84 my $customer = SL::DB::Manager::Customer->get_first;
85 my $html = SL::Presenter->get->customer($customer, display => 'inline');
88 my $vendor = SL::DB::Manager::Vendor->get_first;
89 my $html = SL::Presenter->get->vendor($customer, display => 'inline');
95 =item C<customer $object, %params>
97 Returns a rendered version (actually an instance of
98 L<SL::Presenter::EscapedText>) of the customer object C<$object>.
100 C<%params> can include:
106 Either C<inline> (the default) or C<table-cell>. At the moment both
107 representations are identical and produce the customer's name linked
108 to the corresponding 'edit' action.
112 If falsish (the default) then the customer's name will be linked to
113 the "edit customer" dialog from the master data menu.
117 =item C<vendor $object, %params>
119 Returns a rendered version (actually an instance of
120 L<SL::Presenter::EscapedText>) of the vendor object C<$object>.
122 C<%params> can include:
128 Either C<inline> (the default) or C<table-cell>. At the moment both
129 representations are identical and produce the vendor's name linked
130 to the corresponding 'edit' action.
134 If falsish (the default) then the vendor's name will be linked to
135 the "edit vendor" dialog from the master data menu.
147 Moritz Bunkus E<lt>m.bunkus@linet-services.deE<gt>