Rückstände aus Umbenennung von SL/DB/Helpers nach SL/DB/Helper gefixt
[kivitendo-erp.git] / SL / DB / Helper / Mappings.pm
1 package SL::DB::Helper::Mappings;
2
3 use utf8;
4 use strict;
5
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(
9   leads
10 );
11
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(
15 );
16
17 my @lxoffice_blacklist = (@lxoffice_blacklist_permanent, @lxoffice_blacklist_temp);
18
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',
25   ar                             => 'invoice',
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',
37   datev                          => 'datev',
38   defaults                       => 'default',
39   delivery_orders                => 'delivery_order',
40   delivery_order_items           => 'delivery_order_item',
41   department                     => 'department',
42   dpt_trans                      => 'dpt_trans',
43   drafts                         => 'draft',
44   dunning                        => 'dunning',
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',
53   gifi                           => 'gifi',
54   gl                             => 'GLTransaction',
55   history_erp                    => 'history',
56   inventory                      => 'inventory',
57   invoice                        => 'invoice_item',
58   language                       => 'language',
59   license                        => 'license',
60   licenseinvoice                 => 'license_invoice',
61   makemodel                      => 'make_model',
62   notes                          => 'note',
63   orderitems                     => 'order_item',
64   oe                             => 'order',
65   parts                          => 'part',
66   partsgroup                     => 'parts_group',
67   partstax                       => 'parts_tax',
68   payment_terms                  => 'payment_term',
69   prices                         => 'prices',
70   price_factors                  => 'price_factor',
71   pricegroup                     => 'pricegroup',
72   printers                       => 'Printer',
73   record_links                   => 'record_link',
74   rma                            => 'RMA',
75   rmaitems                       => 'RMA_item',
76   sepa_export                    => 'sepa_export',
77   sepa_export_items              => 'sepa_export_item',
78   schema_info                    => 'schema_info',
79   status                         => 'status',
80   tax                            => 'tax',
81   taxkeys                        => 'tax_key',
82   tax_zones                      => 'tax_zone',
83   todo_user_config               => 'todo_user_config',
84   translation                    => 'translation',
85   translation_payment_terms      => 'translation_payment_term',
86   units                          => 'unit',
87   units_language                 => 'units_language',
88   vendortax                      => 'vendor_tax',
89 );
90
91 sub get_blacklist {
92   return LXOFFICE => \@lxoffice_blacklist;
93 }
94
95 sub get_package_names {
96   return LXOFFICE => \%lxoffice_package_names;
97 }
98
99 sub db {
100   my $string = $_[0];
101   my $lookup = $lxoffice_package_names{$_[0]} ||
102       plurify($lxoffice_package_names{singlify($_[0])});
103
104   for my $thing ($string, $lookup) {
105
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. '::' };
109
110     # next, someone wants a manager and pluralized.
111     my $manager = "SL::DB::Manager::" . singlify(camelify($thing));
112     return $manager if defined *{ $manager . '::' };
113   }
114
115   die "Can't resolve '$string' as a database model, sorry. Did you perhaps forgot to load it?";
116 }
117
118 sub camelify {
119   my ($str) = @_;
120   $str =~ s/_+(.)/uc($1)/ge;
121   ucfirst $str;
122 }
123
124 sub snakify {
125   my ($str) = @_;
126   $str =~ s/(?<!^)\u(.)/'_' . lc($1)/ge;
127   lcfirst $str;
128 }
129
130 sub plurify {
131   my ($str) = @_;
132   $str . 's';
133 }
134
135 sub singlify {
136   my ($str) = @_;
137   local $/ = 's';
138   chomp $str;
139   $str;
140 }
141
142 1;
143
144 __END__
145
146 =head1 NAME
147
148 SL::DB::Helper::Mappings - Rose Table <-> Model mapping information
149
150 =head1 SYNOPSIS
151
152   use SL::DB::Helper::Mappings qw(@blacklist %table2model);
153
154 =head1 DESCRIPTION
155
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.
159
160 =head2 db
161
162 A special function provided here is E<db>. Without it you'd have to write:
163
164   my $part = SL::DB::Part->new(id => 1234);
165   my @all_parts = SL::DB::Manager::Part->get_all;
166
167 with them it becomes:
168
169   my $part = db('part')->new(id => 123);
170   my @all_parts = db('parts')->get_all;
171
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.
174
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.
177
178 =head1 BUGS
179
180 nothing yet
181
182 =head1 SEE ALSO
183
184 L<scripts/rose_auto_create_model.pl>
185
186 =head1 AUTHOR
187
188 Sven Schöling <s.schoeling@linet-services.de>
189
190 =cut