summaryrefslogtreecommitdiff
path: root/httemplate/edit/process/cust_pkg.cgi
blob: 82a9e23753800c134388e4a2e2f819a8eae93d15 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
% if ($error) {
%   $cgi->param('error', $error);
%   $cgi->redirect(popurl(3). 'edit/cust_pkg.cgi?'. $cgi->query_string );
% } else {
<% $cgi->redirect(popurl(3). "view/cust_main.cgi?$custnum") %>
% }
<%init>
use Data::Dumper;
my $DEBUG = 0;
my $curuser = $FS::CurrentUser::CurrentUser;

die "access denied"
  unless $curuser->access_right('Bulk change customer packages');

my $error = '';
my %param = $cgi->Vars;

my $custnum = $param{custnum};
$error = "Invalid custnum ($custnum)" if $custnum =~ /\D/;

my $locationnum = $param{locationnum};
$error = "Invalid locationnum ($locationnum)" if $locationnum =~ /\D/;

my @remove_pkgnum =
  map { $_ =~ /remove_cust_pkg\[(\d+)\]/ ? $1 : () }
  keys %param;

my @pkgparts;
for my $k ( keys %param ) {
  next unless $k =~ /qty_part_pkg\[(\d+)\]/;
  my $pkgpart = $1;
  my $qty     = $param{$k};
  $qty =~ s/(^\s+|\s+$)//g;

  warn "k($k) param{k}($param{$k}) pkgpart($pkgpart) qty($qty)\n"
    if $DEBUG;

  if ( $qty =~ /\D/ ) {
    $error = "Invalid quantity $qty for pkgpart $pkgpart - please use a number";
    last;
  }

  next if $qty == 0;

  push ( @pkgparts, $pkgpart ) for ( 1..$qty );
}

if ( $DEBUG ) {
  warn Dumper({
    custnum       => $custnum,
    locationnum   => $locationnum,
    remove_pkgnum => \@remove_pkgnum,
    pkgparts      => \@pkgparts,
    param         => \%param,
  });
}

$error ||= FS::cust_pkg::order({
  custnum       => $custnum,
  pkgparts      => \@pkgparts,
  remove_pkgnum => \@remove_pkgnum,
  locationnum   => $locationnum,
});

</%init>