Merge branch 'b-3.6.1' into mebil
[kivitendo-erp.git] / SL / Presenter / DeliveryOrder.pm
1 package SL::Presenter::DeliveryOrder;
2
3 use strict;
4
5 use SL::DB::DeliveryOrder::TypeData ();
6 use SL::Locale::String qw(t8);
7 use SL::Presenter::EscapedText qw(escape is_escaped);
8
9 use Exporter qw(import);
10 our @EXPORT_OK = qw(sales_delivery_order purchase_delivery_order delivery_order_status_line);
11
12 use Carp;
13
14 sub sales_delivery_order {
15   my ($delivery_order, %params) = @_;
16
17   return _do_record($delivery_order, 'sales_delivery_order', %params);
18 }
19
20 sub rma_delivery_order {
21   my ($delivery_order, %params) = @_;
22
23   return _do_new_record($delivery_order, 'rma_delivery_order', %params);
24 }
25
26 sub purchase_delivery_order {
27   my ($delivery_order, %params) = @_;
28
29   return _do_record($delivery_order, 'purchase_delivery_order', %params);
30 }
31
32 sub supplier_delivery_order {
33   my ($delivery_order, %params) = @_;
34
35   return _do_new_record($delivery_order, 'supplier_delivery_order', %params);
36 }
37
38 sub _do_new_record {
39   my ($delivery_order, $type, %params) = @_;
40
41   $params{display} ||= 'inline';
42
43   croak "Unknown display type '$params{display}'" unless $params{display} =~ m/^(?:inline|table-cell)$/;
44
45   my $text = join '', (
46     $params{no_link} ? '' : '<a href="contoller.pl?action=DeliveryOrder/edit&amp;type=' . $type . '&amp;id=' . escape($delivery_order->id) . '">',
47     escape($delivery_order->donumber),
48     $params{no_link} ? '' : '</a>',
49   );
50   is_escaped($text);
51 }
52
53 sub _do_record {
54   my ($delivery_order, $type, %params) = @_;
55
56   $params{display} ||= 'inline';
57
58   croak "Unknown display type '$params{display}'" unless $params{display} =~ m/^(?:inline|table-cell)$/;
59
60   my $text = join '', (
61     $params{no_link} ? '' : '<a href="do.pl?action=edit&amp;type=' . $type . '&amp;id=' . escape($delivery_order->id) . '">',
62     escape($delivery_order->donumber),
63     $params{no_link} ? '' : '</a>',
64   );
65   is_escaped($text);
66 }
67
68 sub stock_status {
69   my ($delivery_order) = @_;
70
71   my $in_out = SL::DB::DeliveryOrder::TypeData::get3($delivery_order->type, "properties", "transfer");
72
73   if ($in_out eq 'in') {
74     return escape($delivery_order->delivered ? t8('transferred in') : t8('not transferred in yet'));
75   }
76
77   if ($in_out eq 'out') {
78     return escape($delivery_order->delivered ? t8('transferred out') : t8('not transferred out yet'));
79   }
80 }
81
82 sub closed_status {
83   my ($delivery_order) = @_;
84
85   return escape($delivery_order->closed ? t8('Closed') : t8('Open'))
86 }
87
88 sub status_line {
89   my ($delivery_order) = @_;
90
91   return "" unless $delivery_order->id;
92
93   stock_status($delivery_order) . " ; " . closed_status($delivery_order)
94 }
95
96 sub delivery_order_status_line { goto &status_line };
97
98 1;
99
100 __END__
101
102 =pod
103
104 =encoding utf8
105
106 =head1 NAME
107
108 SL::Presenter::DeliveryOrder - Presenter module for Rose::DB objects
109 for sales and purchase delivery orders
110
111 =head1 SYNOPSIS
112
113   # Sales delivery orders:
114   my $object = SL::DB::Manager::DeliveryOrder->get_first(where => [ is_sales => 1 ]);
115   my $html   = SL::Presenter::DeliveryOrder::sales_delivery_order($object, display => 'inline');
116
117   # Purchase delivery orders:
118   my $object = SL::DB::Manager::DeliveryOrder->get_first(where => [ or => [ is_sales => undef, is_sales => 0 ]]);
119   my $html   = SL::Presenter::DeliveryOrder::purchase_delivery_order($object, display => 'inline');
120
121 =head1 FUNCTIONS
122
123 =over 4
124
125 =item C<sales_delivery_order $object, %params>
126
127 Returns a rendered version (actually an instance of
128 L<SL::Presenter::EscapedText>) of the sales delivery order object
129 C<$object>.
130
131 C<%params> can include:
132
133 =over 2
134
135 =item * display
136
137 Either C<inline> (the default) or C<table-cell>. At the moment both
138 representations are identical and produce the objects's delivery
139 order number linked to the corresponding 'edit' action.
140
141 =item * no_link
142
143 If falsish (the default) then the delivery order number will be linked
144 to the "edit delivery order" dialog from the sales menu.
145
146 =back
147
148 =item C<purchase_delivery_order $object, %params>
149
150 Returns a rendered version (actually an instance of
151 L<SL::Presenter::EscapedText>) of the purchase delivery order object
152 C<$object>.
153
154 C<%params> can include:
155
156 =over 2
157
158 =item * display
159
160 Either C<inline> (the default) or C<table-cell>. At the moment both
161 representations are identical and produce the objects's delivery
162 order number linked to the corresponding 'edit' action.
163
164 =item * no_link
165
166 If falsish (the default) then the delivery order number will be linked
167 to the "edit delivery order" dialog from the purchase menu.
168
169 =back
170
171 =back
172
173 =head1 BUGS
174
175 Nothing here yet.
176
177 =head1 AUTHOR
178
179 Moritz Bunkus E<lt>m.bunkus@linet-services.deE<gt>
180
181 =cut