1 package FS::part_pkg_link;
5 use FS::Record qw( qsearchs );
12 FS::part_pkg_link - Object methods for part_pkg_link records
16 use FS::part_pkg_link;
18 $record = new FS::part_pkg_link \%hash;
19 $record = new FS::part_pkg_link { 'column' => 'value' };
21 $error = $record->insert;
23 $error = $new_record->replace($old_record);
25 $error = $record->delete;
27 $error = $record->check;
31 An FS::part_pkg_link object represents an link from one package definition to
32 another. FS::part_pkg_link inherits from FS::Record. The following fields are
43 Source package (see L<FS::part_pkg>)
47 Destination package (see L<FS::part_pkg>)
51 Link type - currently, "bill" (source package bills a line item from target
52 package), or "svc" (source package includes services from target package),
53 or "supp" (ordering source package creates a target package).
57 Flag indicating that this subpackage should be felt, but not seen as an invoice
58 line item when set to 'Y'. Not allowed for "supp" links.
68 Creates a new link. To add the link to the database, see L<"insert">.
70 Note that this stores the hash reference, not a distinct copy of the hash it
71 points to. You can ask the object for a copy with the I<hash> method.
75 # the new method can be inherited from FS::Record, if a table method is defined
77 sub table { 'part_pkg_link'; }
81 Adds this record to the database. If there is an error, returns the error,
82 otherwise returns false.
86 # the insert method can be inherited from FS::Record
90 Delete this record from the database.
94 # the delete method can be inherited from FS::Record
96 =item replace OLD_RECORD
98 Replaces the OLD_RECORD with this one in the database. If there is an error,
99 returns the error, otherwise returns false.
103 # the replace method can be inherited from FS::Record
107 Checks all fields to make sure this is a valid link. If there is
108 an error, returns the error, otherwise returns false. Called by the insert
113 # the check method should currently be supplied - FS::Record contains some
114 # data checking routines
120 $self->ut_numbern('pkglinknum')
121 || $self->ut_foreign_key('src_pkgpart', 'part_pkg', 'pkgpart')
122 || $self->ut_foreign_key('dst_pkgpart', 'part_pkg', 'pkgpart')
123 || $self->ut_enum('link_type', [ 'bill', 'svc', 'supp' ] )
124 || $self->ut_enum('hidden', [ '', 'Y' ] )
126 return $error if $error;
128 if ( $self->link_type eq 'supp' ) {
129 # some sanity checking
130 my $src_pkg = $self->src_pkg;
131 my $dst_pkg = $self->dst_pkg;
132 if ( $src_pkg->freq eq '0' and $dst_pkg->freq ne '0' ) {
133 return "One-time charges can't have supplemental packages."
134 } elsif ( $dst_pkg->freq ne '0' ) {
135 my $ratio = $dst_pkg->freq / $src_pkg->freq;
136 if ($ratio != int($ratio)) {
137 return "Supplemental package period (pkgpart ".$dst_pkg->pkgpart.
138 ") must be an integer multiple of main package period.";
148 Returns the source part_pkg object (see L<FS::part_pkg>).
154 qsearchs('part_pkg', { 'pkgpart' => $self->src_pkgpart } );
159 Returns the source part_pkg object (see L<FS::part_pkg>).
165 qsearchs('part_pkg', { 'pkgpart' => $self->dst_pkgpart } );
174 L<FS::Record>, schema.html from the base documentation.