my %config;
-our %foreign_key_name_map = (
- oe => { payment => 'payment_terms', },
- ar => { payment => 'payment_terms', },
- ap => { payment => 'payment_terms', },
-
- orderitems => { parts => 'part', trans => 'order', },
- delivery_order_items => { parts => 'part' },
- invoice => { parts => 'part' },
- follow_ups => { 'employee_obj' => 'created_for' },
-
- periodic_invoices_configs => { oe => 'order' },
+our %foreign_key_name_map = (
+ KIVITENDO => {
+ oe => { payment => 'payment_terms', },
+ ar => { payment => 'payment_terms', },
+ ap => { payment => 'payment_terms', },
+
+ orderitems => { parts => 'part', trans => 'order', },
+ delivery_order_items => { parts => 'part' },
+ invoice => { parts => 'part' },
+ follow_ups => { 'employee_obj' => 'created_for' },
+
+ periodic_invoices_configs => { oe => 'order' },
+ },
);
sub setup {
if ($foreign_key_definition && ($definition =~ /\Q$foreign_key_definition\E/)) {
my ($start, $end) = ($-[0], $+[0]);
- while (my ($auto_generated_name, $desired_name) = each %{ $foreign_key_name_map{$table} || {} }) {
+ my %changes = map { %{$_} } grep { $_ } ($foreign_key_name_map{$domain}->{ALL}, $foreign_key_name_map{$domain}->{$table});
+ while (my ($auto_generated_name, $desired_name) = each %changes) {
$foreign_key_definition =~ s/^ \s \s ${auto_generated_name} \b/ ${desired_name}/msx;
}
GetOptions(
'client=s' => \ my $client,
all => \ my $all,
+ 'db=s' => \ my $db,
'no-commit|dry-run' => \ my $nocommit,
help => sub { pod2usage(verbose => 99, sections => 'NAME|SYNOPSIS|OPTIONS') },
quiet => \ my $quiet,
$options->{client} = $client;
$options->{all} = $all;
+ $options->{db} = $db;
$options->{nocommit} = $nocommit;
$options->{quiet} = $quiet;
$options->{color} = -t STDOUT ? 1 : 0;
sub make_tables {
my %tables_by_domain;
if ($config{all}) {
- foreach my $domain (sort keys %package_names) {
+ my @domains = $config{db} ? (uc $config{db}) : sort keys %package_names;
+
+ foreach my $domain (@domains) {
my $db = SL::DB::create(undef, $domain);
$tables_by_domain{$domain} = [ grep { my $table = $_; none { $_ eq $table } @{ $blacklist{$domain} } } $db->list_tables ];
$db->disconnect;
print @_, $/;
}
+sub check_errors_in_package_names {
+ foreach my $domain (sort keys %package_names) {
+ my @both = grep { $package_names{$domain}->{$_} } @{ $blacklist{$domain} || [] };
+ next unless @both;
+
+ print "Error: domain '$domain': The following table names are present in both the black list and the package name hash: ", join(' ', sort @both), "\n";
+ exit 1;
+ }
+}
+
parse_args(\%config);
setup();
+check_errors_in_package_names();
my %tables_by_domain = make_tables();
scripts/rose_auto_create_model.pl --client name-or-id [--all|-a]
# updates all models
- scripts/rose_auto_create_model.pl --client name-or-id --all
+ scripts/rose_auto_create_model.pl --client name-or-id --all [--db db]
# updates only customer table, login taken from config
scripts/rose_auto_create_model.pl customer
Process all tables from the database. Only those that are blacklistes in
L<SL::DB::Helper::Mappings> are excluded.
+=item C<--db db>
+
+In combination with C<--all> causes all tables in the specific
+database to be processed, not in all databases.
+
=item C<--no-commit, -n>
=item C<--dry-run>