1 package SL::Presenter::CustomerVendor;
5 use parent qw(Exporter);
7 use Exporter qw(import);
8 our @EXPORT = qw(customer_vendor customer vendor customer_vendor_picker);
13 my ($self, $customer_vendor, %params) = @_;
14 return _customer_vendor($self, $customer_vendor, ref($customer_vendor) eq 'SL::DB::Customer' ? 'customer' : 'vendor', %params);
18 my ($self, $customer, %params) = @_;
19 return _customer_vendor($self, $customer, 'customer', %params);
23 my ($self, $vendor, %params) = @_;
24 return _customer_vendor($self, $vendor, 'vendor', %params);
27 sub _customer_vendor {
28 my ($self, $cv, $type, %params) = @_;
30 $params{display} ||= 'inline';
32 croak "Unknown display type '$params{display}'" unless $params{display} =~ m/^(?:inline|table-cell)$/;
34 my $callback = $params{callback} ? '&callback=' . $::form->escape($params{callback}) : '';
37 $params{no_link} ? '' : '<a href="controller.pl?action=CustomerVendor/edit&db=' . $type . '&id=' . $self->escape($cv->id) . '">',
38 $self->escape($cv->name),
39 $params{no_link} ? '' : '</a>',
41 return $self->escaped_text($text);
44 sub customer_vendor_picker {
45 my ($self, $name, $value, %params) = @_;
47 croak 'Unknown "type" parameter' unless $params{type} =~ m{^(?:customer|vendor)$};
48 croak 'Unknown value class' if $value && ref($value) && (ref($value) !~ m{^SL::DB::(?:Customer|Vendor)$});
50 if ($value && !ref $value) {
51 my $class = $params{type} eq 'customer' ? 'SL::DB::Manager::Customer' : 'SL::DB::Manager::Vendor';
52 $value = $class->find_by(id => $value);
55 my $id = delete($params{id}) || $self->name_to_id($name);
56 my $fat_set_item = delete $params{fat_set_item};
58 my @classes = $params{class} ? ($params{class}) : ();
59 push @classes, 'customer_vendor_autocomplete';
60 push @classes, 'customer-vendor-picker-fat-set-item' if $fat_set_item;
63 $self->input_tag($name, (ref $value && $value->can('id') ? $value->id : ''), class => "@classes", type => 'hidden', id => $id) .
64 join('', map { $params{$_} ? $self->input_tag("", delete $params{$_}, id => "${id}_${_}", type => 'hidden') : '' } qw(type)) .
65 $self->input_tag("", ref $value ? $value->displayable_name : '', id => "${id}_name", %params);
67 $::request->layout->add_javascripts('autocomplete_customer.js');
68 $::request->presenter->need_reinit_widgets($id);
70 $self->html_tag('span', $ret, class => 'customer_vendor_picker');
83 SL::Presenter::CustomerVendor - Presenter module for customer and
84 vendor Rose::DB objects
89 my $customer = SL::DB::Manager::Customer->get_first;
90 my $html = SL::Presenter->get->customer($customer, display => 'inline');
93 my $vendor = SL::DB::Manager::Vendor->get_first;
94 my $html = SL::Presenter->get->vendor($customer, display => 'inline');
100 =item C<customer $object, %params>
102 Returns a rendered version (actually an instance of
103 L<SL::Presenter::EscapedText>) of the customer object C<$object>.
105 C<%params> can include:
111 Either C<inline> (the default) or C<table-cell>. At the moment both
112 representations are identical and produce the customer's name linked
113 to the corresponding 'edit' action.
117 If falsish (the default) then the customer's name will be linked to
118 the "edit customer" dialog from the master data menu.
122 =item C<vendor $object, %params>
124 Returns a rendered version (actually an instance of
125 L<SL::Presenter::EscapedText>) of the vendor object C<$object>.
127 C<%params> can include:
133 Either C<inline> (the default) or C<table-cell>. At the moment both
134 representations are identical and produce the vendor's name linked
135 to the corresponding 'edit' action.
139 If falsish (the default) then the vendor's name will be linked to
140 the "edit vendor" dialog from the master data menu.
144 =item C<customer_vendor $object, %params>
146 Returns a rendered version (actually an instance of
147 L<SL::Presenter::EscapedText>) of the customer or vendor object
148 C<$object> by calling either L</customer> or L</vendor> depending on
149 C<$object>'s type. See the respective functions for available
160 Moritz Bunkus E<lt>m.bunkus@linet-services.deE<gt>