079e4942bd29a02b5991f46aad01592cd1a89d97
[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     },
41     properties => {
42       customervendor => "customer",
43       is_customer    => 1,
44       nr_key         => "donumber",
45       transfer       => 'out',
46     },
47     part_classification_query => [ "used_for_sale" => 1 ],
48     right => "sales_delivery_order_edit",
49   },
50   PURCHASE_DELIVERY_ORDER_TYPE() => {
51     text => {
52       delete => t8('Delivery Order has been deleted'),
53       saved  => t8('Delivery Order has been saved'),
54       add    => t8("Add Purchase Delivery Order"),
55       edit   => t8("Edit Purchase Delivery Order"),
56       attachment => t8("purchase_delivery_order_list"),
57     },
58     show_menu => {
59       save_and_quotation      => 0,
60       save_and_rfq            => 0,
61       save_and_sales_order    => 0,
62       save_and_purchase_order => 0,
63       save_and_delivery_order => 0,
64       save_and_ap_transaction => 0,
65       save_and_invoice        => 0,
66       delete                  => sub { $::instance_conf->get_sales_delivery_order_show_delete },
67     },
68     properties => {
69       customervendor => "vendor",
70       is_customer    => 0,
71       nr_key         => "donumber",
72       transfer       => 'in',
73     },
74     part_classification_query => [ "used_for_purchase" => 1 ],
75     right => "purchase_delivery_order_edit",
76   },
77   SUPPLIER_DELIVERY_ORDER_TYPE() => {
78     text => {
79       delete => t8('Delivery Order has been deleted'),
80       saved  => t8('Delivery Order has been saved'),
81       add    => t8("Add Supplier Delivery Order"),
82       edit   => t8("Edit Supplier Delivery Order"),
83       attachment => t8("supplier_delivery_order_list"),
84     },
85     show_menu => {
86       save_and_quotation      => 0,
87       save_and_rfq            => 0,
88       save_and_sales_order    => 0,
89       save_and_purchase_order => 0,
90       save_and_delivery_order => 0,
91       save_and_ap_transaction => 0,
92       save_and_invoice        => 0,
93       delete                  => sub { $::instance_conf->get_sales_delivery_order_show_delete },
94     },
95     properties => {
96       customervendor => "vendor",
97       is_customer    => 0,
98       nr_key         => "donumber",
99       transfer       => 'out',
100     },
101     part_classification_query => [ "used_for_purchase" => 1 ],
102     right => "purchase_delivery_order_edit",
103   },
104   RMA_DELIVERY_ORDER_TYPE() => {
105     text => {
106       delete => t8('Delivery Order has been deleted'),
107       saved  => t8('Delivery Order has been saved'),
108       add    => t8("Add RMA Delivery Order"),
109       edit   => t8("Edit RMA Delivery Order"),
110       attachment => t8("rma_delivery_order_list"),
111     },
112     show_menu => {
113       save_and_quotation      => 0,
114       save_and_rfq            => 0,
115       save_and_sales_order    => 0,
116       save_and_purchase_order => 0,
117       save_and_delivery_order => 0,
118       save_and_ap_transaction => 0,
119       save_and_invoice        => 0,
120       delete                  => sub { $::instance_conf->get_sales_delivery_order_show_delete },
121     },
122     properties => {
123       customervendor => "customer",
124       is_customer    => 0,
125       nr_key         => "donumber",
126       transfer       => 'in',
127     },
128     part_classification_query => [ "used_for_sale" => 1 ],
129     right => "sales_delivery_order_edit",
130   },
131 );
132
133 my @valid_types = (
134   SALES_DELIVERY_ORDER_TYPE,
135   PURCHASE_DELIVERY_ORDER_TYPE,
136   SUPPLIER_DELIVERY_ORDER_TYPE,
137   RMA_DELIVERY_ORDER_TYPE,
138 );
139
140 my %valid_types = map { $_ => $_ } @valid_types;
141
142 sub valid_types {
143   \@valid_types;
144 }
145
146 sub is_valid_type {
147   !!exists $type_data{$_[0]};
148 }
149
150 sub validate_type {
151   my ($type) = @_;
152
153   return $valid_types{$type} // confess "invalid type '$type'";
154 }
155
156 sub get {
157   my ($type, $key) = @_;
158
159   my $ret = $type_data{$type}->{$key} // die "unknown property '$key'";
160
161   ref $ret eq 'CODE'
162     ? $ret->()
163     : $ret;
164 }
165
166 sub get3 {
167   my ($type, $topic, $key) = @_;
168
169   my $ret = $type_data{$type}{$topic}{$key} // die "unknown property '$key' in topic '$topic' for type '$type'";
170
171   ref $ret eq 'CODE'
172     ? $ret->()
173     : $ret;
174 }
175
176 1;