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