1 package SL::DB::Helpers::Mappings;
6 # these will not be managed as Rose::DB models, because they are not normalized,
7 # significant changes are needed to get them done, or they were done by CRM.
8 my @lxoffice_blacklist_permanent = qw(
12 # these are not managed _yet_, but will hopefully at some point.
13 # if you are confident that one of these works, remove it here.
14 my @lxoffice_blacklist_temp = qw(
17 my @lxoffice_blacklist = (@lxoffice_blacklist_permanent, @lxoffice_blacklist_temp);
19 # map table names to their models.
20 # unlike rails we have no singular<->plural magic.
21 # remeber: tables should be named as the plural of the model name.
22 my %lxoffice_package_names = (
23 acc_trans => 'acc_transaction',
24 audittrail => 'audit_trail',
26 ap => 'purchase_invoice',
27 background_jobs => 'background_job',
28 background_job_histories => 'background_job_history',
29 ap => 'purchase_invoice',
30 bank_accounts => 'bank_account',
31 buchungsgruppen => 'buchungsgruppe',
32 contacts => 'contact',
33 custom_variable_configs => 'custom_variable_config',
34 custom_variables => 'custom_variable',
35 custom_variables_validity => 'custom_variable_validity',
36 customertax => 'customer_tax',
38 defaults => 'default',
39 delivery_orders => 'delivery_order',
40 delivery_order_items => 'delivery_order_item',
41 department => 'department',
42 dpt_trans => 'dpt_trans',
45 dunning_config => 'dunning_config',
46 employee => 'employee',
47 exchangerate => 'exchangerate',
48 finanzamt => 'finanzamt',
49 follow_up_access => 'follow_up_access',
50 follow_up_links => 'follow_up_link',
51 follow_ups => 'follow_up',
52 generic_translations => 'generic_translation',
54 gl => 'GLTransaction',
55 history_erp => 'history',
56 inventory => 'inventory',
57 invoice => 'invoice_item',
58 language => 'language',
60 licenseinvoice => 'license_invoice',
61 makemodel => 'make_model',
63 orderitems => 'order_item',
66 partsgroup => 'parts_group',
67 partstax => 'parts_tax',
68 payment_terms => 'payment_term',
70 price_factors => 'price_factor',
71 pricegroup => 'pricegroup',
72 printers => 'Printer',
73 record_links => 'record_link',
75 rmaitems => 'RMA_item',
76 sepa_export => 'sepa_export',
77 sepa_export_items => 'sepa_export_item',
78 schema_info => 'schema_info',
82 tax_zones => 'tax_zone',
83 todo_user_config => 'todo_user_config',
84 translation => 'translation',
85 translation_payment_terms => 'translation_payment_term',
87 units_language => 'units_language',
88 vendortax => 'vendor_tax',
92 return LXOFFICE => \@lxoffice_blacklist;
95 sub get_package_names {
96 return LXOFFICE => \%lxoffice_package_names;
101 my $lookup = $lxoffice_package_names{$_[0]} ||
102 plurify($lxoffice_package_names{singlify($_[0])});
104 for my $thing ($string, $lookup) {
106 # best guess? its already the name. like part. camelize it first
107 my $class = "SL::DB::" . camelify($thing);
108 return $class if defined *{ $class. '::' };
110 # next, someone wants a manager and pluralized.
111 my $manager = "SL::DB::Manager::" . singlify(camelify($thing));
112 return $manager if defined *{ $manager . '::' };
115 die "Can't resolve '$string' as a database model, sorry. Did you perhaps forgot to load it?";
120 $str =~ s/_+(.)/uc($1)/ge;
126 $str =~ s/(?<!^)\u(.)/'_' . lc($1)/ge;
148 SL::DB::Helpers::Mappings - Rose Table <-> Model mapping information
152 use SL::DB::Helpers::Mappings qw(@blacklist %table2model);
156 This modul stores table <-> model mappings used by the
157 L<scripts/rose_auto_create_model.pl> script. If you add a new table that has
158 custom mappings, add it here.
162 A special function provided here is E<db>. Without it you'd have to write:
164 my $part = SL::DB::Part->new(id => 1234);
165 my @all_parts = SL::DB::Manager::Part->get_all;
167 with them it becomes:
169 my $part = db('part')->new(id => 123);
170 my @all_parts = db('parts')->get_all;
172 You don't have to care about add that SL::DB:: incantation anymore. Also, a
173 simple s at the end will get you the associated Manager class.
175 db is written to try to make sense of what you give it, but if all fails, it
176 will die with an error.
184 L<scripts/rose_auto_create_model.pl>
188 Sven Schöling <s.schoeling@linet-services.de>