Projekt

Allgemein

Profil

Herunterladen (5,84 KB) Statistiken
| Zweig: | Markierung: | Revision:
82515b2d Sven Schöling
package SL::DB::Helpers::Mappings;

use strict;

5991c23e Sven Schöling
# these will not be managed as Rose::DB models, because they are not normalized,
# significant changes are needed to get them done, or they were done by CRM.
82515b2d Sven Schöling
my @lxoffice_blacklist_permanent = qw(
5991c23e Sven Schöling
leads
f97b0778 Sven Schöling
);
82515b2d Sven Schöling
# these are not managed _yet_, but will hopefully at some point.
# if you are confident that one of these works, remove it here.
my @lxoffice_blacklist_temp = qw(
);

my @lxoffice_blacklist = (@lxoffice_blacklist_permanent, @lxoffice_blacklist_temp);

# map table names to their models.
# unlike rails we have no singular<->plural magic.
# remeber: tables should be named as the plural of the model name.
my %lxoffice_package_names = (
f97b0778 Sven Schöling
acc_trans => 'acc_transaction',
audittrail => 'audit_trail',
82515b2d Sven Schöling
ar => 'invoice',
ap => 'purchase_invoice',
4fd22b56 Sven Schöling
bank_accounts => 'bank_account',
buchungsgruppen => 'buchungsgruppe',
contacts => 'contact',
custom_variable_configs => 'custom_variable_config',
custom_variables => 'custom_variable',
custom_variables_validity => 'custom_variable_validity',
f97b0778 Sven Schöling
customertax => 'customer_tax',
datev => 'datev',
defaults => 'default',
82515b2d Sven Schöling
delivery_orders => 'delivery_order',
delivery_order_items => 'delivery_order_item',
f97b0778 Sven Schöling
department => 'department',
dpt_trans => 'dpt_trans',
4fd22b56 Sven Schöling
drafts => 'draft',
dunning => 'dunning',
dunning_config => 'dunning_config',
employee => 'employee',
f97b0778 Sven Schöling
exchangerate => 'exchangerate',
finanzamt => 'finanzamt',
follow_up_access => 'follow_up_access',
4fd22b56 Sven Schöling
follow_up_links => 'follow_up_link',
follow_ups => 'follow_up',
generic_translations => 'generic_translation',
f97b0778 Sven Schöling
gifi => 'gifi',
82515b2d Sven Schöling
gl => 'GLTransaction',
4fd22b56 Sven Schöling
history_erp => 'history',
f97b0778 Sven Schöling
inventory => 'inventory',
82515b2d Sven Schöling
invoice => 'invoice_item',
4fd22b56 Sven Schöling
language => 'language',
f97b0778 Sven Schöling
license => 'license',
licenseinvoice => 'license_invoice',
makemodel => 'make_model',
4fd22b56 Sven Schöling
notes => 'note',
82515b2d Sven Schöling
orderitems => 'order_item',
oe => 'order',
parts => 'part',
f97b0778 Sven Schöling
partsgroup => 'parts_group',
partstax => 'parts_tax',
4fd22b56 Sven Schöling
payment_terms => 'payment_term',
f97b0778 Sven Schöling
prices => 'prices',
82515b2d Sven Schöling
price_factors => 'price_factor',
4fd22b56 Sven Schöling
pricegroup => 'pricegroup',
82515b2d Sven Schöling
printers => 'Printer',
f97b0778 Sven Schöling
record_links => 'record_link',
4fd22b56 Sven Schöling
rma => 'RMA',
f97b0778 Sven Schöling
rmaitems => 'RMA_item',
4fd22b56 Sven Schöling
sepa_export => 'sepa_export',
sepa_export_items => 'sepa_export_item',
85da554f Sven Schöling
schema_info => 'schema_info',
f97b0778 Sven Schöling
status => 'status',
4fd22b56 Sven Schöling
tax => 'tax',
f97b0778 Sven Schöling
taxkeys => 'tax_key',
tax_zones => 'tax_zone',
todo_user_config => 'todo_user_config',
translation => 'translation',
translation_payment_terms => 'translation_payment_term',
82515b2d Sven Schöling
units => 'unit',
f97b0778 Sven Schöling
units_language => 'units_language',
vendortax => 'vendor_tax',
82515b2d Sven Schöling
);

sub get_blacklist {
return LXOFFICE => \@lxoffice_blacklist;
}

sub get_package_names {
return LXOFFICE => \%lxoffice_package_names;
}

3cc8ad87 Sven Schöling
sub db {
my $string = $_[0];
my $lookup = $lxoffice_package_names{$_[0]} ||
plurify($lxoffice_package_names{singlify($_[0])});

for my $thing ($string, $lookup) {

# best guess? its already the name. like part. camelize it first
my $class = "SL::DB::" . camelify($thing);
return $class if defined *{ $class. '::' };

# next, someone wants a manager and pluralized.
my $manager = "SL::DB::Manager::" . singlify(camelify($thing));
return $manager if defined *{ $manager . '::' };
}

die "Can't resolve '$string' as a database model, sorry. Did you perhaps forgot to load it?";
}

sub camelify {
my ($str) = @_;
$str =~ s/_+(.)/uc($1)/ge;
ucfirst $str;
}

sub snakify {
my ($str) = @_;
$str =~ s/(?<!^)\u(.)/'_' . lc($1)/ge;
lcfirst $str;
}

sub plurify {
my ($str) = @_;
$str . 's';
}

sub singlify {
my ($str) = @_;
local $/ = 's';
chomp $str;
$str;
}

82515b2d Sven Schöling
1;

__END__

=head1 NAME

SL::DB::Helpers::Mappings - Rose Table <-> Model mapping information

=head1 SYNOPSIS

use SL::DB::Helpers::Mappings qw(@blacklist %table2model);

=head1 DESCRIPTION

This modul stores table <-> model mappings used by the
L<scripts/rose_auto_create_model.pl> script. If you add a new table that has
custom mappings, add it here.

3cc8ad87 Sven Schöling
=head2 db

A special function provided here is E<db>. Without it you'd have to write:

my $part = SL::DB::Part->new(id => 1234);
my @all_parts = SL::DB::Manager::Part->get_all;

with them it becomes:

my $part = db('part')->new(id => 123);
my @all_parts = db('parts')->get_all;

You don't have to care about add that SL::DB:: incantation anymore. Also, a
simple s at the end will get you the associated Manager class.

db is written to try to make sense of what you give it, but if all fails, it
will die with an error.

82515b2d Sven Schöling
=head1 BUGS

nothing yet

=head1 SEE ALSO

L<scripts/rose_auto_create_model.pl>

=head1 AUTHOR

Sven Sch?ling <s.schoeling@linet-services.de>

=cut