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);
57 my @classes = $params{class} ? ($params{class}) : ();
58 push @classes, 'customer_vendor_autocomplete';
61 $self->input_tag($name, (ref $value && $value->can('id') ? $value->id : ''), class => "@classes", type => 'hidden', id => $id,
62 'data-customer-vendor-picker-data' => JSON::to_json(\%params),
64 $self->input_tag("", ref $value ? $value->displayable_name : '', id => "${id}_name", %params);
66 $::request->layout->add_javascripts('kivi.CustomerVendor.js');
67 $::request->presenter->need_reinit_widgets($id);
69 $self->html_tag('span', $ret, class => 'customer_vendor_picker');
82 SL::Presenter::CustomerVendor - Presenter module for customer and
83 vendor Rose::DB objects
88 my $customer = SL::DB::Manager::Customer->get_first;
89 my $html = SL::Presenter->get->customer($customer, display => 'inline');
92 my $vendor = SL::DB::Manager::Vendor->get_first;
93 my $html = SL::Presenter->get->vendor($customer, display => 'inline');
99 =item C<customer $object, %params>
101 Returns a rendered version (actually an instance of
102 L<SL::Presenter::EscapedText>) of the customer object C<$object>.
104 C<%params> can include:
110 Either C<inline> (the default) or C<table-cell>. At the moment both
111 representations are identical and produce the customer's name linked
112 to the corresponding 'edit' action.
116 If falsish (the default) then the customer's name will be linked to
117 the "edit customer" dialog from the master data menu.
121 =item C<vendor $object, %params>
123 Returns a rendered version (actually an instance of
124 L<SL::Presenter::EscapedText>) of the vendor object C<$object>.
126 C<%params> can include:
132 Either C<inline> (the default) or C<table-cell>. At the moment both
133 representations are identical and produce the vendor's name linked
134 to the corresponding 'edit' action.
138 If falsish (the default) then the vendor's name will be linked to
139 the "edit vendor" dialog from the master data menu.
143 =item C<customer_vendor $object, %params>
145 Returns a rendered version (actually an instance of
146 L<SL::Presenter::EscapedText>) of the customer or vendor object
147 C<$object> by calling either L</customer> or L</vendor> depending on
148 C<$object>'s type. See the respective functions for available
159 Moritz Bunkus E<lt>m.bunkus@linet-services.deE<gt>