summaryrefslogtreecommitdiff
path: root/httemplate/docs/man/FS/cust_pkg.html
blob: 9f1005da7a19d1c8e2f5642f4c251e2eb6a402c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
<HTML>
<HEAD>
<TITLE>FS::cust_pkg - Object methods for cust_pkg objects</TITLE>
<LINK REV="made" HREF="mailto:perl@packages.debian.org">
</HEAD>

<BODY>

<A NAME="__index__"></A>
<!-- INDEX BEGIN -->

<UL>

	<LI><A HREF="#name">NAME</A></LI>
	<LI><A HREF="#synopsis">SYNOPSIS</A></LI>
	<LI><A HREF="#description">DESCRIPTION</A></LI>
	<LI><A HREF="#methods">METHODS</A></LI>
	<LI><A HREF="#subroutines">SUBROUTINES</A></LI>
	<LI><A HREF="#version">VERSION</A></LI>
	<LI><A HREF="#bugs">BUGS</A></LI>
	<LI><A HREF="#see also">SEE ALSO</A></LI>
</UL>
<!-- INDEX END -->

<HR>
<P>
<H1><A NAME="name">NAME</A></H1>
<P>FS::cust_pkg - Object methods for cust_pkg objects</P>
<P>
<HR>
<H1><A NAME="synopsis">SYNOPSIS</A></H1>
<PRE>
  use FS::cust_pkg;</PRE>
<PRE>
  $record = new FS::cust_pkg \%hash;
  $record = new FS::cust_pkg { 'column' =&gt; 'value' };</PRE>
<PRE>
  $error = $record-&gt;insert;</PRE>
<PRE>
  $error = $new_record-&gt;replace($old_record);</PRE>
<PRE>
  $error = $record-&gt;delete;</PRE>
<PRE>
  $error = $record-&gt;check;</PRE>
<PRE>
  $error = $record-&gt;cancel;</PRE>
<PRE>
  $error = $record-&gt;suspend;</PRE>
<PRE>
  $error = $record-&gt;unsuspend;</PRE>
<PRE>
  $part_pkg = $record-&gt;part_pkg;</PRE>
<PRE>
  @labels = $record-&gt;labels;</PRE>
<PRE>
  $seconds = $record-&gt;seconds_since($timestamp);</PRE>
<PRE>
  $error = FS::cust_pkg::order( $custnum, \@pkgparts );
  $error = FS::cust_pkg::order( $custnum, \@pkgparts, \@remove_pkgnums ] );</PRE>
<P>
<HR>
<H1><A NAME="description">DESCRIPTION</A></H1>
<P>An FS::cust_pkg object represents a customer billing item.  FS::cust_pkg
inherits from FS::Record.  The following fields are currently supported:</P>
<DL>
<DT><STRONG><A NAME="item_key">pkgnum - primary key (assigned automatically for new billing items)</A></STRONG><BR>
<DD>
<DT><STRONG><A NAME="item_Customer">custnum - Customer (see <A HREF=".././FS/cust_main.html">the FS::cust_main manpage</A>)</A></STRONG><BR>
<DD>
<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>
<DD>
<DT><STRONG><A NAME="item_setup_%2D_date">setup - date</A></STRONG><BR>
<DD>
<DT><STRONG><A NAME="item_bill_%2D_date">bill - date</A></STRONG><BR>
<DD>
<DT><STRONG><A NAME="item_susp_%2D_date">susp - date</A></STRONG><BR>
<DD>
<DT><STRONG><A NAME="item_expire_%2D_date">expire - date</A></STRONG><BR>
<DD>
<DT><STRONG><A NAME="item_cancel_%2D_date">cancel - date</A></STRONG><BR>
<DD>
<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>
<DD>
<DT><STRONG><A NAME="item_manual_flag_%2D_If_this_field_is_set_to_1%2C_disab">manual_flag - If this field is set to 1, disables the automatic
unsuspension of this package when using the <STRONG>unsuspendauto</STRONG> config file.</A></STRONG><BR>
<DD>
</DL>
<P>Note: setup, bill, susp, expire and cancel are specified as UNIX timestamps;
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
conversion functions.</P>
<P>
<HR>
<H1><A NAME="methods">METHODS</A></H1>
<DL>
<DT><STRONG><A NAME="item_new">new HASHREF</A></STRONG><BR>
<DD>
Create a new billing item.  To add the item to the database, see <A HREF="#insert">insert</A>.
<P></P>
<DT><STRONG><A NAME="item_insert">insert</A></STRONG><BR>
<DD>
Adds this billing item to the database (``Orders'' the item).  If there is an
error, returns the error, otherwise returns false.
<P></P>
<DT><STRONG><A NAME="item_delete">delete</A></STRONG><BR>
<DD>
This method now works but you probably shouldn't use it.
<P>You don't want to delete billing items, because there would then be no record
the customer ever purchased the item.  Instead, see the cancel method.</P>
<P></P>
<DT><STRONG><A NAME="item_replace_OLD_RECORD">replace OLD_RECORD</A></STRONG><BR>
<DD>
Replaces the OLD_RECORD with this one in the database.  If there is an error,
returns the error, otherwise returns false.
<P>Currently, custnum, setup, bill, susp, expire, and cancel may be changed.</P>
<P>Changing pkgpart may have disasterous effects.  See the order subroutine.</P>
<P>setup and bill are normally updated by calling the bill method of a customer
object (see <A HREF=".././FS/cust_main.html">the FS::cust_main manpage</A>).</P>
<P>suspend is normally updated by the suspend and unsuspend methods.</P>
<P>cancel is normally updated by the cancel method (and also the order subroutine
in some cases).</P>
<P></P>
<DT><STRONG><A NAME="item_check">check</A></STRONG><BR>
<DD>
Checks all fields to make sure this is a valid billing item.  If there is an
error, returns the error, otherwise returns false.  Called by the insert and
replace methods.
<P></P>
<DT><STRONG><A NAME="item_cancel">cancel</A></STRONG><BR>
<DD>
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>)
in this package, then cancels the package itself (sets the cancel field to
now).
<P>If there is an error, returns the error, otherwise returns false.</P>
<P></P>
<DT><STRONG><A NAME="item_suspend">suspend</A></STRONG><BR>
<DD>
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
package, then suspends the package itself (sets the susp field to now).
<P>If there is an error, returns the error, otherwise returns false.</P>
<P></P>
<DT><STRONG><A NAME="item_unsuspend">unsuspend</A></STRONG><BR>
<DD>
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
package, then unsuspends the package itself (clears the susp field).
<P>If there is an error, returns the error, otherwise returns false.</P>
<P></P>
<DT><STRONG><A NAME="item_part_pkg">part_pkg</A></STRONG><BR>
<DD>
Returns the definition for this billing item, as an FS::part_pkg object (see
<A HREF=".././FS/part_pkg.html">the FS::part_pkg manpage</A>).
<P></P>
<DT><STRONG><A NAME="item_cust_svc">cust_svc</A></STRONG><BR>
<DD>
Returns the services for this package, as FS::cust_svc objects (see
<A HREF=".././FS/cust_svc.html">the FS::cust_svc manpage</A>)
<P></P>
<DT><STRONG><A NAME="item_labels">labels</A></STRONG><BR>
<DD>
Returns a list of lists, calling the label method for all services
(see <A HREF=".././FS/cust_svc.html">the FS::cust_svc manpage</A>) of this billing item.
<P></P>
<DT><STRONG><A NAME="item_cust_main">cust_main</A></STRONG><BR>
<DD>
Returns the parent customer object (see <A HREF=".././FS/cust_main.html">the FS::cust_main manpage</A>).
<P></P>
<DT><STRONG><A NAME="item_seconds_since_TIMESTAMP">seconds_since TIMESTAMP</A></STRONG><BR>
<DD>
Returns the number of seconds all accounts (see <A HREF=".././FS/svc_acct.html">the FS::svc_acct manpage</A>) in this
package have been online since TIMESTAMP.
<P>TIMESTAMP is specified as a UNIX timestamp; 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 conversion functions.</P>
<P></P></DL>
<P>
<HR>
<H1><A NAME="subroutines">SUBROUTINES</A></H1>
<DL>
<DT><STRONG><A NAME="item_order_CUSTNUM%2C_PKGPARTS_ARYREF%2C_%5B_REMOVE_PKG">order CUSTNUM, PKGPARTS_ARYREF, [ REMOVE_PKGNUMS_ARYREF [ RETURN_CUST_PKG_ARRAYREF ] ]</A></STRONG><BR>
<DD>
CUSTNUM is a customer (see <A HREF=".././FS/cust_main.html">the FS::cust_main manpage</A>)
<P>PKGPARTS is a list of pkgparts specifying the the billing item definitions (see
<A HREF=".././FS/part_pkg.html">the FS::part_pkg manpage</A>) to order for this customer.  Duplicates are of course
permitted.</P>
<P>REMOVE_PKGNUMS is an optional list of pkgnums specifying the billing items to
remove for this customer.  The services (see <A HREF=".././FS/cust_svc.html">the FS::cust_svc manpage</A>) are moved to the
new billing items.  An error is returned if this is not possible (see
<A HREF=".././FS/pkg_svc.html">the FS::pkg_svc manpage</A>).  An empty arrayref is equivalent to not specifying this
parameter.</P>
<P>RETURN_CUST_PKG_ARRAYREF, if specified, will be filled in with the
newly-created cust_pkg objects.</P>
<P></P></DL>
<P>
<HR>
<H1><A NAME="version">VERSION</A></H1>
<P>$Id: cust_pkg.html,v 1.2 2002-01-29 16:33:15 ivan Exp $</P>
<P>
<HR>
<H1><A NAME="bugs">BUGS</A></H1>
<P>sub order is not OO.  Perhaps it should be moved to FS::cust_main and made so?</P>
<P>In sub order, the @pkgparts array (passed by reference) is clobbered.</P>
<P>Also in sub order, no money is adjusted.  Once FS::part_pkg defines a standard
method to pass dates to the recur_prog expression, it should do so.</P>
<P>FS::svc_acct, FS::svc_acct_sm, and FS::svc_domain are loaded via 'use' at 
compile time, rather than via 'require' in sub { setup, suspend, unsuspend,
cancel } because they use %FS::UID::callback to load configuration values.
Probably need a subroutine which decides what to do based on whether or not
we've fetched the user yet, rather than a hash.  See FS::UID and the TODO.</P>
<P>Now that things are transactional should the check in the insert method be
moved to check ?</P>
<P>
<HR>
<H1><A NAME="see also">SEE ALSO</A></H1>
<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>,
<A HREF=".././FS/pkg_svc.html">the FS::pkg_svc manpage</A>, schema.html from the base documentation</P>

</BODY>

</HTML>