commissions per agent and package class, RT#18232
[freeside.git] / httemplate / edit / process / agent.cgi
1 <% include( 'elements/process.html',
2               'table'            => 'agent',
3               'viewall_dir'      => 'browse',
4               'viewall_ext'      => 'cgi',
5               'process_m2m'      => { 'link_table'   => 'access_groupagent',
6                                       'target_table' => 'access_group',
7                                     },
8               'edit_ext'         => 'cgi',
9               'noerror_callback' => $process_agent_pkg_class,
10           )
11 %>
12 <%init>
13
14 die "access denied"
15   unless $FS::CurrentUser::CurrentUser->access_right('Configuration');
16
17 if ( FS::Conf->new->exists('disable_acl_changes') ) {
18   errorpage('ACL changes disabled in public demo.');
19   die "shouldn't be reached";
20 }
21
22 my $process_agent_pkg_class = sub {
23   my( $cgi, $agent ) = @_;
24
25   #surprising amount of false laziness w/ edit/agent.cgi
26   my @pkg_class = qsearch('pkg_class', { 'disabled'=>'' });
27   foreach my $pkg_class ( '', @pkg_class ) {
28     my %agent_pkg_class = ( 'agentnum' => $agent->agentnum,
29                             'classnum' => $pkg_class ? $pkg_class->classnum : ''
30                           );
31     my $agent_pkg_class =
32       qsearchs( 'agent_pkg_class', \%agent_pkg_class )
33       || new FS::agent_pkg_class   \%agent_pkg_class;
34
35     my $param = 'classnum'. $agent_pkg_class{classnum};
36
37     $agent_pkg_class->commission_percent( $cgi->param($param) );
38
39     my $method = $agent_pkg_class->agentpkgclassnum ? 'replace' : 'insert';
40
41     my $error = $agent_pkg_class->$method;
42     die $error if $error; #XXX push this down into agent.pm w/better/transactional error handling
43
44   }
45
46 };
47
48 </%init>