summaryrefslogtreecommitdiff
path: root/FS/FS/cust_svc.pm
diff options
context:
space:
mode:
authorIvan Kohler <ivan@freeside.biz>2014-03-19 19:28:49 -0700
committerIvan Kohler <ivan@freeside.biz>2014-03-19 19:28:49 -0700
commita8e98b0506e1fb15bc2ca721f6c3c6a8e431bd24 (patch)
treedaa069d450272a6b984d6117b0920ba63ad3d685 /FS/FS/cust_svc.pm
parent71fa02dc2a93a81c522b82a62833840614359b8e (diff)
fix service add-ons RT#27974 / RT#28151, fallout from perf optimization #26097
Diffstat (limited to 'FS/FS/cust_svc.pm')
-rw-r--r--FS/FS/cust_svc.pm22
1 files changed, 20 insertions, 2 deletions
diff --git a/FS/FS/cust_svc.pm b/FS/FS/cust_svc.pm
index be5a9eb..b01ed84 100644
--- a/FS/FS/cust_svc.pm
+++ b/FS/FS/cust_svc.pm
@@ -370,8 +370,25 @@ sub check {
my $cust_pkg = $self->cust_pkg;
my $pkg_svc = $self->pkg_svc
- or return "No svcpart ". $self->svcpart.
- " services in pkgpart ". $cust_pkg->pkgpart;
+ || new FS::pkg_svc { 'svcpart' => $self->svcpart,
+ 'pkgpart' => $cust_pkg->pkgpart,
+ 'quantity' => 0,
+ };
+
+ #service add-ons, kinda false laziness/reimplementation of part_pkg->pkg_svc
+ foreach my $part_pkg_link ( $cust_pkg->part_pkg->svc_part_pkg_link ) {
+ my $addon_pkg_svc = qsearchs('pkg_svc', {
+ pkgpart => $part_pkg_link->dst_pkgpart,
+ svcpart => $self->svcpart,
+ });
+ $pkg_svc->quantity( $pkg_svc->quantity + $addon_pkg_svc->quantity )
+ if $addon_pkg_svc;
+ }
+
+ #better error message? UI shouldn't get here
+ return "No svcpart ". $self->svcpart.
+ " services in pkgpart ". $cust_pkg->pkgpart
+ unless $pkg_svc->quantity > 0;
my $num_cust_svc = $cust_pkg->num_cust_svc( $self->svcpart );
@@ -380,6 +397,7 @@ sub check {
- $num_cust_svc
);
+ #better error message? again, UI shouldn't get here
return "Already $num_cust_svc ". $pkg_svc->part_svc->svc.
" services for pkgnum ". $self->pkgnum
if $num_avail <= 0;