=over 4
+=item billpkgnum - primary key
+
=item invnum - invoice (see L<FS::cust_bill>)
=item pkgnum - package (see L<FS::cust_pkg>) or 0 for the special virtual sales tax package
my $self = shift;
my $error =
- $self->ut_number('pkgnum')
+ $self->ut_numbern('billpkgnum')
+ || $self->ut_number('pkgnum')
|| $self->ut_number('invnum')
|| $self->ut_money('setup')
|| $self->ut_money('recur')
sub check {
my $self = shift;
my $error =
- $self->ut_foreign_key('svcpart', 'part_svc', 'svcpart')
+ $self->ut_numbern('svcrouternum')
+ || $self->ut_foreign_key('svcpart', 'part_svc', 'svcpart')
|| $self->ut_foreign_key('routernum', 'router', 'routernum');
return $error if $error;
''; #no error
=over 4
+=item pkgsvcnum - primary key
+
=item pkgpart - Billing item definition (see L<FS::part_pkg>)
=item svcpart - Service definition (see L<FS::part_svc>)
my $error;
$error =
- $self->ut_number('pkgpart')
+ $self->ut_numbern('pkgsvcnum')
+ || $self->ut_number('pkgpart')
|| $self->ut_number('svcpart')
|| $self->ut_number('quantity')
;
=over 4
+=item ratedetailnum - primary key
+
=item ratenum - rate plan (see L<FS::rate>)
=item orig_regionnum - call origination region
my $self = shift;
my $error =
- $self->ut_foreign_key('ratenum', 'rate', 'ratenum')
+ $self->ut_numbern('ratedetailnum')
+ || $self->ut_foreign_key('ratenum', 'rate', 'ratenum')
|| $self->ut_foreign_keyn('orig_regionnum', 'rate_region', 'regionnum' )
|| $self->ut_foreign_key('dest_regionnum', 'rate_region', 'regionnum' )
|| $self->ut_number('min_included')
=over 4
+=item codepkgnum - primary key
+
=item codenum - registration code (see L<FS::reg_code>)
=item pkgpart - package definition (see L<FS::part_pkg>)
my $self = shift;
my $error =
- $self->ut_foreign_key('codenum', 'reg_code', 'codenum')
+ $self->ut_numbern('codepkgnum')
+ || $self->ut_foreign_key('codenum', 'reg_code', 'codenum')
|| $self->ut_foreign_key('pkgpart', 'part_pkg', 'pkgpart')
;
return $error if $error;
=over 4
+=item typepkgnum - primary key
+
=item typenum - Agent type, see L<FS::agent_type>
=item pkgpart - Billing item definition, see L<FS::part_pkg>
my $self = shift;
my $error =
- $self->ut_number('typenum')
+ $self->ut_numbern('typepkgnum')
+ || $self->ut_number('typenum')
|| $self->ut_number('pkgpart')
;
return $error if $error;
'type_pkgs' => {
'columns' => [
+ 'typepkgnum', 'serial', '', '',
'typenum', 'int', '', '',
'pkgpart', 'int', '', '',
],
- 'primary_key' => '',
+ 'primary_key' => 'typepkgnum',
'unique' => [ ['typenum', 'pkgpart'] ],
'index' => [ ['typenum'] ],
},
'cust_bill_pkg' => {
'columns' => [
+ 'billpkgnum', 'serial', '', '',
'pkgnum', 'int', '', '',
'invnum', 'int', '', '',
'setup', @money_type,
'edate', @date_type,
'itemdesc', 'varchar', 'NULL', $char_d,
],
- 'primary_key' => '',
+ 'primary_key' => 'billpkgnum',
'unique' => [],
'index' => [ ['invnum'] ],
},
'pkg_svc' => {
'columns' => [
+ 'pkgsvcnum', 'serial', '', '',
'pkgpart', 'int', '', '',
'svcpart', 'int', '', '',
'quantity', 'int', '', '',
'primary_svc','char', 'NULL', 1,
],
- 'primary_key' => '',
+ 'primary_key' => 'pkgsvcnum',
'unique' => [ ['pkgpart', 'svcpart'] ],
'index' => [ ['pkgpart'] ],
},
'part_svc_router' => {
'columns' => [
+ 'svcrouternum', 'serial', '', '',
'svcpart', 'int', '', '',
'routernum', 'int', '', '',
],
- 'primary_key' => '',
+ 'primary_key' => 'svcrouternum',
'unique' => [],
'index' => [],
},
'virtual_field' => {
'columns' => [
+ 'vfieldnum', 'serial', '', '',
'recnum', 'int', '', '',
'vfieldpart', 'int', '', '',
'value', 'varchar', '', 128,
],
- 'primary_key' => '',
+ 'primary_key' => 'vfieldnum',
'unique' => [ [ 'vfieldpart', 'recnum' ] ],
'index' => [],
},
'rate_detail' => {
'columns' => [
+ 'ratedetailnum', 'serial', '', '',
'ratenum', 'int', '', '',
'orig_regionnum', 'int', 'NULL', '',
'dest_regionnum', 'int', '', '',
'sec_granularity', 'int', '', '',
#time period (link to table of periods)?
],
- 'primary_key' => '',
+ 'primary_key' => 'ratedetailnum',
'unique' => [ [ 'ratenum', 'orig_regionnum', 'dest_regionnum' ] ],
'index' => [],
},
'reg_code_pkg' => {
'columns' => [
+ 'codepkgnum', 'serial', '', '',
'codenum', 'int', '', '',
'pkgpart', 'int', '', '',
],
- 'primary_key' => '',
+ 'primary_key' => 'codepkgnum',
'unique' => [ [ 'codenum', 'pkgpart' ] ],
'index' => [ [ 'codenum' ] ],
},
);
CREATE TABLE rate_detail (
+ ratedetailnum serial NOT NULL,
ratenum int NOT NULL,
orig_regionnum int NULL,
dest_regionnum int NOT NULL,
CREATE INDEX reg_code2 ON reg_code ( agentnum );
CREATE TABLE reg_code_pkg (
+ codepkgnum serial,
codenum int NOT NULL,
- pkgpart int NOT NULL
+ pkgpart int NOT NULL,
+ PRIMARY KEY (codepkgnum)
);
CREATE UNIQUE INDEX reg_code_pkg1 ON reg_code_pkg ( codenum, pkgpart );
CREATE INDEX reg_code_pkg2 ON reg_code_pkg ( codenum );
ALTER TABLE prepay_credit ADD agentnum integer NULL;
ALTER TABLE h_prepay_credit ADD agentnum integer NULL;
+ALTER TABLE type_pkgs ADD typepkgnum int;
+ALTER TABLE type_pkgs ALTER COLUMN typepkgnum SET DEFAULT nextval('public.type_pkgs_typepkgnum_seq'::text);
+CREATE SEQUENCE type_pkgs_typepkgnum_seq;
+ALTER TABLE type_pkgs ALTER typepkgnum SET NOT NULL;
+ALTER TABLE type_pkgs ADD PRIMARY KEY (typepkgnum);
+
+ALTER TABLE cust_bill_pkg ADD billpkgnum int;
+ALTER TABLE cust_bill_pkg ALTER COLUMN billpkgnum SET DEFAULT nextval('public.cust_bill_pkg_billpkgnum_seq'::text);
+CREATE SEQUENCE cust_bill_pkg_billpkgnum_seq;
+ALTER TABLE cust_bill_pkg ALTER billpkgnum SET NOT NULL;
+ALTER TABLE cust_bill_pkg ADD PRIMARY KEY (billpkgnum);
+
+ALTER TABLE pkg_svc ADD pkgsvcnum int;
+ALTER TABLE pkg_svc ALTER COLUMN pkgsvcnum SET DEFAULT nextval('public.pkg_svc_pkgsvcnum_seq'::text);
+CREATE SEQUENCE pkg_svc_pkgsvcnum_seq;
+ALTER TABLE pkg_svc ALTER pkgsvcnum SET NOT NULL;
+ALTER TABLE pkg_svc ADD PRIMARY KEY (pkgsvcnum);
+
+ALTER TABLE part_svc_router ADD svcrouternum int;
+ALTER TABLE part_svc_router ALTER COLUMN svcrouternum SET DEFAULT nextval('public.part_svc_router_svcrouternum_seq'::text);
+CREATE SEQUENCE part_svc_router_svcrouternum_seq;
+ALTER TABLE part_svc_router ALTER svcrouternum SET NOT NULL;
+ALTER TABLE part_svc_router ADD PRIMARY KEY (svcrouternum);
+
Installs w/integrated RT:
CREATE SEQUENCE attributes_id_seq;
--- /dev/null
+this is ONLY for people upgrading from CVS snapshots after march 12th who
+have most of the changes in README.1.5.7 already.
+
+if you're upgrading from 1.5.0pre6, see README.1.5.7 instead.
+
+if you're upgrading from 1.4.x, see httemplate/docs/upgrade10.html instead.
+
+
+ALTER TABLE rate_detail ADD COLUMN ratedetailnum int;
+ALTER TABLE rate_detail ALTER COLUMN ratedetailnum SET DEFAULT nextval('public.rate_detail_ratedetailnum_seq'::text);
+CREATE SEQUENCE rate_detail_ratedetailnum_seq;
+ALTER TABLE rate_detail ALTER ratedetailnum SET NOT NULL;
+ALTER TABLE rate_detail ADD PRIMARY KEY (ratedetailnum);
+
+ALTER TABLE type_pkgs ADD typepkgnum int;
+ALTER TABLE type_pkgs ALTER COLUMN typepkgnum SET DEFAULT nextval('public.type_pkgs_typepkgnum_seq'::text);
+CREATE SEQUENCE type_pkgs_typepkgnum_seq;
+ALTER TABLE type_pkgs ALTER typepkgnum SET NOT NULL;
+ALTER TABLE type_pkgs ADD PRIMARY KEY (typepkgnum);
+
+ALTER TABLE cust_bill_pkg ADD billpkgnum int;
+ALTER TABLE cust_bill_pkg ALTER COLUMN billpkgnum SET DEFAULT nextval('public.cust_bill_pkg_billpkgnum_seq'::text);
+CREATE SEQUENCE cust_bill_pkg_billpkgnum_seq;
+ALTER TABLE cust_bill_pkg ALTER billpkgnum SET NOT NULL;
+ALTER TABLE cust_bill_pkg ADD PRIMARY KEY (billpkgnum);
+
+ALTER TABLE pkg_svc ADD pkgsvcnum int;
+ALTER TABLE pkg_svc ALTER COLUMN pkgsvcnum SET DEFAULT nextval('public.pkg_svc_pkgsvcnum_seq'::text);
+CREATE SEQUENCE pkg_svc_pkgsvcnum_seq;
+ALTER TABLE pkg_svc ALTER pkgsvcnum SET NOT NULL;
+ALTER TABLE pkg_svc ADD PRIMARY KEY (pkgsvcnum);
+
+ALTER TABLE part_svc_router ADD svcrouternum int;
+ALTER TABLE part_svc_router ALTER COLUMN svcrouternum SET DEFAULT nextval('public.part_svc_router_svcrouternum_seq'::text);
+CREATE SEQUENCE part_svc_router_svcrouternum_seq;
+ALTER TABLE part_svc_router ALTER svcrouternum SET NOT NULL;
+ALTER TABLE part_svc_router ADD PRIMARY KEY (svcrouternum);
+
+ALTER TABLE reg_code_pkg ADD codepkgnum int;
+ALTER TABLE reg_code_pkg ALTER COLUMN codepkgnum SET DEFAULT nextval('public.reg_code_pkg_codepkgnum_seq'::text);
+CREATE SEQUENCE reg_code_pkg_codepkgnum_seq;
+ALTER TABLE reg_code_pkg ALTER codepkgnum SET NOT NULL;
+ALTER TABLE reg_code_pkg ADD PRIMARY KEY (codepkgnum);
+
+ALTER TABLE virtual_field ADD vfieldnum int;
+ALTER TABLE virtual_field ALTER COLUMN vfieldnum SET DEFAULT nextval('public.virtual_field_vfieldnum_seq'::text);
+CREATE SEQUENCE virtual_field_vfieldnum_seq;
+ALTER TABLE virtual_field ALTER vfieldnum SET NOT NULL;
+ALTER TABLE virtual_field ADD PRIMARY KEY (vfieldnum);
+
</ul>
<li><a name="cust_bill" href="man/FS/cust_bill.html">cust_bill</a> - Invoices. Declarations that a customer owes you money. The specific charges are itemized in <a href="#cust_bill_pkg">cust_bill_pkg</a>.
<ul>
+ <li>billpkgnum - primary_key
<li>invnum - primary key
<li>custnum - <a href="#cust_main">customer</a>
<li>_date
</ul>
<li><a name="reg_code_pkg" href="man/FS/reg_code_pkg.html">reg_code_pkg</A> - Registration code link to package definitions
<ul>
+ <li>codepkgnum - primary key
<li>codenum - <a href="#reg_code">Registration code</a>
<li>pkgpart - <a href="#part_pkg">Package definition</a>
</ul>
</ul>
<li><a name="pkg_svc" href="man/FS/pkg_svc.html">pkg_svc</a>
<ul>
+ <li>pkgsvcnum - primary key
<li>pkgpart - <a href="#part_pkg">Package definition</a>
<li>svcpart - <a href="#part_svc">Service definition</a>
<li>quantity - quantity of this service that this package includes
</ul>
<li><a name="type_pkgs" href="man/FS/type_pkgs.html">type_pkgs</a>
<ul>
+ <li>typepkgnum - primary key
<li>typenum - <a href="#agent_type">agent type</a>
<li>pkgpart - <a href="#part_pkg">Package definition</a>
</ul>
</ul>
<li><a name="rate_detail" href="man/FS/rate_detail.html">rate_detail</a> - Call rate detail
<ul>
+ <li>ratedetailnum - primary key
<li>ratenum - <a href="#rate">rate plan</a>
<li>orig_regionnum - call origination <a href="#rate_region">region</a>
<li>dest_regionnum - call destination <a href="#rate_region">region</a>
);
CREATE TABLE part_svc_router (
+ svcrouternum serial,
svcpart int NOT NULL,
- routernum int NOT NULL
+ routernum int NOT NULL,
+ PRIMARY KEY (svcrouternum),
);
CREATE TABLE addr_block (
CREATE INDEX cust_pay_void1 ON cust_pay_void(custnum);
CREATE TABLE part_pkg_option (
- optionnum int primary key,
+ optionnum serial,
pkgpart int not null,
optionname varchar(80) not null,
optionvalue text NULL
+ PRIMARY KEY (optionnum),
);
CREATE INDEX part_pkg_option1 ON part_pkg_option ( pkgpart );
CREATE INDEX part_pkg_option2 ON part_pkg_option ( optionname );
);
CREATE TABLE rate_detail (
+ ratedetailnum serial NOT NULL,
ratenum int NOT NULL,
orig_regionnum int NULL,
dest_regionnum int NOT NULL,
min_included int NOT NULL,
min_charge decimal(10,2) NOT NULL,
- sec_granularity int NOT NULL
+ sec_granularity int NOT NULL,
+ PRIMARY KEY (ratedetailnum)
);
CREATE UNIQUE INDEX rate_detail1 ON rate_detail ( ratenum, orig_regionnum, dest_regionnum );
CREATE INDEX reg_code2 ON reg_code ( agentnum );
CREATE TABLE reg_code_pkg (
+ codepkgnum serial,
codenum int NOT NULL,
pkgpart int NOT NULL
+ PRIMARY KEY (codepkgnum)
);
CREATE UNIQUE INDEX reg_code_pkg1 ON reg_code_pkg ( codenum, pkgpart );
CREATE INDEX reg_code_pkg2 ON reg_code_pkg ( codenum );
ALTER TABLE prepay_credit ADD agentnum integer NULL;
ALTER TABLE h_prepay_credit ADD agentnum integer NULL;
+ALTER TABLE type_pkgs ADD typepkgnum int;
+ALTER TABLE type_pkgs ALTER COLUMN typepkgnum SET DEFAULT nextval('public.type_pkgs_typepkgnum_seq'::text);
+CREATE SEQUENCE type_pkgs_typepkgnum_seq;
+ALTER TABLE type_pkgs ALTER typepkgnum SET NOT NULL;
+ALTER TABLE type_pkgs ADD PRIMARY KEY (typepkgnum);
+
+ALTER TABLE cust_bill_pkg ADD billpkgnum int;
+ALTER TABLE cust_bill_pkg ALTER COLUMN billpkgnum SET DEFAULT nextval('public.cust_bill_pkg_billpkgnum_seq'::text);
+CREATE SEQUENCE cust_bill_pkg_billpkgnum_seq;
+ALTER TABLE cust_bill_pkg ALTER billpkgnum SET NOT NULL;
+ALTER TABLE cust_bill_pkg ADD PRIMARY KEY (billpkgnum);
+
+ALTER TABLE pkg_svc ADD pkgsvcnum int;
+ALTER TABLE pkg_svc ALTER COLUMN pkgsvcnum SET DEFAULT nextval('public.pkg_svc_pkgsvcnum_seq'::text);
+CREATE SEQUENCE pkg_svc_pkgsvcnum_seq;
+ALTER TABLE pkg_svc ALTER pkgsvcnum SET NOT NULL;
+ALTER TABLE pkg_svc ADD PRIMARY KEY (pkgsvcnum);
+
On recent Pg versions:
ALTER TABLE svc_forward ALTER COLUMN srcsvc DROP NOT NULL;