first pass as per-user custom pricing
[freeside.git] / htdocs / edit / process / part_pkg.cgi
1 #!/usr/bin/perl -Tw
2 #
3 # $Id: part_pkg.cgi,v 1.2 1998-11-15 13:16:15 ivan Exp $
4 #
5 # process/part_pkg.cgi: Edit package definitions (process form)
6 #
7 # ivan@sisd.com 97-dec-10
8 #
9 # don't update non-changing records in part_svc (causing harmless but annoying
10 # "Records identical" errors). ivan@sisd.com 98-feb-19
11 #
12 # Changes to allow page to work at a relative position in server
13 #       bmccane@maxbaud.net     98-apr-3
14 #
15 # Added `|| 0 ' when getting quantity off web page ivan@sisd.com 98-jun-4
16 #
17 # lose background, FS::CGI ivan@sisd.com 98-sep-2
18 #
19 # $Log: part_pkg.cgi,v $
20 # Revision 1.2  1998-11-15 13:16:15  ivan
21 # first pass as per-user custom pricing
22 #
23
24 use strict;
25 use CGI;
26 use CGI::Carp qw(fatalsToBrowser);
27 use FS::UID qw(cgisuidsetup);
28 use FS::CGI qw(eidiot popurl);
29 use FS::Record qw(qsearch qsearchs);
30 use FS::part_pkg qw(fields);
31 use FS::pkg_svc;
32 use FS::cust_pkg;
33
34 my($cgi)=new CGI;
35 &cgisuidsetup($cgi);
36
37 my($pkgpart)=$cgi->param('pkgpart');
38
39 my($old)=qsearchs('part_pkg',{'pkgpart'=>$pkgpart}) if $pkgpart;
40
41 my($new)=create FS::part_pkg ( {
42   map {
43     $_, $cgi->param($_);
44   } fields('part_pkg')
45 } );
46
47 local $SIG{HUP} = 'IGNORE';
48 local $SIG{INT} = 'IGNORE';
49 local $SIG{QUIT} = 'IGNORE';
50 local $SIG{TERM} = 'IGNORE';
51 local $SIG{TSTP} = 'IGNORE';
52
53 if ( $pkgpart ) {
54   my($error)=$new->replace($old);
55   eidiot($error) if $error;
56 } else {
57   my($error)=$new->insert;
58   eidiot($error) if $error;
59   $pkgpart=$new->getfield('pkgpart');
60 }
61
62 my($part_svc);
63 foreach $part_svc (qsearch('part_svc',{})) {
64 # don't update non-changing records in part_svc (causing harmless but annoying
65 # "Records identical" errors). ivan@sisd.com 98-jan-19
66   #my($quantity)=$cgi->param('pkg_svc'. $part_svc->getfield('svcpart')),
67   my($quantity)=$cgi->param('pkg_svc'. $part_svc->svcpart) || 0,
68   my($old_pkg_svc)=qsearchs('pkg_svc',{
69     'pkgpart'  => $pkgpart,
70     'svcpart'  => $part_svc->getfield('svcpart'),
71   });
72   my($old_quantity)=$old_pkg_svc ? $old_pkg_svc->quantity : 0;
73   next unless $old_quantity != $quantity; #!here
74   my($new_pkg_svc)=create FS::pkg_svc({
75     'pkgpart'  => $pkgpart,
76     'svcpart'  => $part_svc->getfield('svcpart'),
77     #'quantity' => $cgi->param('pkg_svc'. $part_svc->getfield('svcpart')),
78     'quantity' => $quantity, 
79   });
80   if ($old_pkg_svc) {
81     my($error)=$new_pkg_svc->replace($old_pkg_svc);
82     eidiot($error) if $error;
83   } else {
84     my($error)=$new_pkg_svc->insert;
85     eidiot($error) if $error;
86   }
87 }
88
89 unless ( $cgi->param('pkgnum') =~ /^(\d+)$/ ) {
90   #$req->cgi->redirect("../../view/part_pkg.cgi?$pkgpart");
91   #$req->cgi->redirect("../../edit/part_pkg.cgi?$pkgpart");
92   $cgi->redirect("../../browse/part_pkg.cgi");
93 } else {
94   my($old_cust_pkg) = qsearchs( 'cust_pkg', { 'pkgnum' => $1 } );
95   my %hash = $old_cust_pkg->hash;
96   $hash{'pkgpart'} = $pkgpart;
97   my($new_cust_pkg) = create FS::cust_pkg \%hash;
98   my $error = $new_cust_pkg->replace($old_cust_pkg);
99   eidiot "Error modifying cust_pkg record: $error\n" if $error;
100   print $cgi->redirect(popurl(3). "/view/cust_main.cgi?". $new_cust_pkg->custnum);
101 }
102
103