1 package SL::Controller::DeliveryOrder::TypeData;
4 use Exporter qw(import);
5 use Scalar::Util qw(weaken);
6 use SL::Locale::String qw(t8);
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',
15 our @EXPORT_OK = qw(SALES_DELIVERY_ORDER_TYPE PURCHASE_DELIVERY_ORDER_TYPE SUPPLIER_DELIVERY_ORDER_TYPE RMA_DELIVERY_ORDER_TYPE);
17 use Rose::Object::MakeMethods::Generic scalar => [ qw(c) ];
20 SALES_DELIVERY_ORDER_TYPE() => {
22 delete => t8('Delivery Order has been deleted'),
23 saved => t8('Delivery Order has been saved'),
24 add => t8("Add Sales Delivery Order"),
25 edit => t8("Edit Sales Delivery Order"),
28 save_and_quotation => 0,
30 save_and_sales_order => 0,
31 save_and_purchase_order => 0,
32 save_and_delivery_order => 0,
33 save_and_ap_transaction => 0,
34 save_and_invoice => 0,
35 delete => sub { $::instance_conf->get_sales_delivery_order_show_delete },
38 customervendor => "customer",
43 part_classification_query => [ "used_for_sale" => 1 ],
44 right => "sales_delivery_order_edit",
46 PURCHASE_DELIVERY_ORDER_TYPE() => {
48 delete => t8('Delivery Order has been deleted'),
49 saved => t8('Delivery Order has been saved'),
50 add => t8("Add Purchase Delivery Order"),
51 edit => t8("Edit Purchase Delivery Order"),
54 save_and_quotation => 0,
56 save_and_sales_order => 0,
57 save_and_purchase_order => 0,
58 save_and_delivery_order => 0,
59 save_and_ap_transaction => 0,
60 save_and_invoice => 0,
61 delete => sub { $::instance_conf->get_sales_delivery_order_show_delete },
64 customervendor => "vendor",
69 part_classification_query => [ "used_for_purchase" => 1 ],
70 right => "purchase_delivery_order_edit",
72 SUPPLIER_DELIVERY_ORDER_TYPE() => {
74 delete => t8('Delivery Order has been deleted'),
75 saved => t8('Delivery Order has been saved'),
76 add => t8("Add Supplier Delivery Order"),
77 edit => t8("Edit Supplier Delivery Order"),
80 save_and_quotation => 0,
82 save_and_sales_order => 0,
83 save_and_purchase_order => 0,
84 save_and_delivery_order => 0,
85 save_and_ap_transaction => 0,
86 save_and_invoice => 0,
87 delete => sub { $::instance_conf->get_sales_delivery_order_show_delete },
90 customervendor => "vendor",
95 part_classification_query => [ "used_for_purchase" => 1 ],
96 right => "purchase_delivery_order_edit",
98 RMA_DELIVERY_ORDER_TYPE() => {
100 delete => t8('Delivery Order has been deleted'),
101 saved => t8('Delivery Order has been saved'),
102 add => t8("Add RMA Delivery Order"),
103 edit => t8("Edit RMA Delivery Order"),
106 save_and_quotation => 0,
108 save_and_sales_order => 0,
109 save_and_purchase_order => 0,
110 save_and_delivery_order => 0,
111 save_and_ap_transaction => 0,
112 save_and_invoice => 0,
113 delete => sub { $::instance_conf->get_sales_delivery_order_show_delete },
116 customervendor => "customer",
118 nr_key => "donumber",
121 part_classification_query => [ "used_for_sale" => 1 ],
122 right => "sales_delivery_order_edit",
127 my ($class, $controller) = @_;
128 my $o = bless {}, $class;
137 SALES_DELIVERY_ORDER_TYPE,
138 PURCHASE_DELIVERY_ORDER_TYPE,
139 SUPPLIER_DELIVERY_ORDER_TYPE,
140 RMA_DELIVERY_ORDER_TYPE,
149 my ($self, $key) = @_;
151 my $ret = $type_data{$self->type}->{$key} // die "unknown property '$key'";
159 my ($self, $topic, $key) = @_;
161 my $ret = $type_data{$self->type}->{$topic}->{$key} // die "unknown property '$key' in topic '$topic'";
169 my ($self, $string) = @_;
170 _get3($self, "text", $string);
174 my ($self, $string) = @_;
175 _get3($self, "show_menu", $string);
179 my ($self, $string) = @_;
180 _get3($self, "workflow", $string);
184 my ($self, $string) = @_;
185 _get3($self, "properties", $string);
189 !!exists $type_data{$_[1]};
193 $type_data{ $_[0]->type } // die "unknown type";
197 _get($_[0], "right");
201 _get3($_[0], "properties", "is_quotation");
205 _get3($_[0], "properties", "customervendor");
209 _get3($_[0], "properties", "nr_key");
212 sub part_classification_query {
213 my ($self, $string) = @_;
214 _get($self, "part_classification_query");
217 sub set_reqdate_by_type {
220 if (!$self->c->order->reqdate) {
221 $self->c->order->reqdate(DateTime->today_local->next_workday(extra_days => 1));
225 sub get_reqdate_by_type {
226 my ($self, $reqdate, $saved_reqdate) = @_;
228 if ($reqdate == $saved_reqdate) {
229 return DateTime->today_local->next_workday(extra_days => 1);