Also look in the next-highest directory when detecting VCS; add SVN
[interchange.git] / code / SystemTag / accounting.coretag
1 # Copyright 2002-2007 Interchange Development Group and others
2
3 # This program is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 2 of the License, or
6 # (at your option) any later version.  See the LICENSE file for details.
7
8 UserTag accounting Order   function
9 UserTag accounting addAttr
10 UserTag accounting Version 1.5
11 UserTag accounting Routine <<EOR
12 my %account_super = (qw/
13         noparts_update 1
14 /);
15 my %account_admin = (qw/
16         inventory_update 1
17 /);
18
19 sub {
20         my ($func, $opt) = @_;
21
22         use vars qw/$Tag/;
23         die "Accounting not enabled!"
24                 unless $Vend::Cfg->{Accounting};
25
26         my $enable;
27         if($account_super{$func}) {
28                 eval {
29                         $enable = $Vend::admin && $Tag->if_mm('super');
30                 };
31         }
32         elsif($account_admin{$func}) {
33                 $enable = $Vend::admin;
34         }
35         else {
36                 $enable = 1;
37         }
38
39         if(! $enable) {
40                 die errmsg("Function '%s' not enabled for current user level.", $func);
41         }
42
43         if(my $sys = $opt->{system}) {
44                 my $former = $Vend::Cfg->{Accounting};
45                 $Vend::Cfg->{Accounting} = $Vend::Cfg->{Accounting_repository}{$sys}
46                         or do {
47                                 logError(
48                                         "Failed to change accounting system to %s, returning to %s.",
49                                         $opt->{system},
50                                         $former->{Class},
51                                 );
52                                 $Vend::Cfg->{Accounting} = $former;
53                                 return undef;
54                         };
55         }
56
57         my $a = $Vend::Cfg->{Accounting} 
58                 or do {
59                         logError("No accounting system present. Aborting.");
60                         return undef;
61                 };
62         
63         my $class = $a->{Class};
64         my $self = new $class;
65         my $can;
66         unless( $can = $self->can($func) ) {
67                 logError(
68                         "No function '%s' in accounting system %s. Aborting.",
69                         $func,
70                         $class,
71                 );
72                 return undef;
73         }
74
75         return $can if $opt->{can_do_function};
76
77         return $self->$func($opt);
78 }
79 EOR