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'
15 our @EXPORT_OK = qw(SALES_ORDER_TYPE PURCHASE_ORDER_TYPE SALES_QUOTATION_TYPE REQUEST_QUOTATION_TYPE);
17 use Rose::Object::MakeMethods::Generic scalar => [ qw(c) ];
20 SALES_ORDER_TYPE() => {
22 delete => t8('The order has been deleted'),
23 saved => t8('The order has been saved'),
24 add => t8("Add Sales Order"),
25 edit => t8("Edit Sales Order"),
28 save_and_quotation => 1,
30 save_and_sales_order => 0,
31 save_and_purchase_order => 1,
32 save_and_delivery_order => 1,
33 save_and_ap_transaction => 0,
34 delete => sub { $::instance_conf->get_sales_order_show_delete },
37 to_order_type => "purchase_order",
38 to_quotation_type => "sales_quotation",
39 to_order_copy_shipto => 1,
42 customervendor => "customer",
44 nr_key => "ordnumber",
46 part_classification_query => [ "used_for_sale" => 1 ],
47 right => "sales_order_edit",
49 PURCHASE_ORDER_TYPE() => {
51 delete => t8('The order has been deleted'),
52 saved => t8('The order has been saved'),
53 add => t8("Add Purchase Order"),
54 edit => t8("Edit Purchase Order"),
57 save_and_quotation => 0,
59 save_and_sales_order => 1,
60 save_and_purchase_order => 0,
61 save_and_delivery_order => 1,
62 save_and_ap_transaction => 1,
63 delete => sub { $::instance_conf->get_purchase_order_show_delete },
66 to_order_type => "sales_order",
67 to_quotation_type => "request_quotation",
68 to_order_copy_shipto => 0,
71 customervendor => "vendor",
73 nr_key => "ordnumber",
75 part_classification_query => [ "used_for_purchase" => 1 ],
76 right => "purchase_order_edit",
78 SALES_QUOTATION_TYPE() => {
80 delete => t8('The quotation has been deleted'),
81 saved => t8('The quotation has been saved'),
82 add => t8("Add Quotation"),
83 edit => t8("Edit Quotation"),
86 save_and_quotation => 0,
88 save_and_sales_order => 1,
89 save_and_purchase_order => 0,
90 save_and_delivery_order => 0,
91 save_and_ap_transaction => 0,
95 to_order_type => "sales_order",
96 to_quotation_type => "request_quotation",
97 to_order_copy_shipto => 0,
100 customervendor => "customer",
102 nr_key => "quonumber",
104 part_classification_query => [ "used_for_sale" => 1 ],
105 right => "sales_quotation_edit",
107 REQUEST_QUOTATION_TYPE() => {
109 delete => t8('The rfq has been deleted'),
110 saved => t8('The rfq has been saved'),
111 add => t8("Add Request for Quotation"),
112 edit => t8("Edit Request for Quotation"),
115 save_and_quotation => 0,
117 save_and_sales_order => 0,
118 save_and_purchase_order => 1,
119 save_and_delivery_order => 0,
120 save_and_ap_transaction => 0,
124 to_order_type => "purchase_order",
125 to_quotation_type => "request_quotation",
126 to_order_copy_shipto => 0,
129 customervendor => "vendor",
131 nr_key => "quonumber",
133 part_classification_query => [ "used_for_purchase" => 1 ],
134 right => "request_quotation_edit",
139 my ($class, $controller) = @_;
140 my $o = bless {}, $class;
151 SALES_QUOTATION_TYPE,
152 REQUEST_QUOTATION_TYPE,
161 my ($self, $key) = @_;
163 my $ret = $type_data{$self->type}->{$key} // die "unknown property '$key'";
171 my ($self, $topic, $key) = @_;
173 my $ret = $type_data{$self->type}->{$topic}->{$key} // die "unknown property '$key' in topic '$topic'";
181 my ($self, $string) = @_;
182 _get3($self, "text", $string);
186 my ($self, $string) = @_;
187 _get3($self, "show_menu", $string);
191 my ($self, $string) = @_;
192 _get3($self, "workflow", $string);
196 my ($self, $string) = @_;
197 _get3($self, "properties", $string);
201 !!exists $type_data{$_[1]};
205 $type_data{ $_[0]->type } // die "unknown type";
213 _get3($_[0], "properties", "is_quotation");
217 _get3($_[0], "properties", "customervendor");
221 _get3($_[0], "properties", "nr_key");
224 sub part_classification_query {
225 my ($self, $string) = @_;
226 _get($self, "part_classification_query");
229 sub set_reqdate_by_type {
232 my $extra_days = $self->type eq SALES_QUOTATION_TYPE ? $::instance_conf->get_reqdate_interval :
233 $self->type eq SALES_ORDER_TYPE ? $::instance_conf->get_delivery_date_interval : 1;
235 if ( ($self->type eq SALES_ORDER_TYPE && $::instance_conf->get_deliverydate_on)
236 || ($self->type eq SALES_QUOTATION_TYPE && $::instance_conf->get_reqdate_on)
237 && (!$self->order->reqdate)) {
238 $self->c->order->reqdate(DateTime->today_local->next_workday(extra_days => $extra_days));
242 sub get_reqdate_by_type {
243 my ($self, $reqdate, $saved_reqdate) = @_;
245 if ($reqdate == $saved_reqdate) {
246 my $extra_days = $self->type eq SALES_QUOTATION_TYPE ? $::instance_conf->get_reqdate_interval :
247 $self->type eq SALES_ORDER_TYPE ? $::instance_conf->get_delivery_date_interval : 1;
249 if ( ($self->type eq SALES_ORDER_TYPE && !$::instance_conf->get_deliverydate_on)
250 || ($self->type eq SALES_QUOTATION_TYPE && !$::instance_conf->get_reqdate_on)) {
253 return DateTime->today_local->next_workday(extra_days => $extra_days);