summaryrefslogtreecommitdiff
path: root/httemplate/edit
diff options
context:
space:
mode:
authorivan <ivan>2008-04-16 00:19:56 +0000
committerivan <ivan>2008-04-16 00:19:56 +0000
commitb286503a0445e77d67b323785a73d4339c1145a9 (patch)
treeb84739673ef8fa6b7b135bf64716ab5d164a9b72 /httemplate/edit
parent6a24254d490f3d023728044daba0765f20f6971e (diff)
new package def editor
Diffstat (limited to 'httemplate/edit')
-rw-r--r--httemplate/edit/elements/edit.html21
-rwxr-xr-xhttemplate/edit/part_pkg.cgi85
-rwxr-xr-xhttemplate/edit/process/part_pkg.cgi22
3 files changed, 83 insertions, 45 deletions
diff --git a/httemplate/edit/elements/edit.html b/httemplate/edit/elements/edit.html
index 150ed8583..4a62ba316 100644
--- a/httemplate/edit/elements/edit.html
+++ b/httemplate/edit/elements/edit.html
@@ -41,10 +41,9 @@ Example:
'm2name_table' => 'table_name',
'm2name_namecol' => 'name_column',
#OR#
- 'm2m_table' =>
- 'm2m_target_table' =>
- 'm2m_srccol' => #opt, if not the same as this table
- 'm2m_dstcol' => #opt, if not the same as target table
+ 'm2m_method' =>
+ #'m2m_srccol' => #opt, if not the same as this table
+ 'm2m_dstcol' => #required for now, eventuaully opt, if not the same as target table
'm2_label' => 'Label', #
'm2_new_default' => \@table_name_objects, #default
@@ -196,7 +195,7 @@ Example:
% $layer_values = &{ $f->{'layer_values_callback'} }( $cgi, $object )
% if $f->{'layer_values_callback'}
% && ! $f->{'m2name_table'}
-% && ! $f->{'m2m_table'};
+% && ! $f->{'m2m_method'};
%
% warn "layer values: ". Dumper($layer_values)
% if $opt{'debug'};
@@ -277,17 +276,15 @@ Example:
%
% my $fieldnum = '';
% my $curr_value = '';
-% if ( $f->{'m2name_table'} || $f->{'m2m_table'} ) { #XXX test this for all
+% if ( $f->{'m2name_table'} || $f->{'m2m_method'} ) { #XXX test this for all
% #types of fields
% my($table, $col);
% if ( $f->{'m2name_table'} ) {
% $table = $f->{'m2name_table'};
% $col = $f->{'m2name_namecol'};
-% } elsif ( $f->{'m2m_table'} ) {
-% $table = $f->{'m2m_table'}; #XXX method name
-% $col = $f->{'m2m_dstcol'}; #XXX or get it from schema, defualt to
-% #same name as primary key of
-% #m2m_target_table
+% } elsif ( $f->{'m2m_method'} ) {
+% $table = $f->{'m2m_method'};
+% $col = $f->{'m2m_dstcol'};
% }
% $fieldnum = 0;
% $layer_prefix_on = 1;
@@ -357,7 +354,7 @@ Example:
<% include( @include ) %>
-% if ( $f->{'m2name_table'} || $f->{'m2m_table'} ) {
+% if ( $f->{'m2name_table'} || $f->{'m2m_method'} ) {
<SCRIPT TYPE="text/javascript">
diff --git a/httemplate/edit/part_pkg.cgi b/httemplate/edit/part_pkg.cgi
index 959fb309b..bc165cf9d 100755
--- a/httemplate/edit/part_pkg.cgi
+++ b/httemplate/edit/part_pkg.cgi
@@ -58,7 +58,7 @@
},
{ field => 'freq',
type => 'part_pkg_freq',
- onchange => 'freq_changed', #XXX enable recurring fee
+ onchange => 'freq_changed',
},
{ field => 'recur_fee',
type => 'money',
@@ -79,12 +79,12 @@
{field=>'taxproductnum', type=>'select-taxproduct' },
{ type => 'tablebreak-tr-title',
- value => 'Promotions', #XXX better name?
+ value => 'Promotions', #better name?
},
{ field=>'promo_code', type=>'text', size=>15 },
{ type => 'tablebreak-tr-title',
- value => 'Line-item revenue recogition', #XXX better name?
+ value => 'Line-item revenue recogition', #better name?
},
{ field=>'pay_weight', type=>'text', size=>6 },
{ field=>'credit_weight', type=>'text', size=>6 },
@@ -105,14 +105,13 @@
{ 'type' => 'tablebreak-tr-title',
'value' => 'Pricing add-ons',
},
- { 'field' => 'bill_dst_pkgpart',
- 'type' => 'select-part_pkg',
- 'm2_label' => 'Include line item(s) from package',
- 'm2m_table' => 'part_pkg_link',
- 'm2m_target_table' => 'part_pkg', #XXX actually just the method name...
- 'm2m_dstcol' => 'dst_pkgpart',
- 'm2m_static_or_something' => { 'link_type' => 'bill' }, #XXX
- 'm2_error_callback' => sub { (); }, #XXX existing!
+ { 'field' => 'bill_dst_pkgpart',
+ 'type' => 'select-part_pkg',
+ 'm2_label' => 'Include line item(s) from package',
+ 'm2m_method' => 'bill_part_pkg_link',
+ 'm2m_dstcol' => 'dst_pkgpart',
+ 'm2_error_callback' =>
+ &{$m2_error_callback_maker}('bill'),
},
{ type => 'tablebreak-tr-title',
@@ -120,15 +119,14 @@
},
{ type => 'pkg_svc', },
- { 'field' => 'svc_dst_pkgpart',
- 'label' => 'Also include services from package: ',
- 'type' => 'select-part_pkg',
- 'm2_label' => 'Include services of package: ',
- 'm2m_table' => 'part_pkg_link',
- 'm2m_target_table' => 'part_pkg', #XXX actually just the method name...
- 'm2m_dstcol' => 'dst_pkgpart',
- 'm2m_static_or_something' => { 'link_type' => 'svc' }, #XXX
- 'm2_error_callback' => sub { (); }, #XXX existing!
+ { 'field' => 'svc_dst_pkgpart',
+ 'label' => 'Also include services from package: ',
+ 'type' => 'select-part_pkg',
+ 'm2_label' => 'Include services of package: ',
+ 'm2m_method' => 'svc_part_pkg_link',
+ 'm2m_dstcol' => 'dst_pkgpart',
+ 'm2_error_callback' =>
+ &{$m2_error_callback_maker}('svc'),
},
{ type => 'tablebreak-tr-title',
@@ -149,10 +147,10 @@ die "access denied"
|| ( $cgi->param('pkgnum') && $curuser->access_right('Customize customer package') );
#XXX
-# - part_pkg.pm bits (need separate access methods not just part_pkg_link)
# - tr-part_pkg_freq: month_increments_only (from price plans)
# - test editing
-# - write edit bits for m2ms
+# - write edit bits for new m2ms
+# - display add-ons in (existing) edit
# - display add-ons in browse... yeah
# -QIS- thank goodness
# - test cloning
@@ -192,7 +190,9 @@ my $error_callback = sub {
}
@options;
- $cgi->param($_, $options{$_}) foreach (qw( setup_fee recur_fee ));
+ #$cgi->param($_, $options{$_}) foreach (qw( setup_fee recur_fee ));
+ $object->set($_ => scalar($cgi->param($_)) )
+ foreach (qw( setup_fee recur_fee ));
};
@@ -201,17 +201,22 @@ my $new_hashref_callback = sub { { 'plan' => 'flat' }; };
my $new_object_callback = sub {
my( $cgi, $hashref, $fields, $opt ) = @_;
+ my $part_pkg = '';
if ( $cgi->param('clone') ) {
$opt->{action} = 'Custom';
- $clone_part_pkg = qsearchs('part_pkg', { 'pkgpart' => $cgi->param('clone') } );
- my $part_pkg = $clone_part_pkg->clone;
+ $clone_part_pkg = qsearchs('part_pkg', { pkgpart=>$cgi->param('clone') } );
+ $part_pkg = $clone_part_pkg->clone;
$part_pkg->disabled('Y');
%options = $clone_part_pkg->options;
- $part_pkg;
} else {
- FS::part_pkg->new( $hashref );
+ $part_pkg = FS::part_pkg->new( $hashref );
}
+ $part_pkg->set($_ => '0')
+ foreach (qw( setup_fee recur_fee ));
+
+ $part_pkg;
+
};
my $edit_callback = sub {
@@ -232,6 +237,9 @@ my $edit_callback = sub {
%options = $object->options;
+ $object->set($_ => $object->option($_))
+ foreach (qw( setup_fee recur_fee ));
+
};
my $new_callback = sub {
@@ -245,6 +253,23 @@ my $new_callback = sub {
};
+my $m2_error_callback_maker = sub {
+ my $link_type = shift; #yay closures
+ return sub {
+ my( $cgi, $object ) = @_;
+ map {
+ new FS::part_pkg_link {
+ 'link_type' => $link_type,
+ 'src_pkgpart' => $object->pkgpart,
+ 'dst_pkgpart' => $_,
+ };
+ }
+ grep $_,
+ map $cgi->param($_),
+ grep /^${link_type}_dst_pkgpart(\d+)$/, $cgi->param;
+ };
+};
+
my $freq_changed = <<'END';
<SCRIPT TYPE="text/javascript">
@@ -341,7 +366,7 @@ my $html_bottom = sub {
) {
my $value = $record->getfield($href->{$field}{'select_key'});
$html .= qq!<OPTION VALUE="$value"!.
- ( $options{$field} =~ /(^|, *)$value *(,|$)/ #XXX fix?
+ ( $options{$field} =~ /(^|, *)$value *(,|$)/ #?
? ' SELECTED'
: ''
).
@@ -351,7 +376,7 @@ my $html_bottom = sub {
foreach my $key ( keys %{ $href->{$field}{'select_options'} } ) {
my $label = $href->{$field}{'select_options'}{$key};
$html .= qq!<OPTION VALUE="$key"!.
- ( $options{$field} =~ /(^|, *)$key *(,|$)/ #XXX fix?
+ ( $options{$field} =~ /(^|, *)$key *(,|$)/ #?
? ' SELECTED'
: ''
).
@@ -373,7 +398,7 @@ my $html_bottom = sub {
foreach my $key ( keys %{ $href->{$field}{'options'} } ) {
my $label = $href->{$field}{'options'}{$key};
$html .= qq!$radio VALUE="$key"!.
- ( $options{$field} =~ /(^|, *)$key *(,|$)/ #XXX fix?
+ ( $options{$field} =~ /(^|, *)$key *(,|$)/ #?
? ' CHECKED'
: ''
).
diff --git a/httemplate/edit/process/part_pkg.cgi b/httemplate/edit/process/part_pkg.cgi
index be6e2f85b..290c6f7bc 100755
--- a/httemplate/edit/process/part_pkg.cgi
+++ b/httemplate/edit/process/part_pkg.cgi
@@ -84,7 +84,8 @@ my $args_callback = sub {
}
@options;
- $options{$_} = scalar($cgi->param($_)) for (qw( setup_fee recur_fee ));
+ $options{$_} = scalar( $cgi->param($_) )
+ for (qw( setup_fee recur_fee ));
push @args, 'options' => \%options;
@@ -110,6 +111,8 @@ my $args_callback = sub {
};
+#these should probably move to @args above and be processed by part_pkg.pm...
+
$cgi->param('tax_override') =~ /^([\d,]+)$/;
my (@tax_overrides) = (grep "$_", split (",", $1));
@@ -118,7 +121,21 @@ my @process_m2m = (
'link_table' => 'part_pkg_taxoverride',
'target_table' => 'tax_class',
'params' => \@tax_overrides,
- }
+ },
+ { 'link_table' => 'part_pkg_link',
+ 'target_table' => 'part_pkg',
+ 'base_field' => 'src_pkgpart',
+ 'target_field' => 'dst_pkgpart',
+ 'hashref' => { 'link_type' => 'bill' },
+ 'params' => [ map $cgi->param($_), grep /^bill_dst_pkgpart/, $cgi->param ],
+ },
+ { 'link_table' => 'part_pkg_link',
+ 'target_table' => 'part_pkg',
+ 'base_field' => 'src_pkgpart',
+ 'target_field' => 'dst_pkgpart',
+ 'hashref' => { 'link_type' => 'svc' },
+ 'params' => [ map $cgi->param($_), grep /^svc_dst_pkgpart/, $cgi->param ],
+ },
);
my $conf = new FS::Conf;
@@ -129,7 +146,6 @@ if ( $cgi->param('pkgpart') || ! $conf->exists('agent_defaultpkg') ) {
/^(\d+)$/;
push @agents, $1 if $1;
}
- warn "AGENTS: @agents";
push @process_m2m, {
'link_table' => 'type_pkgs',
'target_table' => 'agent_type',