X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;ds=inline;f=SL%2FController%2FDeliveryOrder%2FTypeData.pm;h=8db84c4414aa2aa2f6f91f4802905f42be33585e;hb=0eea0d4d7d489f49a6451b01799bb9c7d77f358f;hp=e525f576a772ef3fa6994e93d115bbf9f760af6f;hpb=6b9c37ca14d5d045f83f5eed35b15a5857ec1190;p=kivitendo-erp.git diff --git a/SL/Controller/DeliveryOrder/TypeData.pm b/SL/Controller/DeliveryOrder/TypeData.pm index e525f576a..8db84c441 100644 --- a/SL/Controller/DeliveryOrder/TypeData.pm +++ b/SL/Controller/DeliveryOrder/TypeData.pm @@ -4,289 +4,81 @@ use strict; use Exporter qw(import); use Scalar::Util qw(weaken); use SL::Locale::String qw(t8); - -use constant { - SALES_ORDER_TYPE => 'sales_order', - PURCHASE_ORDER_TYPE => 'purchase_order', - SALES_QUOTATION_TYPE => 'sales_quotation', - REQUEST_QUOTATION_TYPE => 'request_quotation', - PURCHASE_DELIVERY_ORDER_TYPE => 'purchase_delivery_order', - SALES_DELIVERY_ORDER_TYPE => 'sales_delivery_order', -}; - -our @EXPORT_OK = qw(SALES_ORDER_TYPE PURCHASE_ORDER_TYPE SALES_QUOTATION_TYPE REQUEST_QUOTATION_TYPE); +use SL::DB::DeliveryOrder::TypeData qw(:types :subs); use Rose::Object::MakeMethods::Generic scalar => [ qw(c) ]; -my %type_data = ( - SALES_ORDER_TYPE() => { - text => { - delete => t8('The order has been deleted'), - saved => t8('The order has been saved'), - add => t8("Add Sales Order"), - edit => t8("Edit Sales Order"), - }, - show_menu => { - save_and_quotation => 1, - save_and_rfq => 0, - save_and_sales_order => 0, - save_and_purchase_order => 1, - save_and_delivery_order => 1, - save_and_ap_transaction => 0, - delete => sub { $::instance_conf->get_sales_order_show_delete }, - }, - workflow => { - to_order_type => "purchase_order", - to_quotation_type => "sales_quotation", - to_order_copy_shipto => 1, - }, - properties => { - customervendor => "customer", - is_quotation => 0, - nr_key => "ordnumber", - }, - part_classification_query => [ "used_for_sale" => 1 ], - right => "sales_order_edit", - }, - PURCHASE_ORDER_TYPE() => { - text =>{ - delete => t8('The order has been deleted'), - saved => t8('The order has been saved'), - add => t8("Add Purchase Order"), - edit => t8("Edit Purchase Order"), - }, - show_menu => { - save_and_quotation => 0, - save_and_rfq => 1, - save_and_sales_order => 1, - save_and_purchase_order => 0, - save_and_delivery_order => 1, - save_and_ap_transaction => 1, - delete => sub { $::instance_conf->get_purchase_order_show_delete }, - }, - workflow => { - to_order_type => "sales_order", - to_quotation_type => "request_quotation", - to_order_copy_shipto => 0, - }, - properties => { - customervendor => "vendor", - is_quotation => 0, - nr_key => "ordnumber", - }, - part_classification_query => [ "used_for_purchase" => 1 ], - right => "purchase_order_edit", - }, - SALES_QUOTATION_TYPE() => { - text => { - delete => t8('The quotation has been deleted'), - saved => t8('The quotation has been saved'), - add => t8("Add Quotation"), - edit => t8("Edit Quotation"), - }, - show_menu => { - save_and_quotation => 0, - save_and_rfq => 0, - save_and_sales_order => 1, - save_and_purchase_order => 0, - save_and_delivery_order => 0, - save_and_ap_transaction => 0, - delete => 1, - }, - workflow => { - to_order_type => "sales_order", - to_quotation_type => "request_quotation", - to_order_copy_shipto => 0, - }, - properties => { - customervendor => "customer", - is_quotation => 1, - nr_key => "quonumber", - }, - part_classification_query => [ "used_for_sale" => 1 ], - right => "sales_quotation_edit", - }, - REQUEST_QUOTATION_TYPE() => { - text => { - delete => t8('The rfq has been deleted'), - saved => t8('The rfq has been saved'), - add => t8("Add Request for Quotation"), - edit => t8("Edit Request for Quotation"), - }, - show_menu => { - save_and_quotation => 0, - save_and_rfq => 0, - save_and_sales_order => 0, - save_and_purchase_order => 1, - save_and_delivery_order => 0, - save_and_ap_transaction => 0, - delete => 1, - }, - workflow => { - to_order_type => "purchase_order", - to_quotation_type => "request_quotation", - to_order_copy_shipto => 0, - }, - properties => { - customervendor => "vendor", - is_quotation => 1, - nr_key => "quonumber", - }, - part_classification_query => [ "used_for_purchase" => 1 ], - right => "request_quotation_edit", - }, - SALES_DELIVERY_ORDER_TYPE() => { - text => { - delete => t8('Delivery Order has been deleted'), - saved => t8('Delivery Order has been saved'), - add => t8("Add Sales Delivery Order"), - edit => t8("Edit Sales Delivery Order"), - }, - show_menu => { - save_and_quotation => 0, - save_and_rfq => 0, - save_and_sales_order => 0, - save_and_purchase_order => 0, - save_and_delivery_order => 0, - save_and_ap_transaction => 0, - delete => sub { $::instance_conf->get_sales_delivery_order_show_delete }, - }, - properties => { - customervendor => "customer", - nr_key => "donumber", - }, - part_classification_query => [ "used_for_sale" => 1 ], - right => "sales_delivery_order_edit", - }, - PURCHASE_DELIVERY_ORDER_TYPE() => { - text => { - delete => t8('Delivery Order has been deleted'), - saved => t8('Delivery Order has been saved'), - add => t8("Add Purchase Delivery Order"), - edit => t8("Edit Purchase Delivery Order"), - }, - show_menu => { - save_and_quotation => 0, - save_and_rfq => 0, - save_and_sales_order => 0, - save_and_purchase_order => 0, - save_and_delivery_order => 0, - save_and_ap_transaction => 0, - delete => sub { $::instance_conf->get_sales_delivery_order_show_delete }, - }, - properties => { - customervendor => "vendor", - nr_key => "donumber", - }, - part_classification_query => [ "used_for_purchase" => 1 ], - right => "purchase_delivery_order_edit", - }, - -); - sub new { my ($class, $controller) = @_; my $o = bless {}, $class; - $o->c($controller); - weaken($o->{c}); - - return $o; -} -sub valid_types { - [ - SALES_ORDER_TYPE, - PURCHASE_ORDER_TYPE, - SALES_QUOTATION_TYPE, - REQUEST_QUOTATION_TYPE, - SALES_DELIVERY_ORDER_TYPE, - PURCHASE_DELIVERY_ORDER_TYPE, - ]; -} - -sub type { - $_[0]->c->type; -} - -sub _get { - my ($self, $key) = @_; - - my $ret = $type_data{$self->type}->{$key} // die "unknown property '$key'"; + if ($controller) { + $o->c($controller); + weaken($o->{c}); + } - ref $ret eq 'CODE' - ? $ret->() - : $ret; + return $o; } -sub _get3 { - my ($self, $topic, $key) = @_; - - my $ret = $type_data{$self->type}->{$topic}->{$key} // die "unknown property '$key' in topic '$topic'"; - - ref $ret eq 'CODE' - ? $ret->() - : $ret; +sub validate { + my ($self, $string) = @_; + validate_type($string); } sub text { my ($self, $string) = @_; - _get3($self, "text", $string); + get3($self->c->type, "text", $string); } sub show_menu { my ($self, $string) = @_; - _get3($self, "show_menu", $string); + get3($self->c->type, "show_menu", $string); } sub workflow { my ($self, $string) = @_; - _get3($self, "workflow", $string); + get3($self->c->type, "workflow", $string); } sub properties { my ($self, $string) = @_; - _get3($self, "properties", $string); -} - -sub is_valid_type { - !!exists $type_data{$_[1]}; -} - -sub type_data { - $type_data{ $_[0]->type } // die "unknown type"; + get3($self->c->type, "properties", $string); } sub access { - _get($_[0], "right"); + get($_[0]->c->type, "right"); } sub is_quotation { - _get3($_[0], "properties", "is_quotation"); + get3($_[0]->c->type, "properties", "is_quotation"); } sub customervendor { - _get3($_[0], "properties", "customervendor"); + get3($_[0]->c->type, "properties", "customervendor"); +} + +sub is_customer { + get3($_[0]->c->type, "properties", "is_customer"); } sub nr_key { - _get3($_[0], "properties", "nr_key"); + get3($_[0]->c->type, "properties", "nr_key"); +} + +sub transfer { + get3($_[0]->c->type, "properties", "transfer"); } sub part_classification_query { my ($self, $string) = @_; - _get($self, "part_classification_query"); + get($self->c->type, "part_classification_query"); } sub set_reqdate_by_type { my ($self) = @_; - my $extra_days = $self->type eq SALES_QUOTATION_TYPE ? $::instance_conf->get_reqdate_interval : - $self->type eq SALES_ORDER_TYPE ? $::instance_conf->get_delivery_date_interval : 1; - - if ( ($self->type eq SALES_ORDER_TYPE && $::instance_conf->get_deliverydate_on) - || ($self->type eq SALES_QUOTATION_TYPE && $::instance_conf->get_reqdate_on) - && (!$self->order->reqdate)) { - $self->c->order->reqdate(DateTime->today_local->next_workday(extra_days => $extra_days)); + if (!$self->c->order->reqdate) { + $self->c->order->reqdate(DateTime->today_local->next_workday(extra_days => 1)); } } @@ -294,16 +86,10 @@ sub get_reqdate_by_type { my ($self, $reqdate, $saved_reqdate) = @_; if ($reqdate == $saved_reqdate) { - my $extra_days = $self->type eq SALES_QUOTATION_TYPE ? $::instance_conf->get_reqdate_interval : - $self->type eq SALES_ORDER_TYPE ? $::instance_conf->get_delivery_date_interval : 1; - - if ( ($self->type eq SALES_ORDER_TYPE && !$::instance_conf->get_deliverydate_on) - || ($self->type eq SALES_QUOTATION_TYPE && !$::instance_conf->get_reqdate_on)) { - return ''; - } else { - return DateTime->today_local->next_workday(extra_days => $extra_days); - } + return DateTime->today_local->next_workday(extra_days => 1); } else { return $reqdate; } } + +1;