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 $value = SL::DB::Manager::Customer->find_by(id => $value) if $value && !ref $value;
43 my $id = delete($params{id}) || $self->name_to_id($name);
44 my $fat_set_item = delete $params{fat_set_item};
46 my @classes = $params{class} ? ($params{class}) : ();
47 push @classes, 'customer_vendor_autocomplete';
48 push @classes, 'customer-vendor-picker-fat-set-item' if $fat_set_item;
51 $self->input_tag($name, (ref $value && $value->can('id') ? $value->id : ''), class => "@classes", type => 'hidden', id => $id) .
52 join('', map { $params{$_} ? $self->input_tag("", delete $params{$_}, id => "${id}_${_}", type => 'hidden') : '' } qw(type)) .
53 $self->input_tag("", (ref $value && $value->can('name')) ? $value->name : '', id => "${id}_name", %params);
55 $::request->presenter->need_reinit_widgets($id);
57 $self->html_tag('span', $ret, class => 'customer_vendor_picker');
70 SL::Presenter::CustomerVendor - Presenter module for customer and
71 vendor Rose::DB objects
76 my $customer = SL::DB::Manager::Customer->get_first;
77 my $html = SL::Presenter->get->customer($customer, display => 'inline');
80 my $vendor = SL::DB::Manager::Vendor->get_first;
81 my $html = SL::Presenter->get->vendor($customer, display => 'inline');
87 =item C<customer $object, %params>
89 Returns a rendered version (actually an instance of
90 L<SL::Presenter::EscapedText>) of the customer object C<$object>.
92 C<%params> can include:
98 Either C<inline> (the default) or C<table-cell>. At the moment both
99 representations are identical and produce the customer's name linked
100 to the corresponding 'edit' action.
104 If falsish (the default) then the customer's name will be linked to
105 the "edit customer" dialog from the master data menu.
109 =item C<vendor $object, %params>
111 Returns a rendered version (actually an instance of
112 L<SL::Presenter::EscapedText>) of the vendor object C<$object>.
114 C<%params> can include:
120 Either C<inline> (the default) or C<table-cell>. At the moment both
121 representations are identical and produce the vendor's name linked
122 to the corresponding 'edit' action.
126 If falsish (the default) then the vendor's name will be linked to
127 the "edit vendor" dialog from the master data menu.
139 Moritz Bunkus E<lt>m.bunkus@linet-services.deE<gt>