summaryrefslogtreecommitdiff
path: root/httemplate
diff options
context:
space:
mode:
authorlevinse <levinse>2011-04-06 08:24:27 +0000
committerlevinse <levinse>2011-04-06 08:24:27 +0000
commit31f2e890b5b3e1b0ad29a877ff67bc641ea1fc40 (patch)
tree1cf3150f90efb5f0cf97055743ba0d22e47b3713 /httemplate
parent2daf4c6c460e66d67839ad48f4b050be181e109f (diff)
bulk DID order/inventory improvements, RT11291
Diffstat (limited to 'httemplate')
-rw-r--r--httemplate/browse/did_order.html26
-rw-r--r--httemplate/edit/did_order.html95
-rw-r--r--httemplate/edit/elements/edit.html3
-rw-r--r--httemplate/edit/process/did_order.html6
-rw-r--r--httemplate/elements/did_order_item.html69
-rw-r--r--httemplate/elements/tr-did_order_item.html24
-rw-r--r--httemplate/misc/phone_avail-import.html38
7 files changed, 217 insertions, 44 deletions
diff --git a/httemplate/browse/did_order.html b/httemplate/browse/did_order.html
index 54c2bd3fc..e844169b3 100644
--- a/httemplate/browse/did_order.html
+++ b/httemplate/browse/did_order.html
@@ -4,15 +4,16 @@
'name' => 'bulk DID orders',
'disableable' => 0,
'query' => { 'table' => 'did_order',
- 'addl_from' => 'left join did_vendor using (vendornum)
- left join lata using (latanum)',
+ 'addl_from' => 'left join did_vendor using (vendornum) ',
'hashref' => {},
'order_by' => 'ORDER BY ordernum',
},
'count_query' => $count_query,
'header' => $header,
'fields' => $fields,
- 'links' => $links,
+ 'links' => [
+ [ $p.'edit/did_order.html?', 'ordernum' ],
+ ],
)
%>
<%init>
@@ -28,31 +29,22 @@ my $html_init =
my $count_query = 'SELECT COUNT(*) FROM did_order';
-my $link = [ $p.'edit/did_order.html?', 'ordernum' ];
-
my $display_date = sub {
my $date = shift;
return '' unless $date;
time2str($date_format, $date);
};
-my $header = [ '#', 'Vendor',' Vendor Order #', 'MSA', 'LATA #', 'LATA',
- 'Rate Center', 'State', 'Quantity', 'Submitted', 'Confirmed',
- 'Received',
+my $header = [ '#', 'Vendor',' Vendor Order #',
+ 'Submitted', 'Confirmed', 'Customer', 'Received',
];
-my $links = [ ];
my $fields = [ sub {
my $did_order = shift;
- if($did_order->received) {
- push @$links, $link;
- }
- else {
- return $did_order->ordernum;
- }
- }, 'vendorname', 'vendor_order_id', 'msa', 'latanum',
- 'description', 'rate_center', 'state', 'quantity',
+ $did_order->ordernum;
+ }, 'vendorname', 'vendor_order_id',
sub { &$display_date(shift->submitted); },
sub { &$display_date(shift->confirmed); },
+ 'custnum',
sub {
my $did_order = shift;
my $ordernum = $did_order->ordernum;
diff --git a/httemplate/edit/did_order.html b/httemplate/edit/did_order.html
index a9bece9b1..25e38c72e 100644
--- a/httemplate/edit/did_order.html
+++ b/httemplate/edit/did_order.html
@@ -6,39 +6,54 @@
table => 'did_vendor',
disable_empty => 1,
},
- 'vendor_order_id',
- 'msa',
- { field => 'latanum',
- type => 'select-table',
- name_col => 'description',
- table => 'lata',
- disable_empty => 1,
- label_showkey => 1,
- },
- 'rate_center',
- { field => 'state',
- type => 'select-state',
- country => 'US',
- },
- 'quantity',
+ { field => 'vendor_order_id',
+ type => 'hidden',
+ },
{ field => 'confirmed',
- type => 'input-date-field',
+ type => 'hidden',
},
+ 'custnum',
+ { type => 'tablebreak-tr-title',
+ value => 'Order Items',
+ },
+ { 'field' => 'orderitemnum',
+ 'type' => 'did_order_item',
+ 'o2m_table' => 'did_order_item',
+ 'm2_label' => 'Item',
+ 'm2_error_callback' => $m2_error_callback,
+ },
+ #'msa',
+ #{ field => 'latanum',
+ # type => 'select-table',
+ # name_col => 'description',
+ # table => 'lata',
+ # disable_empty => 1,
+ # label_showkey => 1,
+ #},
+ #'rate_center',
+ #{ field => 'state',
+ # type => 'select-state',
+ # country => 'US',
+ #},
+ #'quantity',
],
'labels' => {
'ordernum' => 'Order',
'vendornum' => 'Vendor',
'vendor_order_id' => 'Vendor Order #',
- 'msa' => 'MSA',
- 'latanum' => 'LATA',
- 'rate_center' => 'Rate Center',
- 'state' => 'State',
- 'quantity' => 'Quantity',
+ 'custnum' => 'Customer',
+ #'msa' => 'MSA',
+ #'latanum' => 'LATA',
+ #'rate_center' => 'Rate Center',
+ #'state' => 'State',
+ #'quantity' => 'Quantity',
'confirmed' => 'Confirmation Date',
+ 'orderitemnum' => 'Item',
},
'viewall_dir' => 'browse',
'table' => 'did_order',
'name' => 'Bulk DID Order',
+ 'field_callback' => $field_callback,
)
%>
@@ -47,4 +62,42 @@
die "access denied"
unless $FS::CurrentUser::CurrentUser->access_right('Import');
+
+my $field_callback = sub {
+ my ($cgi, $object, $field_hashref ) = @_;
+ if ($object->ordernum) {
+ $field_hashref->{type} = 'text'
+ if $field_hashref->{field} eq 'vendor_order_id';
+ $field_hashref->{type} = 'input-date-field'
+ if $field_hashref->{field} eq 'confirmed';
+ }
+};
+
+my $m2_error_callback = sub {
+ my($cgi, $object) = @_;
+
+ #process_o2m fields in process/did_order.html
+ my @fields = qw( msa npa latanum rate_center state quantity );
+ my @gfields = ( '', map "_$_", @fields );
+
+ map {
+ if ( /^orderitemnum(\d+)$/ ) {
+ my $num = $1;
+ if ( grep $cgi->param("orderitemnum$num$_"), @gfields ) {
+ my $x = new FS::did_order_item {
+ 'orderitemnum' => scalar($cgi->param("orderitemnum$num")),
+ map { $_ => scalar($cgi->param("orderitemnum${num}_$_")) } @fields,
+ };
+ $x;
+ } else {
+ ();
+ }
+ } else {
+ ();
+ }
+ }
+ $cgi->param;
+};
+
+
</%init>
diff --git a/httemplate/edit/elements/edit.html b/httemplate/edit/elements/edit.html
index 295ad8567..f5698d98e 100644
--- a/httemplate/edit/elements/edit.html
+++ b/httemplate/edit/elements/edit.html
@@ -272,6 +272,7 @@ Example:
% 'options' => $f->{'options'},
% 'labels' => $f->{'labels'},
% 'multiple' => $f->{'multiple'},
+% 'label_showkey' => $f->{'label_showkey'},
% 'disable_empty' => $f->{'disable_empty'},
% #select-reason
% 'reason_class' => $f->{'reason_class'},
@@ -439,7 +440,7 @@ Example:
% }
% warn "layer values: ". Dumper($layer_values)
% if $opt{'debug'};
-%
+%
% my @existing = &{ $include_sub }(
% 'label' => $ex_label,
% 'fieldnum' => $fieldnum,
diff --git a/httemplate/edit/process/did_order.html b/httemplate/edit/process/did_order.html
index 0c9a3f0e0..e5948ff0b 100644
--- a/httemplate/edit/process/did_order.html
+++ b/httemplate/edit/process/did_order.html
@@ -2,6 +2,10 @@
'table' => 'did_order',
'viewall_dir' => 'browse',
'value_callback' => $value_callback,
+ 'process_o2m' => {
+ 'table' => 'did_order_item',
+ 'fields' => \@item_fields,
+ },
)
%>
<%init>
@@ -15,6 +19,8 @@ my $value_callback = sub {
($field =~ /ed$/ && $value !~ /^\d+$/) ? parse_datetime($value) : $value;
};
+my @item_fields = qw( msa npa latanum rate_center state quantity );
+
die "access denied"
unless $FS::CurrentUser::CurrentUser->access_right('Import');
diff --git a/httemplate/elements/did_order_item.html b/httemplate/elements/did_order_item.html
new file mode 100644
index 000000000..263826ecc
--- /dev/null
+++ b/httemplate/elements/did_order_item.html
@@ -0,0 +1,69 @@
+% unless ( $opt{'js_only'} ) {
+
+ <INPUT TYPE="hidden" NAME="<%$name%>" ID="<%$id%>" VALUE="<% $curr_value %>">
+
+ <TABLE>
+ <TR>
+% foreach my $field ( @fields ) {
+%
+% my $value = '';
+% $value = $item->get($field);
+
+ <TD>
+ <INPUT TYPE = "text"
+ NAME = "<%$name%>_<%$field%>"
+ ID = "<%$id%>_<%$field%>"
+ SIZE = "<% $size{$field} || 15 %>"
+ VALUE = "<% scalar($cgi->param($name."_$field"))
+ || $value |h %>"
+ <% $onchange %>
+ ><BR>
+ <FONT SIZE="-1"><% $label{$field} %></FONT>
+ </TD>
+% }
+ </TR>
+ </TABLE>
+
+% }
+<%init>
+
+my( %opt ) = @_;
+
+my $name = $opt{'element_name'} || $opt{'field'} || 'orderitemnum';
+my $id = $opt{'id'} || 'orderitemnum';
+
+my $curr_value = $opt{'curr_value'} || $opt{'value'};
+
+my $onchange = '';
+if ( $opt{'onchange'} ) {
+ $onchange = $opt{'onchange'};
+ $onchange .= '(this)' unless $onchange =~ /\(\w*\);?$/;
+ $onchange =~ s/\(what\);/\(this\);/g; #ugh, terrible hack. all onchange
+ #callbacks should act the same
+ $onchange = 'onChange="'. $onchange. '"';
+}
+
+my $item;
+if ( $curr_value ) {
+ $item = qsearchs('did_order_item', { 'orderitemnum' => $curr_value } );
+} else {
+ $item = new FS::did_order_item {};
+}
+
+my %size = ( 'npa' => 3,
+ 'latanum' => 3,
+ 'state' => 2,
+ 'quantity' => 3,);
+
+tie my %label, 'Tie::IxHash',
+ 'msa' => 'MSA',
+ 'npa' => 'NPA',
+ 'latanum' => 'LATA #',
+ 'rate_center' => 'Rate Center',
+ 'state' => 'State',
+ 'quantity' => 'Quantity',
+;
+
+my @fields = keys %label;
+
+</%init>
diff --git a/httemplate/elements/tr-did_order_item.html b/httemplate/elements/tr-did_order_item.html
new file mode 100644
index 000000000..7824aee03
--- /dev/null
+++ b/httemplate/elements/tr-did_order_item.html
@@ -0,0 +1,24 @@
+% unless ( $opt{'js_only'} ) {
+
+ <% include('tr-td-label.html', %opt) %>
+ <TD <% $cell_style %>>
+
+% }
+%
+ <% include( '/elements/did_order_item.html', %opt ) %>
+%
+% unless ( $opt{'js_only'} ) {
+
+ </TD>
+ </TR>
+
+% }
+<%init>
+
+my( %opt ) = @_;
+
+my $cell_style = $opt{'cell_style'} ? 'STYLE="'. $opt{'cell_style'}. '"' : '';
+
+$opt{'label'} ||= 'Item';
+
+</%init>
diff --git a/httemplate/misc/phone_avail-import.html b/httemplate/misc/phone_avail-import.html
index fcbfcc398..903c17bd9 100644
--- a/httemplate/misc/phone_avail-import.html
+++ b/httemplate/misc/phone_avail-import.html
@@ -7,7 +7,7 @@ Import a file containing phone numbers (DIDs).
'name' => 'PhonenumImportForm',
'action' => 'process/phone_avail-import.html',
'num_files' => 1,
- 'fields' => [ 'format', 'availbatch', 'exportnum', 'countrycode', 'ordernum' ],
+ 'fields' => [ 'format', 'availbatch', 'exportnum', 'countrycode', 'ordernum', 'confirmed', 'vendor_order_id' ],
'message' => 'DID import successful',
'url' => $p."search/phone_avail.html?availbatch=$availbatch",
)
@@ -25,6 +25,20 @@ Import a file containing phone numbers (DIDs).
<INPUT TYPE="hidden" NAME="ordernum" VALUE="<% $ordernum %>">
</TD>
</TR>
+ <TR>
+ <TD ALIGN="RIGHT">Vendor Order #</TD>
+ <TD>
+ <INPUT TYPE="text" NAME="vendor_order_id" VALUE="<% $vendor_order_id %>">
+ </TD>
+ </TR>
+
+ <% include( '/elements/tr-input-date-field.html', {
+ 'name' => 'confirmed',
+ 'label' => 'Order Confirmed',
+ 'value' => $confirmed,
+ })
+ %>
+
% }
<TR>
<TD ALIGN="RIGHT">Import Format</TD>
@@ -78,7 +92,7 @@ Uploaded files can be CSV (comma-separated value) files or Excel spreadsheets.
<BR><BR>
<b>Default</b> format has the following field order: <i>state, number, name</i><br>
-<b>Bulk</b> format has the following field order: <i>state, number, rate center, rate_center_abbrev</i>
+<b>Bulk</b> format has the following field order: <i>state, number, rate center, rate_center_abbrev, msa, latanum</i>
<BR><BR>
Field information:
<ul>
@@ -87,6 +101,8 @@ Field information:
<li><i>name</i>: optional, rate center
<li><i>rate center</i>: rate center (required)
<li><i>rate_center_abbrev</i>: rate center abbreviation
+ <li><i>msa</i>: MSA
+ <li><i>latanum</i>: LATA #
</ul>
<BR><BR>
@@ -102,11 +118,23 @@ my $conf = new FS::Conf;
my $ordernum = $cgi->param('ordernum');
$ordernum = '' unless $ordernum =~ /^\d+$/;
-die 'invalid ordernum'
- unless (!$ordernum || qsearchs('did_order', { 'ordernum' => $ordernum }));
+my $vendor_order_id = '';
+my $confirmed = '';
+
+my $order = '';
+$order = qsearchs('did_order', { 'ordernum' => $ordernum } )
+ if $ordernum;
+
+die 'invalid ordernum' unless (!$ordernum || $order);
my $format = 'default';
-$format = 'bulk' if $ordernum;
+
+if ( $order ) {
+ $format = 'bulk';
+ $confirmed = $order->confirmed;
+ $vendor_order_id = $order->vendor_order_id;
+}
+
my $availbatch =
time2str('webimport-%Y/%m/%d-%T'. "-$$-". rand() * 2**32, time);