Vorschläge für Kontoauszüge verbessern, fall: remote_account_number
[kivitendo-erp.git] / SL / InstanceConfiguration.pm
index f8d818f..4c76796 100644 (file)
@@ -2,219 +2,85 @@ package SL::InstanceConfiguration;
 
 use strict;
 
 
 use strict;
 
-use SL::DBUtils;
+use Carp;
+use SL::DBUtils ();
+use SL::System::Process;
 
 
-sub new {
-  my ($class) = @_;
+use parent qw(Rose::Object);
+use Rose::Object::MakeMethods::Generic (
+  'scalar --get_set_init' => [ qw(data currencies default_currency _table_currencies_exists crm_installed) ],
+);
 
 
-  return bless {}, $class;
+sub init_data {
+  return {} if !$::auth->client;
+  return SL::DBUtils::selectfirst_hashref_query($::form, $::form->get_standard_dbh, qq|SELECT * FROM defaults|);
 }
 
 }
 
-sub init {
-  my ($self) = @_;
-
-  $self->{data} = selectfirst_hashref_query($::form, $::form->get_standard_dbh, qq|SELECT * FROM defaults|);
-
-  #To get all currencies and the default currency:
-  ($self->{data}->{curr}) = selectrow_query($::form, $::form->get_standard_dbh, qq|SELECT name AS curr FROM currencies WHERE id = (SELECT currency_id FROM defaults)|);
-  $self->{currencies}     = [ map { $_->{name} } selectall_hashref_query($::form, $::form->get_standard_dbh, qq|SELECT name FROM currencies ORDER BY id|) ];
-
-  return $self;
-}
-
-sub get_default_currency {
-  my ($self) = @_;
-
-  return $self->{data}->{curr};
-}
-
-sub get_currencies {
-  my ($self) = @_;
-
-  return @{ $self->{currencies} };
-}
-
-sub get_accounting_method {
-  my ($self) = @_;
-  return $self->{data}->{accounting_method};
-}
-
-sub get_inventory_system {
-  my ($self) = @_;
-  return $self->{data}->{inventory_system};
-}
-
-sub get_profit_determination {
-  my ($self) = @_;
-  return $self->{data}->{profit_determination};
-}
-
-sub get_is_changeable {
-  my ($self) = @_;
-  return $self->{data}->{is_changeable};
+sub init__table_currencies_exists {
+  return 0 if !$::auth->client;
+  return !!(SL::DBUtils::selectall_hashref_query($::form, $::form->get_standard_dbh, qq|SELECT tablename FROM pg_tables WHERE (schemaname = 'public') AND (tablename = 'currencies')|))[0];
 }
 
 }
 
-sub get_ir_changeable {
+sub init_currencies {
   my ($self) = @_;
   my ($self) = @_;
-  return $self->{data}->{ir_changeable};
-}
-
-sub get_ar_changeable {
-  my ($self) = @_;
-  return $self->{data}->{ar_changeable};
-}
-
-sub get_ap_changeable {
-  my ($self) = @_;
-  return $self->{data}->{ap_changeable};
-}
-
-sub get_gl_changeable {
-  my ($self) = @_;
-  return $self->{data}->{gl_changeable};
-}
-
-sub get_datev_check_on_sales_invoice {
-  my ($self) = @_;
-  return $self->{data}->{datev_check_on_sales_invoice};
-}
 
 
-sub get_datev_check_on_purchase_invoice {
-  my ($self) = @_;
-  return $self->{data}->{datev_check_on_purchase_invoice};
+  return [] if !$self->_table_currencies_exists;
+  return [ map { $_->{name} } SL::DBUtils::selectall_hashref_query($::form, $::form->get_standard_dbh, qq|SELECT name FROM currencies ORDER BY id ASC|) ];
 }
 
 }
 
-sub get_datev_check_on_ar_transaction {
+sub init_default_currency {
   my ($self) = @_;
   my ($self) = @_;
-  return $self->{data}->{datev_check_on_ar_transaction};
-}
 
 
-sub get_datev_check_on_ap_transaction {
-  my ($self) = @_;
-  return $self->{data}->{datev_check_on_ap_transaction};
+  return undef if !$self->_table_currencies_exists || !$self->data->{currency_id};
+  return (SL::DBUtils::selectfirst_array_query($::form, $::form->get_standard_dbh, qq|SELECT name FROM currencies WHERE id = ?|, $self->data->{currency_id}))[0];
 }
 
 }
 
-sub get_datev_check_on_gl_transaction {
-  my ($self) = @_;
-  return $self->{data}->{datev_check_on_gl_transaction};
+sub init_crm_installed {
+  return -f (SL::System::Process->exe_dir . '/crm/Changelog');
 }
 
 }
 
-sub get_show_bestbefore {
+sub reload {
   my ($self) = @_;
   my ($self) = @_;
-  return $self->{data}->{show_bestbefore};
-}
 
 
-sub get_is_show_mark_as_paid {
-  my ($self) = @_;
-  return $self->{data}->{is_show_mark_as_paid};
-}
-
-sub get_ir_show_mark_as_paid {
-  my ($self) = @_;
-  return $self->{data}->{ir_show_mark_as_paid};
-}
-
-sub get_ar_show_mark_as_paid {
-  my ($self) = @_;
-  return $self->{data}->{ar_show_mark_as_paid};
-}
+  delete @{ $self }{qw(data currencies default_currency)};
 
 
-sub get_ap_show_mark_as_paid {
-  my ($self) = @_;
-  return $self->{data}->{ap_show_mark_as_paid};
-}
-
-sub get_sales_order_show_delete {
-  my ($self) = @_;
-  return $self->{data}->{sales_order_show_delete};
-}
-
-sub get_purchase_order_show_delete {
-  my ($self) = @_;
-  return $self->{data}->{purchase_order_show_delete};
-}
-
-sub get_sales_delivery_order_show_delete {
-  my ($self) = @_;
-  return $self->{data}->{sales_delivery_order_show_delete};
-}
-
-sub get_purchase_delivery_order_show_delete {
-  my ($self) = @_;
-  return $self->{data}->{purchase_delivery_order_show_delete};
-}
-
-sub get_default_warehouse_id {
-  my ($self) = @_;
-  return ($self->{data}->{warehouse_id});
-}
-
-sub get_default_bin_id {
-  my ($self) = @_;
-  return ($self->{data}->{bin_id});
-}
-sub get_default_warehouse_id_ignore_onhand {
-  my ($self) = @_;
-  return ($self->{data}->{warehouse_id_ignore_onhand});
-}
-
-sub get_default_bin_id_ignore_onhand {
-  my ($self) = @_;
-  return ($self->{data}->{bin_id_ignore_onhand});
+  return $self;
 }
 
 }
 
-
-sub get_transfer_default {
+sub get_currencies {
   my ($self) = @_;
   my ($self) = @_;
-  return ($self->{data}->{transfer_default});
+  return @{ $self->currencies };
 }
 
 }
 
-sub get_transfer_default_use_master_default_bin {
+sub get_address {
+  # Compatibility function: back in the day there was only a single
+  # address field.
   my ($self) = @_;
   my ($self) = @_;
-  return ($self->{data}->{transfer_default_use_master_default_bin});
-}
 
 
-sub get_transfer_default_ignore_onhand {
-  my ($self) = @_;
-  return ($self->{data}->{transfer_default_ignore_onhand});
-}
-# currently unused - value is set via audit_control (Bücherkontrolle)
-sub get_max_future_booking_interval {
-  my ($self) = @_;
-  return ($self->{data}->{max_future_booking_interval});
-}
+  my $zipcode_city = join ' ', grep { $_ } ($self->get_address_zipcode, $self->get_address_city);
 
 
-sub get_webdav {
-  my ($self) = @_;
-  return ($self->{data}->{webdav});
+  return join "\n", grep { $_ } ($self->get_address_street1, $self->get_address_street2, $zipcode_city, $self->get_address_country);
 }
 
 }
 
-sub get_webdav_documents {
-  my ($self) = @_;
-  return ($self->{data}->{webdav_documents});
-}
+sub AUTOLOAD {
+  our $AUTOLOAD;
 
 
-sub get_vertreter {
-  my ($self) = @_;
-  return ($self->{data}->{vertreter});
-}
+  my $self   =  shift;
+  my $method =  $AUTOLOAD;
+  $method    =~ s/.*:://;
 
 
-sub get_parts_show_image {
-  my ($self) = @_;
-  return ($self->{data}->{parts_show_image});
-}
+  return if $method eq 'DESTROY';
 
 
-sub get_parts_listing_images{
-  my ($self) = @_;
-  return ($self->{data}->{parts_listing_image});
-}
+  if ($method =~ m/^get_/) {
+    $method = substr $method, 4;
+    return $self->data->{$method} if exists $self->data->{$method};
+    croak "Invalid method 'get_${method}'";
+  }
 
 
-sub get_parts_image_css {
-  my ($self) = @_;
-  return ($self->{data}->{parts_image_css});
+  croak "Invalid method '${method}'" if !$self->can($method);
+  return $self->$method(@_);
 }
 
 }
 
-
 1;
 
 __END__
 1;
 
 __END__
@@ -242,9 +108,9 @@ C<$::instance_conf>.
 
 Creates a new instance. Does not read the configuration.
 
 
 Creates a new instance. Does not read the configuration.
 
-=item C<init>
+=item C<crm_installed>
 
 
-Reads the configuration from the database. Returns C<$self>.
+Returns trueish if the CRM component is installed.
 
 =item C<get_currencies>
 
 
 =item C<get_currencies>
 
@@ -267,6 +133,13 @@ Returns the default inventory system, perpetual or periodic
 
 Returns the default profit determination method, balance or income
 
 
 Returns the default profit determination method, balance or income
 
+=item C<get_balance_startdate_method>
+
+Returns the default method for determining the startdate for the balance
+report.
+
+Valid options:
+closed_to start_of_year all_transactions last_ob_or_all_transactions last_ob_or_start_of_year
 
 =item C<get_is_changeable>
 
 
 =item C<get_is_changeable>
 
@@ -313,7 +186,7 @@ Returns the default behavior for showing best before date, true or false
 
 =item C<get_ap_show_mark_as_paid>
 
 
 =item C<get_ap_show_mark_as_paid>
 
-Returns the default behavior for showing the mark as paid button for the
+Returns the default behavior for showing the "mark as paid" button for the
 corresponding record type (true or false).
 
 =item C<get_sales_order_show_delete>
 corresponding record type (true or false).
 
 =item C<get_sales_order_show_delete>
@@ -327,26 +200,24 @@ corresponding record type (true or false).
 Returns the default behavior for showing the delete button for the
 corresponding record type (true or false).
 
 Returns the default behavior for showing the delete button for the
 corresponding record type (true or false).
 
-=item C<get_default_warehouse_id>
+=item C<get_warehouse_id>
 
 Returns the default warehouse_id
 
 
 Returns the default warehouse_id
 
-=item C<get_default_bin_id>
+=item C<get_bin_id>
 
 Returns the default bin_id
 
 
 Returns the default bin_id
 
-=item C<get_default_warehouse_id_ignore_onhand>
+=item C<get_warehouse_id_ignore_onhand>
 
 Returns the default warehouse_id for transfers without checking the
 current stock quantity
 
 
 Returns the default warehouse_id for transfers without checking the
 current stock quantity
 
-=item C<get_default_bin_id_ignore_onhand>
+=item C<get_bin_id_ignore_onhand>
 
 
-Returns the default bin_id for transfers without checking the.
+Returns the default bin_id for transfers without checking the
 current stock quantity
 
 current stock quantity
 
-
-
 =item C<get_transfer_default>
 
 =item C<get_transfer_default_use_master_default_bin>
 =item C<get_transfer_default>
 
 =item C<get_transfer_default_use_master_default_bin>
@@ -361,16 +232,24 @@ Returns the maximum interval value for future bookings
 
 =item C<get_webdav>
 
 
 =item C<get_webdav>
 
-Returns the configuration for webdav
+Returns the configuration for WebDAV
 
 =item C<get_webdav_documents>
 
 
 =item C<get_webdav_documents>
 
-Returns the configuration for storing documents in the corresponding webdav folder
+Returns the configuration for storing documents in the corresponding WebDAV folder
 
 =item C<get_vertreter>
 
 Returns the configuration for "vertreter"
 
 
 =item C<get_vertreter>
 
 Returns the configuration for "vertreter"
 
+=item C<get_feature_experimental_assortment>
+
+Returns the configuration for experimental feature "assortment"
+
+=item C<get_feature_experimental_order>
+
+Returns the configuration for the experimental feature "order"
+
 =item C<get_parts_show_image>
 
 Returns the configuarion for show image in parts
 =item C<get_parts_show_image>
 
 Returns the configuarion for show image in parts
@@ -381,7 +260,7 @@ Returns the css format string for images shown in parts
 
 =item C<get_parts_listing_image>
 
 
 =item C<get_parts_listing_image>
 
-Returns the configuartion for showing the picture in the results when you search for parts
+Returns the configuration for showing the picture in the results when you search for parts
 
 =back
 
 
 =back