1 package SL::DB::Helper::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',
69 periodic_invoices => 'periodic_invoice',
70 periodic_invoices_configs => 'periodic_invoices_config',
72 price_factors => 'price_factor',
73 pricegroup => 'pricegroup',
74 printers => 'Printer',
75 record_links => 'record_link',
77 rmaitems => 'RMA_item',
78 sepa_export => 'sepa_export',
79 sepa_export_items => 'sepa_export_item',
80 schema_info => 'schema_info',
84 tax_zones => 'tax_zone',
85 todo_user_config => 'todo_user_config',
86 translation => 'translation',
87 translation_payment_terms => 'translation_payment_term',
89 units_language => 'units_language',
90 vendortax => 'vendor_tax',
94 return LXOFFICE => \@lxoffice_blacklist;
97 sub get_package_names {
98 return LXOFFICE => \%lxoffice_package_names;
103 my $lookup = $lxoffice_package_names{$_[0]} ||
104 plurify($lxoffice_package_names{singlify($_[0])});
106 for my $thing ($string, $lookup) {
108 # best guess? its already the name. like part. camelize it first
109 my $class = "SL::DB::" . camelify($thing);
110 return $class if defined *{ $class. '::' };
112 # next, someone wants a manager and pluralized.
113 my $manager = "SL::DB::Manager::" . singlify(camelify($thing));
114 return $manager if defined *{ $manager . '::' };
117 die "Can't resolve '$string' as a database model, sorry. Did you perhaps forgot to load it?";
122 $str =~ s/_+(.)/uc($1)/ge;
128 $str =~ s/(?<!^)\u(.)/'_' . lc($1)/ge;
150 SL::DB::Helper::Mappings - Rose Table <-> Model mapping information
154 use SL::DB::Helper::Mappings qw(@blacklist %table2model);
158 This modul stores table <-> model mappings used by the
159 L<scripts/rose_auto_create_model.pl> script. If you add a new table that has
160 custom mappings, add it here.
164 A special function provided here is E<db>. Without it you'd have to write:
166 my $part = SL::DB::Part->new(id => 1234);
167 my @all_parts = SL::DB::Manager::Part->get_all;
169 with them it becomes:
171 my $part = db('part')->new(id => 123);
172 my @all_parts = db('parts')->get_all;
174 You don't have to care about add that SL::DB:: incantation anymore. Also, a
175 simple s at the end will get you the associated Manager class.
177 db is written to try to make sense of what you give it, but if all fails, it
178 will die with an error.
186 L<scripts/rose_auto_create_model.pl>
190 Sven Schöling <s.schoeling@linet-services.de>