Lieferschein: Suche angepasst auf neue Typen
[kivitendo-erp.git] / SL / DB / DeliveryOrder / TypeData.pm
1 package SL::DB::DeliveryOrder::TypeData;
2
3 use strict;
4 use Carp;
5 use Exporter qw(import);
6 use Scalar::Util qw(weaken);
7 use SL::Locale::String qw(t8);
8
9 use constant {
10   SALES_DELIVERY_ORDER_TYPE    => 'sales_delivery_order',
11   PURCHASE_DELIVERY_ORDER_TYPE => 'purchase_delivery_order',
12   SUPPLIER_DELIVERY_ORDER_TYPE => 'supplier_delivery_order',
13   RMA_DELIVERY_ORDER_TYPE      => 'rma_delivery_order',
14 };
15
16 my @export_types = qw(SALES_DELIVERY_ORDER_TYPE PURCHASE_DELIVERY_ORDER_TYPE SUPPLIER_DELIVERY_ORDER_TYPE RMA_DELIVERY_ORDER_TYPE);
17 my @export_subs = qw(valid_types validate_type is_valid_type get get3);
18
19 our @EXPORT_OK = (@export_types, @export_subs);
20 our %EXPORT_TAGS = (types => \@export_types, subs => \@export_subs);
21
22 my %type_data = (
23   SALES_DELIVERY_ORDER_TYPE() => {
24     text => {
25       delete => t8('Delivery Order has been deleted'),
26       saved  => t8('Delivery Order has been saved'),
27       add    => t8("Add Sales Delivery Order"),
28       edit   => t8("Edit Sales Delivery Order"),
29       attachment => t8("sales_delivery_order_list"),
30     },
31     show_menu => {
32       save_and_quotation      => 0,
33       save_and_rfq            => 0,
34       save_and_sales_order    => 0,
35       save_and_purchase_order => 0,
36       save_and_delivery_order => 0,
37       save_and_ap_transaction => 0,
38       save_and_invoice        => 0,
39       delete                  => sub { $::instance_conf->get_sales_delivery_order_show_delete },
40       new_controller          => 0,
41     },
42     properties => {
43       customervendor => "customer",
44       is_customer    => 1,
45       nr_key         => "donumber",
46       transfer       => 'out',
47       transnumber    => 'sdonumber',
48     },
49     part_classification_query => [ "used_for_sale" => 1 ],
50     right => "sales_delivery_order_edit",
51   },
52   PURCHASE_DELIVERY_ORDER_TYPE() => {
53     text => {
54       delete => t8('Delivery Order has been deleted'),
55       saved  => t8('Delivery Order has been saved'),
56       add    => t8("Add Purchase Delivery Order"),
57       edit   => t8("Edit Purchase Delivery Order"),
58       attachment => t8("purchase_delivery_order_list"),
59     },
60     show_menu => {
61       save_and_quotation      => 0,
62       save_and_rfq            => 0,
63       save_and_sales_order    => 0,
64       save_and_purchase_order => 0,
65       save_and_delivery_order => 0,
66       save_and_ap_transaction => 0,
67       save_and_invoice        => 0,
68       delete                  => sub { $::instance_conf->get_sales_delivery_order_show_delete },
69       new_controller          => 0,
70     },
71     properties => {
72       customervendor => "vendor",
73       is_customer    => 0,
74       nr_key         => "donumber",
75       transfer       => 'in',
76       transnumber    => 'pdonumber',
77     },
78     part_classification_query => [ "used_for_purchase" => 1 ],
79     right => "purchase_delivery_order_edit",
80   },
81   SUPPLIER_DELIVERY_ORDER_TYPE() => {
82     text => {
83       delete => t8('Delivery Order has been deleted'),
84       saved  => t8('Delivery Order has been saved'),
85       add    => t8("Add Supplier Delivery Order"),
86       edit   => t8("Edit Supplier Delivery Order"),
87       attachment => t8("supplier_delivery_order_list"),
88     },
89     show_menu => {
90       save_and_quotation      => 0,
91       save_and_rfq            => 0,
92       save_and_sales_order    => 0,
93       save_and_purchase_order => 0,
94       save_and_delivery_order => 0,
95       save_and_ap_transaction => 0,
96       save_and_invoice        => 0,
97       delete                  => sub { $::instance_conf->get_sales_delivery_order_show_delete },
98       new_controller          => 1,
99     },
100     properties => {
101       customervendor => "vendor",
102       is_customer    => 0,
103       nr_key         => "donumber",
104       transfer       => 'out',
105       transnumber    => 'sudonumber',
106     },
107     part_classification_query => [ "used_for_purchase" => 1 ],
108     right => "purchase_delivery_order_edit",
109   },
110   RMA_DELIVERY_ORDER_TYPE() => {
111     text => {
112       delete => t8('Delivery Order has been deleted'),
113       saved  => t8('Delivery Order has been saved'),
114       add    => t8("Add RMA Delivery Order"),
115       edit   => t8("Edit RMA Delivery Order"),
116       attachment => t8("rma_delivery_order_list"),
117     },
118     show_menu => {
119       save_and_quotation      => 0,
120       save_and_rfq            => 0,
121       save_and_sales_order    => 0,
122       save_and_purchase_order => 0,
123       save_and_delivery_order => 0,
124       save_and_ap_transaction => 0,
125       save_and_invoice        => 0,
126       delete                  => sub { $::instance_conf->get_sales_delivery_order_show_delete },
127       new_controller          => 1,
128     },
129     properties => {
130       customervendor => "customer",
131       is_customer    => 1,
132       nr_key         => "donumber",
133       transfer       => 'in',
134       transnumber    => 'rdonumber',
135     },
136     part_classification_query => [ "used_for_sale" => 1 ],
137     right => "sales_delivery_order_edit",
138   },
139 );
140
141 my @valid_types = (
142   SALES_DELIVERY_ORDER_TYPE,
143   PURCHASE_DELIVERY_ORDER_TYPE,
144   SUPPLIER_DELIVERY_ORDER_TYPE,
145   RMA_DELIVERY_ORDER_TYPE,
146 );
147
148 my %valid_types = map { $_ => $_ } @valid_types;
149
150 sub valid_types {
151   \@valid_types;
152 }
153
154 sub is_valid_type {
155   !!exists $type_data{$_[0]};
156 }
157
158 sub validate_type {
159   my ($type) = @_;
160
161   return $valid_types{$type} // croak "invalid type '$type'";
162 }
163
164 sub get {
165   my ($type, $key) = @_;
166
167   croak "invalid type '$type'" unless exists $type_data{$type};
168
169   my $ret = $type_data{$type}->{$key} // die "unknown property '$key'";
170
171   ref $ret eq 'CODE'
172     ? $ret->()
173     : $ret;
174 }
175
176 sub get3 {
177   my ($type, $topic, $key) = @_;
178
179   croak "invalid type '$type'" unless exists $type_data{$type};
180
181   my $ret = $type_data{$type}{$topic}{$key} // croak "unknown property '$key' in topic '$topic' for type '$type'";
182
183   ref $ret eq 'CODE'
184     ? $ret->()
185     : $ret;
186 }
187
188 1;