summaryrefslogtreecommitdiff
path: root/httemplate/edit/part_pkg.cgi
diff options
context:
space:
mode:
authorivan <ivan>2009-01-25 23:58:25 +0000
committerivan <ivan>2009-01-25 23:58:25 +0000
commitdae1d4ab33e5aee1ca8fcba89c8cf4ce4cbd1810 (patch)
tree7458d47a090fda50c0743363a15341a0890e9416 /httemplate/edit/part_pkg.cgi
parent8433fdfe8afdd155ff5e8725ccf98612d4c36cad (diff)
fix one-time charges and package customization for employees who don't have 'Edit global package definition' ACL, RT#4668
Diffstat (limited to 'httemplate/edit/part_pkg.cgi')
-rwxr-xr-xhttemplate/edit/part_pkg.cgi128
1 files changed, 72 insertions, 56 deletions
diff --git a/httemplate/edit/part_pkg.cgi b/httemplate/edit/part_pkg.cgi
index 6de0b3211..4b519f5fa 100755
--- a/httemplate/edit/part_pkg.cgi
+++ b/httemplate/edit/part_pkg.cgi
@@ -7,6 +7,9 @@
'html_init' => include('/elements/init_overlib.html').
$freq_changed,
'html_bottom' => $html_bottom,
+
+ 'begin_callback' => $begin_callback,
+ 'end_callback' => $end_callback,
'new_hashref_callback' => $new_hashref_callback,
'new_object_callback' => $new_object_callback,
'new_callback' => $new_callback,
@@ -55,7 +58,7 @@
},
{field=>'comment', type=>'text', size=>40 }, #32
{field=>'classnum', type=>'select-pkg_class' },
- {field=>'disabled', type=>'checkbox', value=>'Y'},
+ {field=>'disabled', type=>$disabled_type, value=>'Y'},
{ type => 'tablebreak-tr-title',
value => 'Pricing', #better name?
@@ -172,10 +175,19 @@
my $curuser = $FS::CurrentUser::CurrentUser;
-die "access denied"
- unless $curuser->access_right('Edit package definitions')
- || $curuser->access_right('Edit global package definitions')
- || ( $cgi->param('pkgnum') && $curuser->access_right('Customize customer package') );
+my $edit_right = $curuser->access_right('Edit package definitions')
+ || $curuser->access_right('Edit global package definitions');
+
+my $begin_callback = sub {
+ my( $cgi, $fields, $opt ) = @_;
+ die "access denied"
+ unless $edit_right
+ || ( $cgi->param('pkgnum')
+ && $curuser->access_right('Customize customer package')
+ );
+};
+
+my $disabled_type = $edit_right ? 'checkbox' : 'hidden';
my $conf = new FS::Conf;
my $taxproducts = $conf->exists('enable_taxproducts');
@@ -197,38 +209,25 @@ my %tax_override = ();
my %taxproductnums = map { ($_->classnum => 1) }
qsearch('usage_class', { 'disabled' => '' });
-if ( $cgi->param('error') ) { # oh well
- foreach ($cgi->param) {
- /^usage_taxproductnum_(\d+)$/ && ($taxproductnums{$1} = 1);
- }
-} elsif ( my $pkgpart = $cgi->keywords || $cgi->param('pkgpart') ) {
- $pkgpart =~ /^(\d+)$/ or die "illegal pkgpart";
- my $part_pkg = qsearchs( 'part_pkg', { pkgpart => $pkgpart } );
- die "no part_pkg for pkgpart $pkgpart" unless $pkgpart;
- foreach ($part_pkg->options) {
- /^usage_taxproductnum_(\d+)$/ && ($taxproductnums{$1} = 1);
- }
- foreach ($part_pkg->part_pkg_taxoverride) {
- $taxproductnums{$_->usage_class} = 1
- if $_->usage_class;
- }
-} else {
- # do nothing
-}
-my @taxproductnums = ( qw( setup recur ), sort (keys %taxproductnums) );
-
my %options = ();
my $recur_disabled = 1;
+
my $error_callback = sub {
my($cgi, $object, $fields, $opt ) = @_;
+
(@agent_type) = $cgi->param('agent_type');
- $tax_override{''} = $cgi->param('tax_override');
- $tax_override{$_} = $cgi->param('tax_override_$_')
- foreach(grep { /^tax_override_(\w+)$/ } $cgi->param);
+
$opt->{action} = 'Custom' if $cgi->param('clone');
$recur_disabled = $cgi->param('freq') ? 0 : 1;
+ foreach ($cgi->param) {
+ /^usage_taxproductnum_(\d+)$/ && ($taxproductnums{$1} = 1);
+ }
+ $tax_override{''} = $cgi->param('tax_override');
+ $tax_override{$_} = $cgi->param('tax_override_$_')
+ foreach(grep { /^tax_override_(\w+)$/ } $cgi->param);
+
#some false laziness w/process
$cgi->param('plan') =~ /^(\w+)$/ or die 'unparsable plan';
my $plan = $1;
@@ -267,19 +266,14 @@ my $edit_callback = sub {
$recur_disabled = $object->freq ? 0 : 1;
(@agent_type) = map {$_->typenum} qsearch('type_pkgs',{'pkgpart'=>$1});
- $tax_override{$_} =
- join (",", map {$_->taxclassnum}
- qsearch( 'part_pkg_taxoverride', { 'pkgpart' => $object->pkgpart,
- 'usage_class' => $_,
- }
- )
- )
- foreach ( '', @taxproductnums );
-
-# join (",", map {$_->taxclassnum}
-# $part_pkg->part_pkg_taxrate( 'cch', $conf->config('defaultloc')
-# );
-# unless $tax_override;
+
+ foreach ($object->options) {
+ /^usage_taxproductnum_(\d+)$/ && ($taxproductnums{$1} = 1);
+ }
+ foreach ($object->part_pkg_taxoverride) {
+ $taxproductnums{$_->usage_class} = 1
+ if $_->usage_class;
+ }
%options = $object->options;
@@ -512,21 +506,43 @@ my %usage_class = map { ($_->classnum => $_->classname) }
$usage_class{setup} = 'Setup';
$usage_class{recur} = 'Recurring';
-my %taxproduct_fields = map { $_ => [ "taxproductnum_$_",
- { type => 'select-taxproduct',
- #label => "$usage_class{$_} tax product",
- },
- "tax_override_$_",
- { type => 'select-taxoverride' }
- ]
- }
- @taxproductnums;
-$taxproduct_fields{'(default)'} =
- [ 'taxproductnum', { type => 'select-taxproduct',
- #label => 'Default tax product',
- },
- 'tax_override', { type => 'select-taxoverride' },
- ];
+my @taxproductnums = ();
+my %taxproduct_fields = ();
+my $end_callback = sub {
+ my( $cgi, $object, $fields, $opt ) = @_;
+
+ @taxproductnums = ( qw( setup recur ), sort (keys %taxproductnums) );
+
+ if ( $object->pkgpart ) {
+ foreach my $usage_class ( '', @taxproductnums ) {
+ $tax_override{$usage_class} =
+ join (",", map $_->taxclassnum,
+ qsearch( 'part_pkg_taxoverride', {
+ 'pkgpart' => $object->pkgpart,
+ 'usage_class' => $usage_class,
+ })
+ );
+ }
+ }
+
+ %taxproduct_fields =
+ map { $_ => [ "taxproductnum_$_",
+ { type => 'select-taxproduct',
+ #label => "$usage_class{$_} tax product",
+ },
+ "tax_override_$_",
+ { type => 'select-taxoverride' }
+ ]
+ }
+ @taxproductnums;
+
+ $taxproduct_fields{'(default)'} =
+ [ 'taxproductnum', { type => 'select-taxproduct',
+ #label => 'Default tax product',
+ },
+ 'tax_override', { type => 'select-taxoverride' },
+ ];
+};
my $taxproduct_values = sub {
my ($cgi, $object, $flags) = @_;