summaryrefslogtreecommitdiff
path: root/FS
diff options
context:
space:
mode:
authorIvan Kohler <ivan@freeside.biz>2013-04-14 17:08:36 -0700
committerIvan Kohler <ivan@freeside.biz>2013-04-14 17:08:36 -0700
commit2e761a72c380dc9d7320ccd822cfe8476534b369 (patch)
tree4c26f3391325c2f0a3a6a117b7dc2b0ae94993b2 /FS
parenta9f4e76c1d2392514c4172dd869fd101e3a9c6ec (diff)
package contacts / "name per packages", RT#22185
Diffstat (limited to 'FS')
-rw-r--r--FS/FS/Schema.pm1
-rw-r--r--FS/FS/contact_Mixin.pm19
-rw-r--r--FS/FS/cust_main/Packages.pm22
-rw-r--r--FS/FS/cust_pkg.pm5
-rw-r--r--FS/MANIFEST2
-rw-r--r--FS/t/contact_Mixin.t5
6 files changed, 53 insertions, 1 deletions
diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm
index 924d0d999..bbf3b42fe 100644
--- a/FS/FS/Schema.pm
+++ b/FS/FS/Schema.pm
@@ -1721,6 +1721,7 @@ sub tables_hashref {
'custnum', 'int', '', '', '', '',
'pkgpart', 'int', '', '', '', '',
'pkgbatch', 'varchar', 'NULL', $char_d, '', '',
+ 'contactnum', 'int', 'NULL', '', '', '',
'locationnum', 'int', 'NULL', '', '', '',
'otaker', 'varchar', 'NULL', 32, '', '',
'usernum', 'int', 'NULL', '', '', '',
diff --git a/FS/FS/contact_Mixin.pm b/FS/FS/contact_Mixin.pm
new file mode 100644
index 000000000..33cd3509a
--- /dev/null
+++ b/FS/FS/contact_Mixin.pm
@@ -0,0 +1,19 @@
+package FS::contact_Mixin;
+
+use strict;
+use FS::Record qw( qsearchs );
+use FS::contact;
+
+=item contact
+
+Returns the contact object, if any (see L<FS::contact>).
+
+=cut
+
+sub contact {
+ my $self = shift;
+ return '' unless $self->contactnum;
+ qsearchs( 'contact', { 'contactnum' => $self->contactnum } );
+}
+
+1;
diff --git a/FS/FS/cust_main/Packages.pm b/FS/FS/cust_main/Packages.pm
index 29e3bec13..f83bce915 100644
--- a/FS/FS/cust_main/Packages.pm
+++ b/FS/FS/cust_main/Packages.pm
@@ -100,6 +100,28 @@ sub order_pkg {
local $FS::UID::AutoCommit = 0;
my $dbh = dbh;
+ if ( $opt->{'contactnum'} and $opt->{'contactnum'} != -1 ) {
+
+ $cust_pkg->contactnum($opt->{'contactnum'});
+
+ } elsif ( $opt->{'contact'} ) {
+
+ if ( ! $opt->{'contact'}->contactnum ) {
+ # not inserted yet
+ my $error = $opt->{'contact'}->insert;
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return "inserting contact (transaction rolled back): $error";
+ }
+ }
+ $cust_pkg->contactnum($opt->{'contact'}->contactnum);
+
+ #} else {
+ #
+ # $cust_pkg->contactnum();
+
+ }
+
if ( $opt->{'locationnum'} and $opt->{'locationnum'} != -1 ) {
$cust_pkg->locationnum($opt->{'locationnum'});
diff --git a/FS/FS/cust_pkg.pm b/FS/FS/cust_pkg.pm
index b2cb4139d..bb1b4e37a 100644
--- a/FS/FS/cust_pkg.pm
+++ b/FS/FS/cust_pkg.pm
@@ -1,7 +1,8 @@
package FS::cust_pkg;
use strict;
-use base qw( FS::otaker_Mixin FS::cust_main_Mixin FS::location_Mixin
+use base qw( FS::otaker_Mixin FS::cust_main_Mixin
+ FS::contact_Mixin FS::location_Mixin
FS::m2m_Common FS::option_Common );
use vars qw($disable_agentcheck $DEBUG $me);
use Carp qw(cluck);
@@ -17,6 +18,7 @@ use FS::CurrentUser;
use FS::cust_svc;
use FS::part_pkg;
use FS::cust_main;
+use FS::contact;
use FS::cust_location;
use FS::pkg_svc;
use FS::cust_bill_pkg;
@@ -620,6 +622,7 @@ sub check {
$self->ut_numbern('pkgnum')
|| $self->ut_foreign_key('custnum', 'cust_main', 'custnum')
|| $self->ut_numbern('pkgpart')
+ || $self->ut_foreign_keyn('contactnum', 'contact', 'contactnum' )
|| $self->ut_foreign_keyn('locationnum', 'cust_location', 'locationnum')
|| $self->ut_numbern('start_date')
|| $self->ut_numbern('setup')
diff --git a/FS/MANIFEST b/FS/MANIFEST
index da4832d41..94232905e 100644
--- a/FS/MANIFEST
+++ b/FS/MANIFEST
@@ -490,6 +490,8 @@ FS/phone_type.pm
t/phone_type.t
FS/contact_email.pm
t/contact_email.t
+FS/contact_Mixin.pm
+t/contact_Mixin.t
FS/prospect_main.pm
t/prospect_main.t
FS/o2m_Common.pm
diff --git a/FS/t/contact_Mixin.t b/FS/t/contact_Mixin.t
new file mode 100644
index 000000000..89dcc37c5
--- /dev/null
+++ b/FS/t/contact_Mixin.t
@@ -0,0 +1,5 @@
+BEGIN { $| = 1; print "1..1\n" }
+END {print "not ok 1\n" unless $loaded;}
+use FS::contact_Mixin;
+$loaded=1;
+print "ok 1\n";