3 # $Id: part_pkg.cgi,v 1.8 1999-02-07 09:59:27 ivan Exp $
5 # process/part_pkg.cgi: Edit package definitions (process form)
7 # ivan@sisd.com 97-dec-10
9 # don't update non-changing records in part_svc (causing harmless but annoying
10 # "Records identical" errors). ivan@sisd.com 98-feb-19
12 # Changes to allow page to work at a relative position in server
13 # bmccane@maxbaud.net 98-apr-3
15 # Added `|| 0 ' when getting quantity off web page ivan@sisd.com 98-jun-4
17 # lose background, FS::CGI ivan@sisd.com 98-sep-2
19 # $Log: part_pkg.cgi,v $
20 # Revision 1.8 1999-02-07 09:59:27 ivan
21 # more mod_perl fixes, and bugfixes Peter Wemm sent via email
23 # Revision 1.7 1999/01/19 05:13:55 ivan
24 # for mod_perl: no more top-level my() variables; use vars instead
25 # also the last s/create/new/;
27 # Revision 1.6 1999/01/18 22:47:56 ivan
28 # s/create/new/g; and use fields('table_name')
30 # Revision 1.5 1998/12/30 23:03:29 ivan
31 # bugfixes; fields isn't exported by derived classes
33 # Revision 1.4 1998/12/17 08:40:24 ivan
34 # s/CGI::Request/CGI.pm/; etc
36 # Revision 1.3 1998/11/21 07:17:58 ivan
37 # bugfix to work for regular aswell as custom pricing
39 # Revision 1.2 1998/11/15 13:16:15 ivan
40 # first pass as per-user custom pricing
44 use vars qw( $cgi $pkgpart $old $new $part_svc $error );
46 use CGI::Carp qw(fatalsToBrowser);
47 use FS::UID qw(cgisuidsetup);
48 use FS::CGI qw(popurl);
49 use FS::Record qw(qsearch qsearchs fields);
57 $pkgpart = $cgi->param('pkgpart');
59 $old = qsearchs('part_pkg',{'pkgpart'=>$pkgpart}) if $pkgpart;
61 $new = new FS::part_pkg ( {
63 $_, scalar($cgi->param($_));
67 #most of the stuff below should move to part_pkg.pm
69 foreach $part_svc ( qsearch('part_svc', {} ) ) {
70 my $quantity = $cgi->param('pkg_svc'. $part_svc->svcpart) || 0;
71 unless ( $quantity =~ /^(\d+)$/ ) {
72 $cgi->param('error', "Illegal quantity" );
73 print $cgi->redirect(popurl(2). "part_pkg.cgi?". $cgi->query_string );
78 local $SIG{HUP} = 'IGNORE';
79 local $SIG{INT} = 'IGNORE';
80 local $SIG{QUIT} = 'IGNORE';
81 local $SIG{TERM} = 'IGNORE';
82 local $SIG{TSTP} = 'IGNORE';
83 local $SIG{PIPE} = 'IGNORE';
86 $error = $new->replace($old);
88 $error = $new->insert;
89 $pkgpart=$new->pkgpart;
92 $cgi->param('error', $error );
93 print $cgi->redirect(popurl(2). "part_pkg.cgi?". $cgi->query_string );
97 foreach $part_svc (qsearch('part_svc',{})) {
98 my $quantity = $cgi->param('pkg_svc'. $part_svc->svcpart) || 0;
99 my $old_pkg_svc = qsearchs('pkg_svc', {
100 'pkgpart' => $pkgpart,
101 'svcpart' => $part_svc->svcpart,
103 my $old_quantity = $old_pkg_svc ? $old_pkg_svc->quantity : 0;
104 next unless $old_quantity != $quantity; #!here
105 my $new_pkg_svc = new FS::pkg_svc( {
106 'pkgpart' => $pkgpart,
107 'svcpart' => $part_svc->svcpart,
108 'quantity' => $quantity,
110 if ( $old_pkg_svc ) {
111 my $myerror = $new_pkg_svc->replace($old_pkg_svc);
112 die $myerror if $myerror;
114 my $myerror = $new_pkg_svc->insert;
115 die $myerror if $myerror;
119 unless ( $cgi->param('pkgnum') && $cgi->param('pkgnum') =~ /^(\d+)$/ ) {
120 print $cgi->redirect(popurl(3). "browse/part_pkg.cgi");
122 my($old_cust_pkg) = qsearchs( 'cust_pkg', { 'pkgnum' => $1 } );
123 my %hash = $old_cust_pkg->hash;
124 $hash{'pkgpart'} = $pkgpart;
125 my($new_cust_pkg) = new FS::cust_pkg \%hash;
126 my $myerror = $new_cust_pkg->replace($old_cust_pkg);
127 die "Error modifying cust_pkg record: $myerror\n" if $myerror;
128 print $cgi->redirect(popurl(3). "view/cust_main.cgi?". $new_cust_pkg->custnum);