documentation and webdemo updates
[freeside.git] / htdocs / docs / man / FS / cust_pkg.html
1 <HTML>
2 <HEAD>
3 <TITLE>FS::cust_pkg - Object methods for cust_pkg objects</TITLE>
4 <LINK REV="made" HREF="mailto:perl@packages.debian.org">
5 </HEAD>
6
7 <BODY>
8
9 <A NAME="__index__"></A>
10 <!-- INDEX BEGIN -->
11
12 <UL>
13
14         <LI><A HREF="#name">NAME</A></LI>
15         <LI><A HREF="#synopsis">SYNOPSIS</A></LI>
16         <LI><A HREF="#description">DESCRIPTION</A></LI>
17         <LI><A HREF="#methods">METHODS</A></LI>
18         <LI><A HREF="#subroutines">SUBROUTINES</A></LI>
19         <LI><A HREF="#version">VERSION</A></LI>
20         <LI><A HREF="#bugs">BUGS</A></LI>
21         <LI><A HREF="#see also">SEE ALSO</A></LI>
22 </UL>
23 <!-- INDEX END -->
24
25 <HR>
26 <P>
27 <H1><A NAME="name">NAME</A></H1>
28 <P>FS::cust_pkg - Object methods for cust_pkg objects</P>
29 <P>
30 <HR>
31 <H1><A NAME="synopsis">SYNOPSIS</A></H1>
32 <PRE>
33   use FS::cust_pkg;</PRE>
34 <PRE>
35   $record = new FS::cust_pkg \%hash;
36   $record = new FS::cust_pkg { 'column' =&gt; 'value' };</PRE>
37 <PRE>
38   $error = $record-&gt;insert;</PRE>
39 <PRE>
40   $error = $new_record-&gt;replace($old_record);</PRE>
41 <PRE>
42   $error = $record-&gt;delete;</PRE>
43 <PRE>
44   $error = $record-&gt;check;</PRE>
45 <PRE>
46   $error = $record-&gt;cancel;</PRE>
47 <PRE>
48   $error = $record-&gt;suspend;</PRE>
49 <PRE>
50   $error = $record-&gt;unsuspend;</PRE>
51 <PRE>
52   $part_pkg = $record-&gt;part_pkg;</PRE>
53 <PRE>
54   @labels = $record-&gt;labels;</PRE>
55 <PRE>
56   $error = FS::cust_pkg::order( $custnum, \@pkgparts );
57   $error = FS::cust_pkg::order( $custnum, \@pkgparts, \@remove_pkgnums ] );</PRE>
58 <P>
59 <HR>
60 <H1><A NAME="description">DESCRIPTION</A></H1>
61 <P>An FS::cust_pkg object represents a customer billing item.  FS::cust_pkg
62 inherits from FS::Record.  The following fields are currently supported:</P>
63 <DL>
64 <DT><STRONG><A NAME="item_key">pkgnum - primary key (assigned automatically for new billing items)</A></STRONG><BR>
65 <DD>
66 <DT><STRONG><A NAME="item_Customer">custnum - Customer (see <A HREF=".././FS/cust_main.html">the FS::cust_main manpage</A>)</A></STRONG><BR>
67 <DD>
68 <DT><STRONG><A NAME="item_definition">pkgpart - Billing item definition (see <A HREF=".././FS/part_pkg.html">the FS::part_pkg manpage</A>)</A></STRONG><BR>
69 <DD>
70 <DT><STRONG><A NAME="item_setup_%2D_date">setup - date</A></STRONG><BR>
71 <DD>
72 <DT><STRONG><A NAME="item_bill_%2D_date">bill - date</A></STRONG><BR>
73 <DD>
74 <DT><STRONG><A NAME="item_susp_%2D_date">susp - date</A></STRONG><BR>
75 <DD>
76 <DT><STRONG><A NAME="item_expire_%2D_date">expire - date</A></STRONG><BR>
77 <DD>
78 <DT><STRONG><A NAME="item_cancel_%2D_date">cancel - date</A></STRONG><BR>
79 <DD>
80 <DT><STRONG><A NAME="item_taker">otaker - order taker (assigned automatically if null, see <A HREF=".././FS/UID.html">the FS::UID manpage</A>)</A></STRONG><BR>
81 <DD>
82 </DL>
83 <P>Note: setup, bill, susp, expire and cancel are specified as UNIX timestamps;
84 see <EM>perlfunc/``time''</EM>.  Also see <A HREF="../Time/Local.html">the Time::Local manpage</A> and <A HREF="../Date/Parse.html">the Date::Parse manpage</A> for
85 conversion functions.</P>
86 <P>
87 <HR>
88 <H1><A NAME="methods">METHODS</A></H1>
89 <DL>
90 <DT><STRONG><A NAME="item_new">new HASHREF</A></STRONG><BR>
91 <DD>
92 Create a new billing item.  To add the item to the database, see <A HREF="#insert">insert</A>.
93 <P></P>
94 <DT><STRONG><A NAME="item_insert">insert</A></STRONG><BR>
95 <DD>
96 Adds this billing item to the database (``Orders'' the item).  If there is an
97 error, returns the error, otherwise returns false.
98 <P>sub insert {
99   my $self = shift;</P>
100 <PRE>
101   # custnum might not have have been defined in sub check (for one-shot new
102   # customers), so check it here instead</PRE>
103 <PRE>
104   my $error = $self-&gt;ut_number('custnum');
105   return $error if $error</PRE>
106 <PRE>
107   return &quot;Unknown customer&quot;
108     unless qsearchs( 'cust_main', { 'custnum' =&gt; $self-&gt;custnum } );</PRE>
109 <PRE>
110   $self-&gt;SUPER::insert;</PRE>
111 <P>}</P>
112 <P></P>
113 <DT><STRONG><A NAME="item_delete">delete</A></STRONG><BR>
114 <DD>
115 Currently unimplemented.  You don't want to delete billing items, because there
116 would then be no record the customer ever purchased the item.  Instead, see
117 the cancel method.
118 <P></P>
119 <DT><STRONG><A NAME="item_replace_OLD_RECORD">replace OLD_RECORD</A></STRONG><BR>
120 <DD>
121 Replaces the OLD_RECORD with this one in the database.  If there is an error,
122 returns the error, otherwise returns false.
123 <P>Currently, custnum, setup, bill, susp, expire, and cancel may be changed.</P>
124 <P>Changing pkgpart may have disasterous effects.  See the order subroutine.</P>
125 <P>setup and bill are normally updated by calling the bill method of a customer
126 object (see <A HREF=".././FS/cust_main.html">the FS::cust_main manpage</A>).</P>
127 <P>suspend is normally updated by the suspend and unsuspend methods.</P>
128 <P>cancel is normally updated by the cancel method (and also the order subroutine
129 in some cases).</P>
130 <P></P>
131 <DT><STRONG><A NAME="item_check">check</A></STRONG><BR>
132 <DD>
133 Checks all fields to make sure this is a valid billing item.  If there is an
134 error, returns the error, otherwise returns false.  Called by the insert and
135 replace methods.
136 <P></P>
137 <DT><STRONG><A NAME="item_cancel">cancel</A></STRONG><BR>
138 <DD>
139 Cancels and removes all services (see <A HREF=".././FS/cust_svc.html">the FS::cust_svc manpage</A> and <A HREF=".././FS/part_svc.html">the FS::part_svc manpage</A>)
140 in this package, then cancels the package itself (sets the cancel field to
141 now).
142 <P>If there is an error, returns the error, otherwise returns false.</P>
143 <P></P>
144 <DT><STRONG><A NAME="item_suspend">suspend</A></STRONG><BR>
145 <DD>
146 Suspends all services (see <A HREF=".././FS/cust_svc.html">the FS::cust_svc manpage</A> and <A HREF=".././FS/part_svc.html">the FS::part_svc manpage</A>) in this
147 package, then suspends the package itself (sets the susp field to now).
148 <P>If there is an error, returns the error, otherwise returns false.</P>
149 <P></P>
150 <DT><STRONG><A NAME="item_unsuspend">unsuspend</A></STRONG><BR>
151 <DD>
152 Unsuspends all services (see <A HREF=".././FS/cust_svc.html">the FS::cust_svc manpage</A> and <A HREF=".././FS/part_svc.html">the FS::part_svc manpage</A>) in this
153 package, then unsuspends the package itself (clears the susp field).
154 <P>If there is an error, returns the error, otherwise returns false.</P>
155 <P></P>
156 <DT><STRONG><A NAME="item_part_pkg">part_pkg</A></STRONG><BR>
157 <DD>
158 Returns the definition for this billing item, as an FS::part_pkg object (see
159 <A HREF=".././FS/part_pkg.html">the FS::part_pkg manpage</A>).
160 <P></P>
161 <DT><STRONG><A NAME="item_labels">labels</A></STRONG><BR>
162 <DD>
163 Returns a list of lists, calling the label method for all services
164 (see <A HREF=".././FS/cust_svc.html">the FS::cust_svc manpage</A>) of this billing item.
165 <P></P></DL>
166 <P>
167 <HR>
168 <H1><A NAME="subroutines">SUBROUTINES</A></H1>
169 <DL>
170 <DT><STRONG><A NAME="item_order_CUSTNUM%2C_PKGPARTS_ARYREF%2C_%5B_REMOVE_PKG">order CUSTNUM, PKGPARTS_ARYREF, [ REMOVE_PKGNUMS_ARYREF ]</A></STRONG><BR>
171 <DD>
172 CUSTNUM is a customer (see <A HREF=".././FS/cust_main.html">the FS::cust_main manpage</A>)
173 <P>PKGPARTS is a list of pkgparts specifying the the billing item definitions (see
174 <A HREF=".././FS/part_pkg.html">the FS::part_pkg manpage</A>) to order for this customer.  Duplicates are of course
175 permitted.</P>
176 <P>REMOVE_PKGNUMS is an optional list of pkgnums specifying the billing items to
177 remove for this customer.  The services (see <A HREF=".././FS/cust_svc.html">the FS::cust_svc manpage</A>) are moved to the
178 new billing items.  An error is returned if this is not possible (see
179 <A HREF=".././FS/pkg_svc.html">the FS::pkg_svc manpage</A>).</P>
180 <P></P></DL>
181 <P>
182 <HR>
183 <H1><A NAME="version">VERSION</A></H1>
184 <P>$Id: cust_pkg.html,v 1.3 2001-04-23 12:40:31 ivan Exp $</P>
185 <P>
186 <HR>
187 <H1><A NAME="bugs">BUGS</A></H1>
188 <P>sub order is not OO.  Perhaps it should be moved to FS::cust_main and made so?</P>
189 <P>In sub order, the @pkgparts array (passed by reference) is clobbered.</P>
190 <P>Also in sub order, no money is adjusted.  Once FS::part_pkg defines a standard
191 method to pass dates to the recur_prog expression, it should do so.</P>
192 <P>FS::svc_acct, FS::svc_acct_sm, and FS::svc_domain are loaded via 'use' at 
193 compile time, rather than via 'require' in sub { setup, suspend, unsuspend,
194 cancel } because they use %FS::UID::callback to load configuration values.
195 Probably need a subroutine which decides what to do based on whether or not
196 we've fetched the user yet, rather than a hash.  See FS::UID and the TODO.</P>
197 <P>
198 <HR>
199 <H1><A NAME="see also">SEE ALSO</A></H1>
200 <P><A HREF=".././FS/Record.html">the FS::Record manpage</A>, <A HREF=".././FS/cust_main.html">the FS::cust_main manpage</A>, <A HREF=".././FS/part_pkg.html">the FS::part_pkg manpage</A>, <A HREF=".././FS/cust_svc.html">the FS::cust_svc manpage</A>
201 , <A HREF=".././FS/pkg_svc.html">the FS::pkg_svc manpage</A>, schema.html from the base documentation</P>
202
203 </BODY>
204
205 </HTML>