diff options
Diffstat (limited to 'httemplate/edit/process')
23 files changed, 978 insertions, 0 deletions
diff --git a/httemplate/edit/process/REAL_cust_pkg.cgi b/httemplate/edit/process/REAL_cust_pkg.cgi new file mode 100755 index 000000000..6bed85c19 --- /dev/null +++ b/httemplate/edit/process/REAL_cust_pkg.cgi @@ -0,0 +1,19 @@ +<% + +my $pkgnum = $cgi->param('pkgnum') or die; +my $old = qsearchs('cust_pkg',{'pkgnum'=>$pkgnum}); +my %hash = $old->hash; +$hash{'setup'} = $cgi->param('setup') ? str2time($cgi->param('setup')) : ''; +$hash{'bill'} = $cgi->param('bill') ? str2time($cgi->param('bill')) : ''; +my $new = new FS::cust_pkg \%hash; + +my $error = $new->replace($old); + +if ( $error ) { +  $cgi->param('error', $error); +  print $cgi->redirect(popurl(2). "REAL_cust_pkg.cgi?". $cgi->query_string ); +} else {  +  print $cgi->redirect(popurl(3). "view/cust_pkg.cgi?". $pkgnum); +} + +%> diff --git a/httemplate/edit/process/agent.cgi b/httemplate/edit/process/agent.cgi new file mode 100755 index 000000000..182eeab41 --- /dev/null +++ b/httemplate/edit/process/agent.cgi @@ -0,0 +1,28 @@ +<% + +my $agentnum = $cgi->param('agentnum'); + +my $old = qsearchs('agent',{'agentnum'=>$agentnum}) if $agentnum; + +my $new = new FS::agent ( { +  map { +    $_, scalar($cgi->param($_)); +  } fields('agent') +} ); + +my $error; +if ( $agentnum ) { +  $error=$new->replace($old); +} else { +  $error=$new->insert; +  $agentnum=$new->getfield('agentnum'); +} + +if ( $error ) { +  $cgi->param('error', $error); +  print $cgi->redirect(popurl(2). "agent.cgi?". $cgi->query_string ); +} else {  +  print $cgi->redirect(popurl(3). "browse/agent.cgi"); +} + +%> diff --git a/httemplate/edit/process/agent_type.cgi b/httemplate/edit/process/agent_type.cgi new file mode 100755 index 000000000..67aacfdd5 --- /dev/null +++ b/httemplate/edit/process/agent_type.cgi @@ -0,0 +1,54 @@ +<% + +my $typenum = $cgi->param('typenum'); +my $old = qsearchs('agent_type',{'typenum'=>$typenum}) if $typenum; + +my $new = new FS::agent_type ( { +  map { +    $_, scalar($cgi->param($_)); +  } fields('agent_type') +} ); + +my $error; +if ( $typenum ) { +  $error=$new->replace($old); +} else { +  $error=$new->insert; +  $typenum=$new->getfield('typenum'); +} + +if ( $error ) { +  $cgi->param('error', $error); +  print $cgi->redirect(popurl(2). "agent_type.cgi?". $cgi->query_string ); +} else { + +  foreach my $part_pkg (qsearch('part_pkg',{})) { +    my($pkgpart)=$part_pkg->getfield('pkgpart'); + +    my($type_pkgs)=qsearchs('type_pkgs',{ +        'typenum' => $typenum, +        'pkgpart' => $pkgpart, +    }); +    if ( $type_pkgs && ! $cgi->param("pkgpart$pkgpart") ) { +      my($d_type_pkgs)=$type_pkgs; #need to save $type_pkgs for below. +      $error=$d_type_pkgs->delete; +      die $error if $error; + +    } elsif ( $cgi->param("pkgpart$pkgpart") +              && ! $type_pkgs +    ) { +      #ok to clobber it now (but bad form nonetheless?) +      $type_pkgs=new FS::type_pkgs ({ +        'typenum' => $typenum, +        'pkgpart' => $pkgpart, +      }); +      $error= $type_pkgs->insert; +      die $error if $error; +    } + +  } + +  print $cgi->redirect(popurl(3). "browse/agent_type.cgi"); +} + +%> diff --git a/httemplate/edit/process/cust_bill_pay.cgi b/httemplate/edit/process/cust_bill_pay.cgi new file mode 100755 index 000000000..0c33506a8 --- /dev/null +++ b/httemplate/edit/process/cust_bill_pay.cgi @@ -0,0 +1,31 @@ +<% + +$cgi->param('paynum') =~ /^(\d*)$/ or die "Illegal paynum!"; +my $paynum = $1; + +my $cust_pay = qsearchs('cust_pay', { 'paynum' => $paynum } ) +  or die "No such paynum"; + +my $cust_main = qsearchs('cust_main', { 'custnum' => $cust_pay->custnum } ) +  or die "Bogus credit:  not attached to customer"; + +my $custnum = $cust_main->custnum; + +my $new = new FS::cust_bill_pay ( { +  map { +    $_, scalar($cgi->param($_)); +  #} qw(custnum _date amount invnum) +  } fields('cust_bill_pay') +} ); + +my $error = $new->insert; + +if ( $error ) { +  $cgi->param('error', $error); +  print $cgi->redirect(popurl(2). "cust_bill_pay.cgi?". $cgi->query_string ); +} else { +  print $cgi->redirect(popurl(3). "view/cust_main.cgi?$custnum"); +} + + +%> diff --git a/httemplate/edit/process/cust_credit.cgi b/httemplate/edit/process/cust_credit.cgi new file mode 100755 index 000000000..ac92631f8 --- /dev/null +++ b/httemplate/edit/process/cust_credit.cgi @@ -0,0 +1,30 @@ +<% + +$cgi->param('custnum') =~ /^(\d*)$/ or die "Illegal custnum!"; +my $custnum = $1; + +$cgi->param('otaker',getotaker); + +my $new = new FS::cust_credit ( { +  map { +    $_, scalar($cgi->param($_)); +  #} qw(custnum _date amount otaker reason) +  } fields('cust_credit') +} ); + +my $error = $new->insert; + +if ( $error ) { +  $cgi->param('error', $error); +  print $cgi->redirect(popurl(2). "cust_credit.cgi?". $cgi->query_string ); +} else { +  if ( $cgi->param('apply') eq 'yes' ) { +    my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum }) +      or die "unknown custnum $custnum"; +    $cust_main->apply_credits; +  } +  print $cgi->redirect(popurl(3). "view/cust_main.cgi?$custnum"); +} + + +%> diff --git a/httemplate/edit/process/cust_credit_bill.cgi b/httemplate/edit/process/cust_credit_bill.cgi new file mode 100755 index 000000000..4879b0eab --- /dev/null +++ b/httemplate/edit/process/cust_credit_bill.cgi @@ -0,0 +1,43 @@ +<% + +$cgi->param('crednum') =~ /^(\d*)$/ or die "Illegal crednum!"; +my $crednum = $1; + +my $cust_credit = qsearchs('cust_credit', { 'crednum' => $crednum } ) +  or die "No such crednum"; + +my $cust_main = qsearchs('cust_main', { 'custnum' => $cust_credit->custnum } ) +  or die "Bogus credit:  not attached to customer"; + +my $custnum = $cust_main->custnum; + +my $new; +if ($cgi->param('invnum') =~ /^Refund$/) { +  $new = new FS::cust_refund ( { +    'reason'  => $cust_credit->reason, +    'refund'  => $cgi->param('amount'), +    'payby'   => 'BILL', +    '_date'   => $cgi->param('_date'), +    'payinfo' => 'Cash', +    'crednum' => $crednum, +  } ); +} else { +  $new = new FS::cust_credit_bill ( { +    map { +      $_, scalar($cgi->param($_)); +    #} qw(custnum _date amount invnum) +    } fields('cust_credit_bill') +  } ); +} + +my $error = $new->insert; + +if ( $error ) { +  $cgi->param('error', $error); +  print $cgi->redirect(popurl(2). "cust_credit_bill.cgi?". $cgi->query_string ); +} else { +  print $cgi->redirect(popurl(3). "view/cust_main.cgi?$custnum"); +} + + +%> diff --git a/httemplate/edit/process/cust_main.cgi b/httemplate/edit/process/cust_main.cgi new file mode 100755 index 000000000..c8038ecf6 --- /dev/null +++ b/httemplate/edit/process/cust_main.cgi @@ -0,0 +1,132 @@ +<% + +my $error = ''; + +#unmunge stuff + +$cgi->param('tax','') unless defined $cgi->param('tax'); + +$cgi->param('refnum', (split(/:/, ($cgi->param('refnum'))[0] ))[0] ); + +$cgi->param('state') =~ /^(\w*)( \(([\w ]+)\))? ?\/ ?(\w+)$/ +  or die "Oops, illegal \"state\" param: ". $cgi->param('state'); +$cgi->param('state', $1); +$cgi->param('county', $3 || ''); +$cgi->param('country', $4); + +$cgi->param('ship_state') =~ /^(\w*)( \(([\w ]+)\))? ?\/ ?(\w+)$/ +  or $cgi->param('ship_state') =~ /^(((())))$/ +  or die "Oops, illegal \"ship_state\" param: ". $cgi->param('ship_state'); +$cgi->param('ship_state', $1); +$cgi->param('ship_county', $3 || ''); +$cgi->param('ship_country', $4); + +my $payby = $cgi->param('payby'); +if ( $payby ) { +  $cgi->param('payinfo', $cgi->param( $payby. '_payinfo' ) ); +  $cgi->param('paydate', +  $cgi->param( $payby. '_month' ). '-'. $cgi->param( $payby. '_year' ) ); +  $cgi->param('payname', $cgi->param( $payby. '_payname' ) ); +} + +$cgi->param('otaker', &getotaker ); + +my @invoicing_list = split( /\s*\,\s*/, $cgi->param('invoicing_list') ); +push @invoicing_list, 'POST' if $cgi->param('invoicing_list_POST'); + +#create new record object + +my $new = new FS::cust_main ( { +  map { +    $_, scalar($cgi->param($_)) +#  } qw(custnum agentnum last first ss company address1 address2 city county +#       state zip daytime night fax payby payinfo paydate payname tax +#       otaker refnum) +  } fields('cust_main') +} ); + +if ( defined($cgi->param('same')) && $cgi->param('same') eq "Y" ) { +  $new->setfield("ship_$_", '') foreach qw( +    last first company address1 address2 city county state zip +    country daytime night fax +  ); +} + +#perhaps this stuff should go to cust_main.pm +my $cust_pkg = ''; +my $svc_acct = ''; +if ( $new->custnum eq '' ) { + +  if ( $cgi->param('pkgpart_svcpart') ) { +    my $x = $cgi->param('pkgpart_svcpart'); +    $x =~ /^(\d+)_(\d+)$/; +    my($pkgpart, $svcpart) = ($1, $2); +    #false laziness: copied from FS::cust_pkg::order (which should become a +    #FS::cust_main method) +    my(%part_pkg); +    # generate %part_pkg +    # $part_pkg{$pkgpart} is true iff $custnum may purchase $pkgpart +    my $agent = qsearchs('agent',{'agentnum'=> $new->agentnum }); +    	#my($type_pkgs); +    	#foreach $type_pkgs ( qsearch('type_pkgs',{'typenum'=> $agent->typenum }) ) { +    	#  my($pkgpart)=$type_pkgs->pkgpart; +    	#  $part_pkg{$pkgpart}++; +    	#} +    # $pkgpart_href->{PKGPART} is true iff $custnum may purchase $pkgpart +    my $pkgpart_href = $agent->pkgpart_hashref; +    #eslaf + +    # this should wind up in FS::cust_pkg! +    $error ||= "Agent ". $new->agentnum. " (type ". $agent->typenum. ") can't". +               "purchase pkgpart ". $pkgpart +      #unless $part_pkg{ $pkgpart }; +      unless $pkgpart_href->{ $pkgpart }; + +    $cust_pkg = new FS::cust_pkg ( { +      #later         'custnum' => $custnum, +      'pkgpart' => $pkgpart, +    } ); +    $error ||= $cust_pkg->check; + +    #$cust_svc = new FS::cust_svc ( { 'svcpart' => $svcpart } ); + +    #$error ||= $cust_svc->check; + +    $svc_acct = new FS::svc_acct ( { +                                     'svcpart'   => $svcpart, +                                     'username'  => $cgi->param('username'), +                                     '_password' => $cgi->param('_password'), +                                     'popnum'    => $cgi->param('popnum'), +                                   } ); + +    my $y = $svc_acct->setdefault; # arguably should be in new method +    $error ||= $y unless ref($y); +    #and just in case you were silly +    $svc_acct->svcpart($svcpart); +    $svc_acct->username($cgi->param('username')); +    $svc_acct->_password($cgi->param('_password')); +    $svc_acct->popnum($cgi->param('popnum')); + +    $error ||= $svc_acct->check; + +  } elsif ( $cgi->param('username') ) { #good thing to catch +    $error = "Can't assign username without a package!"; +  } + +  use Tie::RefHash; +  tie my %hash, 'Tie::RefHash'; +  %hash = ( $cust_pkg => [ $svc_acct ] ) if $cust_pkg; +  $error ||= $new->insert( \%hash, \@invoicing_list ); +} else { #create old record object +  my $old = qsearchs( 'cust_main', { 'custnum' => $new->custnum } );  +  $error ||= "Old record not found!" unless $old; +  $error ||= $new->replace($old, \@invoicing_list); +} + +if ( $error ) { +  $cgi->param('error', $error); +  print $cgi->redirect(popurl(2). "cust_main.cgi?". $cgi->query_string ); +} else {  +  print $cgi->redirect(popurl(3). "view/cust_main.cgi?". $new->custnum); +}  +%> diff --git a/httemplate/edit/process/cust_main_county-collapse.cgi b/httemplate/edit/process/cust_main_county-collapse.cgi new file mode 100755 index 000000000..8e67140a8 --- /dev/null +++ b/httemplate/edit/process/cust_main_county-collapse.cgi @@ -0,0 +1,35 @@ +<% + +my($query) = $cgi->keywords; +$query =~ /^(\d+)$/ or die "Illegal taxnum!"; +my $taxnum = $1; +my $cust_main_county = qsearchs('cust_main_county',{'taxnum'=>$taxnum}) +  or die ("Unknown taxnum!"); + +#really should do this in a .pm & start transaction + +foreach my $delete ( qsearch('cust_main_county', { +                    'country' => $cust_main_county->country, +                    'state' => $cust_main_county->state   +                 } ) ) { +#  unless ( qsearch('cust_main',{ +#    'state'  => $cust_main_county->getfield('state'), +#    'county' => $cust_main_county->getfield('county'), +#    'country' =>  $cust_main_county->getfield('country'), +#  } ) ) { +    my $error = $delete->delete; +    die $error if $error; +#  } else { +    #should really fix the $cust_main record +#  } + +} + +$cust_main_county->taxnum(''); +$cust_main_county->county(''); +my $error = $cust_main_county->insert; +die $error if $error; + +print $cgi->redirect(popurl(3). "browse/cust_main_county.cgi"); + +%> diff --git a/httemplate/edit/process/cust_main_county-expand.cgi b/httemplate/edit/process/cust_main_county-expand.cgi new file mode 100755 index 000000000..64061deed --- /dev/null +++ b/httemplate/edit/process/cust_main_county-expand.cgi @@ -0,0 +1,56 @@ +<% + +$cgi->param('taxnum') =~ /^(\d+)$/ or die "Illegal taxnum!"; +my $taxnum = $1; +my $cust_main_county = qsearchs('cust_main_county',{'taxnum'=>$taxnum}) +  or die ("Unknown taxnum!"); + +my @expansion; +if ( $cgi->param('delim') eq 'n' ) { +  @expansion=split(/\n/,$cgi->param('expansion')); +} elsif ( $cgi->param('delim') eq 's' ) { +  @expansion=split(' ',$cgi->param('expansion')); +} else { +  die "Illegal delim!"; +} + +@expansion=map { +  unless ( /^\s*([\w\- ]+)\s*$/ ) { +    $cgi->param('error', "Illegal item in expansion"); +    print $cgi->redirect(popurl(2). "cust_main_county-expand.cgi?". $cgi->query_string ); +    myexit(); +  } +  $1; +} @expansion; + +foreach ( @expansion) { +  my(%hash)=$cust_main_county->hash; +  my($new)=new FS::cust_main_county \%hash; +  $new->setfield('taxnum',''); +  if ( ! $cust_main_county->state ) { +    $new->setfield('state',$_); +  } else { +    $new->setfield('county',$_); +  } +  #if (datasrc =~ m/Pg/) +  #{ +  #    $new->setfield('tax',0.0); +  #} +  my($error)=$new->insert; +  die $error if $error; +} + +unless ( qsearch( 'cust_main', { +                                 'state'  => $cust_main_county->state, +                                 'county' => $cust_main_county->county, +                                 'country' =>  $cust_main_county->country, +                               } ) +         || ! @expansion +) { +  my($error)=($cust_main_county->delete); +  die $error if $error; +} + +print $cgi->redirect(popurl(3). "browse/cust_main_county.cgi"); + +%> diff --git a/httemplate/edit/process/cust_main_county.cgi b/httemplate/edit/process/cust_main_county.cgi new file mode 100755 index 000000000..0800789b5 --- /dev/null +++ b/httemplate/edit/process/cust_main_county.cgi @@ -0,0 +1,22 @@ +<% + +foreach ( $cgi->param ) { +  /^tax(\d+)$/ or die "Illegal form $_!"; +  my($taxnum)=$1; +  my($old)=qsearchs('cust_main_county',{'taxnum'=>$taxnum}) +    or die "Couldn't find taxnum $taxnum!"; +  next unless $old->getfield('tax') ne $cgi->param("tax$taxnum"); +  my(%hash)=$old->hash; +  $hash{tax}=$cgi->param("tax$taxnum"); +  my($new)=new FS::cust_main_county \%hash; +  my($error)=$new->replace($old); +  if ( $error ) { +    $cgi->param('error', $error); +    print $cgi->redirect(popurl(2). "cust_main_county.cgi?". $cgi->query_string ); +    myexit(); +  } +} + +print $cgi->redirect(popurl(3). "browse/cust_main_county.cgi"); + +%> diff --git a/httemplate/edit/process/cust_pay.cgi b/httemplate/edit/process/cust_pay.cgi new file mode 100755 index 000000000..82442ae00 --- /dev/null +++ b/httemplate/edit/process/cust_pay.cgi @@ -0,0 +1,39 @@ +<% + +$cgi->param('linknum') =~ /^(\d+)$/ +  or die "Illegal linknum: ". $cgi->param('linknum'); +my $linknum = $1; + +$cgi->param('link') =~ /^(custnum|invnum)$/ +  or die "Illegal link: ". $cgi->param('link'); +my $link = $1; + +my $new = new FS::cust_pay ( { +  $link => $linknum, +  map { +    $_, scalar($cgi->param($_)); +  } qw(paid _date payby payinfo paybatch) +  #} fields('cust_pay') +} ); + +my $error = $new->insert; + +if ($error) { +  $cgi->param('error', $error); +  print $cgi->redirect(popurl(2). 'cust_pay.cgi?'. $cgi->query_string ); +} elsif ( $link eq 'invnum' ) { +  print $cgi->redirect(popurl(3). "view/cust_bill.cgi?$linknum"); +} elsif ( $link eq 'custnum' ) { +  if ( $cgi->param('apply') eq 'yes' ) { +    my $cust_main = qsearchs('cust_main', { 'custnum' => $linknum }) +      or die "unknown custnum $linknum"; +    $cust_main->apply_payments; +  } +  if ( $cgi->param('quickpay') eq 'yes' ) { +    print $cgi->redirect(popurl(3). "search/cust_main-quickpay.html"); +  } else { +    print $cgi->redirect(popurl(3). "view/cust_main.cgi?$linknum"); +  } +} + +%> diff --git a/httemplate/edit/process/cust_pkg.cgi b/httemplate/edit/process/cust_pkg.cgi new file mode 100755 index 000000000..f8c9f5151 --- /dev/null +++ b/httemplate/edit/process/cust_pkg.cgi @@ -0,0 +1,36 @@ +<% + +my $error = ''; + +#untaint custnum +$cgi->param('custnum') =~ /^(\d+)$/; +my $custnum = $1; + +my @remove_pkgnums = map { +  /^(\d+)$/ or die "Illegal remove_pkg value!"; +  $1; +} $cgi->param('remove_pkg'); + +my @pkgparts; +foreach my $pkgpart ( map /^pkg(\d+)$/ ? $1 : (), $cgi->param ) { +  if ( $cgi->param("pkg$pkgpart") =~ /^(\d+)$/ ) { +    my $num_pkgs = $1; +    while ( $num_pkgs-- ) { +      push @pkgparts,$pkgpart; +    } +  } else { +    $error = "Illegal quantity"; +    last; +  } +} + +$error ||= FS::cust_pkg::order($custnum,\@pkgparts,\@remove_pkgnums); + +if ($error) { +  $cgi->param('error', $error); +  print $cgi->redirect(popurl(2). "cust_pkg.cgi?". $cgi->query_string ); +} else { +  print $cgi->redirect(popurl(3). "view/cust_main.cgi?$custnum"); +} + +%> diff --git a/httemplate/edit/process/part_bill_event.cgi b/httemplate/edit/process/part_bill_event.cgi new file mode 100755 index 000000000..4049ade80 --- /dev/null +++ b/httemplate/edit/process/part_bill_event.cgi @@ -0,0 +1,53 @@ +<% + +my $eventpart = $cgi->param('eventpart'); + +my $old = qsearchs('part_bill_event',{'eventpart'=>$eventpart}) if $eventpart; + +#s/days/seconds/ +$cgi->param('seconds', $cgi->param('days') * 86400 ); + +my $error; +if ( ! $cgi->param('plan_weight_eventcode') ) { +  $error = "Must select an action"; +} else { + +  $cgi->param('plan_weight_eventcode') =~ /^([\w\-]+):(\d+):(.*)$/ +    or die "illegal plan_weight_eventcode:". +           $cgi->param('plan_weight_eventcode'); +  $cgi->param('plan', $1); +  $cgi->param('weight', $2); +  my $eventcode = $3; +  my $plandata = ''; +  while ( $eventcode =~ /%%%(\w+)%%%/ ) { +    my $field = $1; +    my $value = $cgi->param($field); +    $eventcode =~ s/%%%$field%%%/$value/; +    $plandata .= "$field $value\n"; +  } +  $cgi->param('eventcode', $eventcode); +  $cgi->param('plandata', $plandata); + +  my $new = new FS::part_bill_event ( { +    map { +      $_, scalar($cgi->param($_)); +    } fields('part_bill_event'), +  } ); + +  if ( $eventpart ) { +    $error = $new->replace($old); +  } else { +    $error = $new->insert; +    $eventpart = $new->getfield('eventpart'); +  } +}  + +if ( $error ) { +  $cgi->param('error', $error); +  print $cgi->redirect(popurl(2). "part_bill_event.cgi?". $cgi->query_string ); +} else { +  print $cgi->redirect(popurl(3)."browse/part_bill_event.cgi"); +} + +%> + diff --git a/httemplate/edit/process/part_pkg.cgi b/httemplate/edit/process/part_pkg.cgi new file mode 100755 index 000000000..d489426f9 --- /dev/null +++ b/httemplate/edit/process/part_pkg.cgi @@ -0,0 +1,109 @@ +<% + +my $dbh = dbh; + +my $pkgpart = $cgi->param('pkgpart'); + +my $old = qsearchs('part_pkg',{'pkgpart'=>$pkgpart}) if $pkgpart; + +#fixup plandata +my $plandata = $cgi->param('plandata'); +my @plandata = split(',', $plandata); +$cgi->param('plandata',  +  join('', map { "$_=". join(', ', $cgi->param($_)). "\n" } @plandata ) +); + +foreach (qw( setuptax recurtax disabled )) { +  $cgi->param($_, '') unless defined $cgi->param($_); +} + +my $new = new FS::part_pkg ( { +  map { +    $_, scalar($cgi->param($_)); +  } fields('part_pkg') +} ); + +#warn "setuptax: ". $new->setuptax; +#warn "recurtax: ". $new->recurtax; + +#most of the stuff below should move to part_pkg.pm + +foreach my $part_svc ( qsearch('part_svc', {} ) ) { +  my $quantity = $cgi->param('pkg_svc'. $part_svc->svcpart) || 0; +  unless ( $quantity =~ /^(\d+)$/ ) { +    $cgi->param('error', "Illegal quantity" ); +    print $cgi->redirect(popurl(2). "part_pkg.cgi?". $cgi->query_string ); +    myexit(); +  } +} + +local $SIG{HUP} = 'IGNORE'; +local $SIG{INT} = 'IGNORE'; +local $SIG{QUIT} = 'IGNORE'; +local $SIG{TERM} = 'IGNORE'; +local $SIG{TSTP} = 'IGNORE'; +local $SIG{PIPE} = 'IGNORE'; + +local $FS::UID::AutoCommit = 0; + +my $error; +if ( $pkgpart ) { +  $error = $new->replace($old); +} else { +  $error = $new->insert; +  $pkgpart=$new->pkgpart; +} +if ( $error ) { +  $dbh->rollback; +  $cgi->param('error', $error ); +  print $cgi->redirect(popurl(2). "part_pkg.cgi?". $cgi->query_string ); +  myexit(); +} + +foreach my $part_svc (qsearch('part_svc',{})) { +  my $quantity = $cgi->param('pkg_svc'. $part_svc->svcpart) || 0; +  my $old_pkg_svc = qsearchs('pkg_svc', { +    'pkgpart' => $pkgpart, +    'svcpart' => $part_svc->svcpart, +  } ); +  my $old_quantity = $old_pkg_svc ? $old_pkg_svc->quantity : 0; +  next unless $old_quantity != $quantity; #!here +  my $new_pkg_svc = new FS::pkg_svc( { +    'pkgpart'  => $pkgpart, +    'svcpart'  => $part_svc->svcpart, +    'quantity' => $quantity,  +  } ); +  if ( $old_pkg_svc ) { +    my $myerror = $new_pkg_svc->replace($old_pkg_svc); +    if ( $myerror ) { +      $dbh->rollback; +      die $myerror; +    } +  } else { +    my $myerror = $new_pkg_svc->insert; +    if ( $myerror ) { +      $dbh->rollback; +      die $myerror; +    } +  } +} + +unless ( $cgi->param('pkgnum') && $cgi->param('pkgnum') =~ /^(\d+)$/ ) { +  $dbh->commit or die $dbh->errstr; +  print $cgi->redirect(popurl(3). "browse/part_pkg.cgi"); +} else { +  my($old_cust_pkg) = qsearchs( 'cust_pkg', { 'pkgnum' => $1 } ); +  my %hash = $old_cust_pkg->hash; +  $hash{'pkgpart'} = $pkgpart; +  my($new_cust_pkg) = new FS::cust_pkg \%hash; +  my $myerror = $new_cust_pkg->replace($old_cust_pkg); +  if ( $myerror ) { +    $dbh->rollback; +    die "Error modifying cust_pkg record: $myerror\n"; +  } + +  $dbh->commit or die $dbh->errstr; +  print $cgi->redirect(popurl(3). "view/cust_main.cgi?". $new_cust_pkg->custnum); +} + +%> diff --git a/httemplate/edit/process/part_referral.cgi b/httemplate/edit/process/part_referral.cgi new file mode 100755 index 000000000..fd2c01506 --- /dev/null +++ b/httemplate/edit/process/part_referral.cgi @@ -0,0 +1,28 @@ +<% + +my $refnum = $cgi->param('refnum'); + +my $new = new FS::part_referral ( { +  map { +    $_, scalar($cgi->param($_)); +  } fields('part_referral') +} ); + +my $error; +if ( $refnum ) { +  my $old = qsearchs( 'part_referral', { 'refnum' =>$ refnum } ); +  die "(Old) Record not found!" unless $old; +  $error = $new->replace($old); +} else { +  $error = $new->insert; +} +$refnum=$new->refnum; + +if ( $error ) { +  $cgi->param('error', $error); +  print $cgi->redirect(popurl(2). "part_referral.cgi?". $cgi->query_string ); +} else { +  print $cgi->redirect(popurl(3). "browse/part_referral.cgi"); +} + +%> diff --git a/httemplate/edit/process/part_svc.cgi b/httemplate/edit/process/part_svc.cgi new file mode 100755 index 000000000..423db93b5 --- /dev/null +++ b/httemplate/edit/process/part_svc.cgi @@ -0,0 +1,35 @@ +<% + +my $svcpart = $cgi->param('svcpart'); + +my $old = qsearchs('part_svc',{'svcpart'=>$svcpart}) if $svcpart; + +my $new = new FS::part_svc ( { +  map { +    $_, scalar($cgi->param($_)); +#  } qw(svcpart svc svcdb) +  } ( fields('part_svc'), +      map { my $svcdb = $_; +            map { ( $svcdb.'__'.$_, $svcdb.'__'.$_.'_flag' )  } +              fields($svcdb) +          } grep defined( $FS::Record::dbdef->table($_) ), +                 qw( svc_acct svc_domain svc_acct_sm svc_forward svc_www ) +    ) +} ); + +my $error; +if ( $svcpart ) { +  $error = $new->replace($old, '1.3-COMPAT'); +} else { +  $error = $new->insert; +  $svcpart=$new->getfield('svcpart'); +} + +if ( $error ) { +  $cgi->param('error', $error); +  print $cgi->redirect(popurl(2). "part_svc.cgi?". $cgi->query_string ); +} else { +  print $cgi->redirect(popurl(3)."browse/part_svc.cgi"); +} + +%> diff --git a/httemplate/edit/process/quick-cust_pkg.cgi b/httemplate/edit/process/quick-cust_pkg.cgi new file mode 100644 index 000000000..c663dce32 --- /dev/null +++ b/httemplate/edit/process/quick-cust_pkg.cgi @@ -0,0 +1,24 @@ +<% + +#untaint custnum +$cgi->param('custnum') =~ /^(\d+)$/ +  or eidiot 'illegal custnum '. $cgi->param('custnum'); +my $custnum = $1; +$cgi->param('pkgpart') =~ /^(\d+)$/ +  or eidiot 'illegal pkgpart '. $cgi->param('pkgpart'); +my $pkgpart = $1; + +my @cust_pkg = (); +my $error = FS::cust_pkg::order($custnum, [ $pkgpart ], [], \@cust_pkg, ); + +if ($error) { +%> +<!-- mason kludge --> +<% +  eidiot($error); +} else { +  print $cgi->redirect(popurl(3). "view/cust_pkg.cgi?". $cust_pkg[0]->pkgnum ); +} + +%> + diff --git a/httemplate/edit/process/svc_acct.cgi b/httemplate/edit/process/svc_acct.cgi new file mode 100755 index 000000000..5e8a16f4a --- /dev/null +++ b/httemplate/edit/process/svc_acct.cgi @@ -0,0 +1,46 @@ +<% + +$cgi->param('svcnum') =~ /^(\d*)$/ or die "Illegal svcnum!"; +my $svcnum = $1; + +my $old; +if ( $svcnum ) { +  $old = qsearchs('svc_acct', { 'svcnum' => $svcnum } ) +    or die "fatal: can't find account (svcnum $svcnum)!"; +} else { +  $old = ''; +} + +#unmunge popnum +$cgi->param('popnum', (split(/:/, $cgi->param('popnum') ))[0] ); + +#unmunge passwd +if ( $cgi->param('_password') eq '*HIDDEN*' ) { +  die "fatal: no previous account to recall hidden password from!" unless $old; +  $cgi->param('_password',$old->getfield('_password')); +} + +my $new = new FS::svc_acct ( { +  map { +    $_, scalar($cgi->param($_)); +  #} qw(svcnum pkgnum svcpart username _password popnum uid gid finger dir +  #  shell quota slipip) +  } ( fields('svc_acct'), qw( pkgnum svcpart ) ) +} ); + +my $error; +if ( $svcnum ) { +  $error = $new->replace($old); +} else { +  $error = $new->insert; +  $svcnum = $new->svcnum; +} + +if ( $error ) { +  $cgi->param('error', $error); +  print $cgi->redirect(popurl(2). "svc_acct.cgi?". $cgi->query_string ); +} else { +  print $cgi->redirect(popurl(3). "view/svc_acct.cgi?" . $svcnum ); +} + +%> diff --git a/httemplate/edit/process/svc_acct_pop.cgi b/httemplate/edit/process/svc_acct_pop.cgi new file mode 100755 index 000000000..46ad74d62 --- /dev/null +++ b/httemplate/edit/process/svc_acct_pop.cgi @@ -0,0 +1,28 @@ +<% + +my $popnum = $cgi->param('popnum'); + +my $old = qsearchs('svc_acct_pop',{'popnum'=>$popnum}) if $popnum; + +my $new = new FS::svc_acct_pop ( { +  map { +    $_, scalar($cgi->param($_)); +  } fields('svc_acct_pop') +} ); + +my $error = ''; +if ( $popnum ) { +  $error = $new->replace($old); +} else { +  $error = $new->insert; +  $popnum=$new->getfield('popnum'); +} + +if ( $error ) { +  $cgi->param('error', $error); +  print $cgi->redirect(popurl(2). "svc_acct_pop.cgi?". $cgi->query_string ); +} else { +  print $cgi->redirect(popurl(3). "browse/svc_acct_pop.cgi"); +} + +%> diff --git a/httemplate/edit/process/svc_acct_sm.cgi b/httemplate/edit/process/svc_acct_sm.cgi new file mode 100755 index 000000000..41d03fb92 --- /dev/null +++ b/httemplate/edit/process/svc_acct_sm.cgi @@ -0,0 +1,34 @@ +<% + +$cgi->param('svcnum') =~ /^(\d*)$/ or die "Illegal svcnum!"; +my $svcnum =$1; + +my $old = qsearchs('svc_acct_sm',{'svcnum'=>$svcnum}) if $svcnum; + +#unmunge domsvc and domuid +#$cgi->param('domsvc',(split(/:/, $cgi->param('domsvc') ))[0] ); +#$cgi->param('domuid',(split(/:/, $cgi->param('domuid') ))[0] ); + +my $new = new FS::svc_acct_sm ( { +  map { +    ($_, scalar($cgi->param($_))); +  #} qw(svcnum pkgnum svcpart domuser domuid domsvc) +  } ( fields('svc_acct_sm'), qw( pkgnum svcpart ) ) +} ); + +my $error = ''; +if ( $svcnum ) { +  $error = $new->replace($old); +} else { +  $error = $new->insert; +  $svcnum = $new->getfield('svcnum'); +}  + +if ($error) { +  $cgi->param('error', $error); +  print $cgi->redirect(popurl(2). "svc_acct_sm.cgi?". $cgi->query_string ); +} else { +  print $cgi->redirect(popurl(3). "view/svc_acct_sm.cgi?$svcnum"); +} + +%> diff --git a/httemplate/edit/process/svc_domain.cgi b/httemplate/edit/process/svc_domain.cgi new file mode 100755 index 000000000..19f8eb4f8 --- /dev/null +++ b/httemplate/edit/process/svc_domain.cgi @@ -0,0 +1,31 @@ +<% + +#remove this to actually test the domains! +$FS::svc_domain::whois_hack = 1; + +$cgi->param('svcnum') =~ /^(\d*)$/ or die "Illegal svcnum!"; +my $svcnum = $1; + +my $new = new FS::svc_domain ( { +  map { +    $_, scalar($cgi->param($_)); +  #} qw(svcnum pkgnum svcpart domain action purpose) +  } ( fields('svc_domain'), qw( pkgnum svcpart action purpose ) ) +} ); + +my $error = ''; +if ($cgi->param('svcnum')) { +  $error="Can't modify a domain!"; +} else { +  $error=$new->insert; +  $svcnum=$new->svcnum; +} + +if ($error) { +  $cgi->param('error', $error); +  print $cgi->redirect(popurl(2). "svc_domain.cgi?". $cgi->query_string ); +} else { +  print $cgi->redirect(popurl(3). "view/svc_domain.cgi?$svcnum"); +} + +%> diff --git a/httemplate/edit/process/svc_forward.cgi b/httemplate/edit/process/svc_forward.cgi new file mode 100755 index 000000000..bb066d8a6 --- /dev/null +++ b/httemplate/edit/process/svc_forward.cgi @@ -0,0 +1,29 @@ +<% + +$cgi->param('svcnum') =~ /^(\d*)$/ or die "Illegal svcnum!"; +my $svcnum =$1; + +my $old = qsearchs('svc_forward',{'svcnum'=>$svcnum}) if $svcnum; + +my $new = new FS::svc_forward ( { +  map { +    ($_, scalar($cgi->param($_))); +  } ( fields('svc_forward'), qw( pkgnum svcpart ) ) +} ); + +my $error = ''; +if ( $svcnum ) { +  $error = $new->replace($old); +} else { +  $error = $new->insert; +  $svcnum = $new->getfield('svcnum'); +}  + +if ($error) { +  $cgi->param('error', $error); +  print $cgi->redirect(popurl(2). "svc_forward.cgi?". $cgi->query_string ); +} else { +  print $cgi->redirect(popurl(3). "view/svc_forward.cgi?$svcnum"); +} + +%> diff --git a/httemplate/edit/process/svc_www.cgi b/httemplate/edit/process/svc_www.cgi new file mode 100644 index 000000000..38d5e1c79 --- /dev/null +++ b/httemplate/edit/process/svc_www.cgi @@ -0,0 +1,36 @@ +<% + +$cgi->param('svcnum') =~ /^(\d*)$/ or die "Illegal svcnum!"; +my $svcnum = $1; + +my $old; +if ( $svcnum ) { +  $old = qsearchs('svc_acct', { 'svcnum' => $svcnum } ) +    or die "fatal: can't find account (svcnum $svcnum)!"; +} else { +  $old = ''; +} + +my $new = new FS::svc_www ( { +  map { +    ($_, scalar($cgi->param($_))); +  #} qw(svcnum pkgnum svcpart recnum usersvc) +  } ( fields('svc_www'), qw( pkgnum svcpart ) ) +} ); + +my $error; +if ( $svcnum ) { +  $error = $new->replace($old); +} else { +  $error = $new->insert; +  $svcnum = $new->svcnum; +} + +if ( $error ) { +  $cgi->param('error', $error); +  print $cgi->redirect(popurl(2). "svc_www.cgi?". $cgi->query_string ); +} else { +  print $cgi->redirect(popurl(3). "view/svc_www.cgi?" . $svcnum ); +} + +%>  | 
