+sub part_pkg {
+ my $self = shift;
+ qsearchs('part_pkg', { 'pkgpart' => $self->pkgpart } );
+}
+
+sub desc {
+ my $self = shift;
+ $self->part_pkg->pkg;
+}
+
+sub setup {
+ my $self = shift;
+ return '0.00' if $self->waive_setup eq 'Y';
+ my $part_pkg = $self->part_pkg;
+ #my $setup = $part_pkg->can('base_setup') ? $part_pkg->base_setup
+ # : $part_pkg->option('setup_fee');
+ my $setup = $part_pkg->option('setup_fee');
+ #XXX discounts
+ $setup *= $self->quantity if $self->quantity;
+ sprintf('%.2f', $setup);
+
+}
+
+sub recur {
+ my $self = shift;
+ my $part_pkg = $self->part_pkg;
+ my $recur = $part_pkg->can('base_recur') ? $part_pkg->base_recur
+ : $part_pkg->option('recur_fee');
+ #XXX discounts
+ $recur *= $self->quantity if $self->quantity;
+ sprintf('%.2f', $recur);
+}
+