X-Git-Url: http://wagnertech.de/git?p=kivitendo-erp.git;a=blobdiff_plain;f=SL%2FDB%2FDeliveryOrder%2FTypeData.pm;fp=SL%2FDB%2FDeliveryOrder%2FTypeData.pm;h=8b523fb5a4b8203bed30dce2fbd08275d91c992c;hp=0000000000000000000000000000000000000000;hb=b293ff8ad52fc76ba0c44783e3982418114d6b08;hpb=d4925a8b60f04674885e30d9316dc0263f8b9a84 diff --git a/SL/DB/DeliveryOrder/TypeData.pm b/SL/DB/DeliveryOrder/TypeData.pm new file mode 100644 index 000000000..8b523fb5a --- /dev/null +++ b/SL/DB/DeliveryOrder/TypeData.pm @@ -0,0 +1,200 @@ +package SL::DB::DeliveryOrder::TypeData; + +use strict; +use Carp; +use Exporter qw(import); +use Scalar::Util qw(weaken); +use SL::Locale::String qw(t8); + +use constant { + SALES_DELIVERY_ORDER_TYPE => 'sales_delivery_order', + PURCHASE_DELIVERY_ORDER_TYPE => 'purchase_delivery_order', + SUPPLIER_DELIVERY_ORDER_TYPE => 'supplier_delivery_order', + RMA_DELIVERY_ORDER_TYPE => 'rma_delivery_order', +}; + +my @export_types = qw(SALES_DELIVERY_ORDER_TYPE PURCHASE_DELIVERY_ORDER_TYPE SUPPLIER_DELIVERY_ORDER_TYPE RMA_DELIVERY_ORDER_TYPE); +my @export_subs = qw(valid_types validate_type is_valid_type get get3); + +our @EXPORT_OK = (@export_types, @export_subs); +our %EXPORT_TAGS = (types => \@export_types, subs => \@export_subs); + +my %type_data = ( + 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"), + attachment => t8("sales_delivery_order_list"), + }, + 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, + save_and_invoice => 0, + delete => sub { $::instance_conf->get_sales_delivery_order_show_delete }, + new_controller => 0, + }, + properties => { + customervendor => "customer", + is_customer => 1, + nr_key => "donumber", + transfer => 'out', + transnumber => 'sdonumber', + }, + part_classification_query => [ "used_for_sale" => 1 ], + rights => { + edit => "sales_delivery_order_edit", + view => "sales_delivery_order_edit | sales_delivery_order_view", + }, + }, + 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"), + attachment => t8("purchase_delivery_order_list"), + }, + 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, + save_and_invoice => 0, + delete => sub { $::instance_conf->get_sales_delivery_order_show_delete }, + new_controller => 0, + }, + properties => { + customervendor => "vendor", + is_customer => 0, + nr_key => "donumber", + transfer => 'in', + transnumber => 'pdonumber', + }, + part_classification_query => [ "used_for_purchase" => 1 ], + rights => { + edit => "purchase_delivery_order_edit", + view => "purchase_delivery_order_edit | purchase_delivery_order_view", + }, + }, + SUPPLIER_DELIVERY_ORDER_TYPE() => { + text => { + delete => t8('Supplier Delivery Order has been deleted'), + saved => t8('Supplier Delivery Order has been saved'), + add => t8("Add Supplier Delivery Order"), + edit => t8("Edit Supplier Delivery Order"), + attachment => t8("supplier_delivery_order_list"), + }, + 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, + save_and_invoice => 0, + delete => sub { $::instance_conf->get_sales_delivery_order_show_delete }, + new_controller => 1, + }, + properties => { + customervendor => "vendor", + is_customer => 0, + nr_key => "donumber", + transfer => 'out', + transnumber => 'sudonumber', + }, + part_classification_query => [ "used_for_purchase" => 1 ], + rights => { + edit => "purchase_delivery_order_edit", + view => "purchase_delivery_order_edit | purchase_delivery_order_view", + }, + }, + RMA_DELIVERY_ORDER_TYPE() => { + text => { + delete => t8('Delivery Order has been deleted'), + saved => t8('Delivery Order has been saved'), + add => t8("Add RMA Delivery Order"), + edit => t8("Edit RMA Delivery Order"), + attachment => t8("rma_delivery_order_list"), + }, + 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, + save_and_invoice => 0, + delete => sub { $::instance_conf->get_sales_delivery_order_show_delete }, + new_controller => 1, + }, + properties => { + customervendor => "customer", + is_customer => 1, + nr_key => "donumber", + transfer => 'in', + transnumber => 'rdonumber', + }, + part_classification_query => [ "used_for_sale" => 1 ], + rights => { + edit => "sales_delivery_order_edit", + view => "sales_delivery_order_edit | sales_delivery_order_view", + }, + }, +); + +my @valid_types = ( + SALES_DELIVERY_ORDER_TYPE, + PURCHASE_DELIVERY_ORDER_TYPE, + SUPPLIER_DELIVERY_ORDER_TYPE, + RMA_DELIVERY_ORDER_TYPE, +); + +my %valid_types = map { $_ => $_ } @valid_types; + +sub valid_types { + \@valid_types; +} + +sub is_valid_type { + !!exists $type_data{$_[0]}; +} + +sub validate_type { + my ($type) = @_; + + return $valid_types{$type} // croak "invalid type '$type'"; +} + +sub get { + my ($type, $key) = @_; + + croak "invalid type '$type'" unless exists $type_data{$type}; + + my $ret = $type_data{$type}->{$key} // die "unknown property '$key'"; + + ref $ret eq 'CODE' + ? $ret->() + : $ret; +} + +sub get3 { + my ($type, $topic, $key) = @_; + + croak "invalid type '$type'" unless exists $type_data{$type}; + + my $ret = $type_data{$type}{$topic}{$key} // croak "unknown property '$key' in topic '$topic' for type '$type'"; + + ref $ret eq 'CODE' + ? $ret->() + : $ret; +} + +1;