Add payment module for MerchantWare 4.0 gateway, from Merchant
[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 # $Id: accounting.coretag,v 1.5 2007-03-30 23:40:49 pajamian Exp $
9
10 UserTag accounting Order   function
11 UserTag accounting addAttr
12 UserTag accounting Version $Revision: 1.5 $
13 UserTag accounting Routine <<EOR
14 my %account_super = (qw/
15         noparts_update 1
16 /);
17 my %account_admin = (qw/
18         inventory_update 1
19 /);
20
21 sub {
22         my ($func, $opt) = @_;
23
24         use vars qw/$Tag/;
25         die "Accounting not enabled!"
26                 unless $Vend::Cfg->{Accounting};
27
28         my $enable;
29         if($account_super{$func}) {
30                 eval {
31                         $enable = $Vend::admin && $Tag->if_mm('super');
32                 };
33         }
34         elsif($account_admin{$func}) {
35                 $enable = $Vend::admin;
36         }
37         else {
38                 $enable = 1;
39         }
40
41         if(! $enable) {
42                 die errmsg("Function '%s' not enabled for current user level.", $func);
43         }
44
45         if(my $sys = $opt->{system}) {
46                 my $former = $Vend::Cfg->{Accounting};
47                 $Vend::Cfg->{Accounting} = $Vend::Cfg->{Accounting_repository}{$sys}
48                         or do {
49                                 logError(
50                                         "Failed to change accounting system to %s, returning to %s.",
51                                         $opt->{system},
52                                         $former->{Class},
53                                 );
54                                 $Vend::Cfg->{Accounting} = $former;
55                                 return undef;
56                         };
57         }
58
59         my $a = $Vend::Cfg->{Accounting} 
60                 or do {
61                         logError("No accounting system present. Aborting.");
62                         return undef;
63                 };
64         
65         my $class = $a->{Class};
66         my $self = new $class;
67         my $can;
68         unless( $can = $self->can($func) ) {
69                 logError(
70                         "No function '%s' in accounting system %s. Aborting.",
71                         $func,
72                         $class,
73                 );
74                 return undef;
75         }
76
77         return $can if $opt->{can_do_function};
78
79         return $self->$func($opt);
80 }
81 EOR