kivitendo/SL/DB/Helpers/Mappings.pm @ 2af9eae7
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
|