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_ORDER_TYPE => 'sales_order',
10 PURCHASE_ORDER_TYPE => 'purchase_order',
11 SALES_QUOTATION_TYPE => 'sales_quotation',
12 REQUEST_QUOTATION_TYPE => 'request_quotation',
13 PURCHASE_DELIVERY_ORDER_TYPE => 'purchase_delivery_order',
14 SALES_DELIVERY_ORDER_TYPE => 'sales_delivery_order',
17 our @EXPORT_OK = qw(SALES_ORDER_TYPE PURCHASE_ORDER_TYPE SALES_QUOTATION_TYPE REQUEST_QUOTATION_TYPE);
19 use Rose::Object::MakeMethods::Generic scalar => [ qw(c) ];
22 SALES_ORDER_TYPE() => {
24 delete => t8('The order has been deleted'),
25 saved => t8('The order has been saved'),
26 add => t8("Add Sales Order"),
27 edit => t8("Edit Sales Order"),
30 save_and_quotation => 1,
32 save_and_sales_order => 0,
33 save_and_purchase_order => 1,
34 save_and_delivery_order => 1,
35 save_and_ap_transaction => 0,
36 delete => sub { $::instance_conf->get_sales_order_show_delete },
39 to_order_type => "purchase_order",
40 to_quotation_type => "sales_quotation",
41 to_order_copy_shipto => 1,
44 customervendor => "customer",
46 nr_key => "ordnumber",
48 part_classification_query => [ "used_for_sale" => 1 ],
49 right => "sales_order_edit",
51 PURCHASE_ORDER_TYPE() => {
53 delete => t8('The order has been deleted'),
54 saved => t8('The order has been saved'),
55 add => t8("Add Purchase Order"),
56 edit => t8("Edit Purchase Order"),
59 save_and_quotation => 0,
61 save_and_sales_order => 1,
62 save_and_purchase_order => 0,
63 save_and_delivery_order => 1,
64 save_and_ap_transaction => 1,
65 delete => sub { $::instance_conf->get_purchase_order_show_delete },
68 to_order_type => "sales_order",
69 to_quotation_type => "request_quotation",
70 to_order_copy_shipto => 0,
73 customervendor => "vendor",
75 nr_key => "ordnumber",
77 part_classification_query => [ "used_for_purchase" => 1 ],
78 right => "purchase_order_edit",
80 SALES_QUOTATION_TYPE() => {
82 delete => t8('The quotation has been deleted'),
83 saved => t8('The quotation has been saved'),
84 add => t8("Add Quotation"),
85 edit => t8("Edit Quotation"),
88 save_and_quotation => 0,
90 save_and_sales_order => 1,
91 save_and_purchase_order => 0,
92 save_and_delivery_order => 0,
93 save_and_ap_transaction => 0,
97 to_order_type => "sales_order",
98 to_quotation_type => "request_quotation",
99 to_order_copy_shipto => 0,
102 customervendor => "customer",
104 nr_key => "quonumber",
106 part_classification_query => [ "used_for_sale" => 1 ],
107 right => "sales_quotation_edit",
109 REQUEST_QUOTATION_TYPE() => {
111 delete => t8('The rfq has been deleted'),
112 saved => t8('The rfq has been saved'),
113 add => t8("Add Request for Quotation"),
114 edit => t8("Edit Request for Quotation"),
117 save_and_quotation => 0,
119 save_and_sales_order => 0,
120 save_and_purchase_order => 1,
121 save_and_delivery_order => 0,
122 save_and_ap_transaction => 0,
126 to_order_type => "purchase_order",
127 to_quotation_type => "request_quotation",
128 to_order_copy_shipto => 0,
131 customervendor => "vendor",
133 nr_key => "quonumber",
135 part_classification_query => [ "used_for_purchase" => 1 ],
136 right => "request_quotation_edit",
138 SALES_DELIVERY_ORDER_TYPE() => {
140 delete => t8('Delivery Order has been deleted'),
141 saved => t8('Delivery Order has been saved'),
142 add => t8("Add Sales Delivery Order"),
143 edit => t8("Edit Sales Delivery Order"),
146 save_and_quotation => 0,
148 save_and_sales_order => 0,
149 save_and_purchase_order => 0,
150 save_and_delivery_order => 0,
151 save_and_ap_transaction => 0,
152 delete => sub { $::instance_conf->get_sales_delivery_order_show_delete },
155 customervendor => "customer",
156 nr_key => "donumber",
158 part_classification_query => [ "used_for_sale" => 1 ],
159 right => "sales_delivery_order_edit",
161 PURCHASE_DELIVERY_ORDER_TYPE() => {
163 delete => t8('Delivery Order has been deleted'),
164 saved => t8('Delivery Order has been saved'),
165 add => t8("Add Purchase Delivery Order"),
166 edit => t8("Edit Purchase Delivery Order"),
169 save_and_quotation => 0,
171 save_and_sales_order => 0,
172 save_and_purchase_order => 0,
173 save_and_delivery_order => 0,
174 save_and_ap_transaction => 0,
175 delete => sub { $::instance_conf->get_sales_delivery_order_show_delete },
178 customervendor => "vendor",
179 nr_key => "donumber",
181 part_classification_query => [ "used_for_purchase" => 1 ],
182 right => "purchase_delivery_order_edit",
188 my ($class, $controller) = @_;
189 my $o = bless {}, $class;
200 SALES_QUOTATION_TYPE,
201 REQUEST_QUOTATION_TYPE,
202 SALES_DELIVERY_ORDER_TYPE,
203 PURCHASE_DELIVERY_ORDER_TYPE,
212 my ($self, $key) = @_;
214 my $ret = $type_data{$self->type}->{$key} // die "unknown property '$key'";
222 my ($self, $topic, $key) = @_;
224 my $ret = $type_data{$self->type}->{$topic}->{$key} // die "unknown property '$key' in topic '$topic'";
232 my ($self, $string) = @_;
233 _get3($self, "text", $string);
237 my ($self, $string) = @_;
238 _get3($self, "show_menu", $string);
242 my ($self, $string) = @_;
243 _get3($self, "workflow", $string);
247 my ($self, $string) = @_;
248 _get3($self, "properties", $string);
252 !!exists $type_data{$_[1]};
256 $type_data{ $_[0]->type } // die "unknown type";
260 _get($_[0], "right");
264 _get3($_[0], "properties", "is_quotation");
268 _get3($_[0], "properties", "customervendor");
272 _get3($_[0], "properties", "nr_key");
275 sub part_classification_query {
276 my ($self, $string) = @_;
277 _get($self, "part_classification_query");
280 sub set_reqdate_by_type {
283 my $extra_days = $self->type eq SALES_QUOTATION_TYPE ? $::instance_conf->get_reqdate_interval :
284 $self->type eq SALES_ORDER_TYPE ? $::instance_conf->get_delivery_date_interval : 1;
286 if ( ($self->type eq SALES_ORDER_TYPE && $::instance_conf->get_deliverydate_on)
287 || ($self->type eq SALES_QUOTATION_TYPE && $::instance_conf->get_reqdate_on)
288 && (!$self->order->reqdate)) {
289 $self->c->order->reqdate(DateTime->today_local->next_workday(extra_days => $extra_days));
293 sub get_reqdate_by_type {
294 my ($self, $reqdate, $saved_reqdate) = @_;
296 if ($reqdate == $saved_reqdate) {
297 my $extra_days = $self->type eq SALES_QUOTATION_TYPE ? $::instance_conf->get_reqdate_interval :
298 $self->type eq SALES_ORDER_TYPE ? $::instance_conf->get_delivery_date_interval : 1;
300 if ( ($self->type eq SALES_ORDER_TYPE && !$::instance_conf->get_deliverydate_on)
301 || ($self->type eq SALES_QUOTATION_TYPE && !$::instance_conf->get_reqdate_on)) {
304 return DateTime->today_local->next_workday(extra_days => $extra_days);