diff options
author | levinse <levinse> | 2011-04-06 08:24:27 +0000 |
---|---|---|
committer | levinse <levinse> | 2011-04-06 08:24:27 +0000 |
commit | 31f2e890b5b3e1b0ad29a877ff67bc641ea1fc40 (patch) | |
tree | 1cf3150f90efb5f0cf97055743ba0d22e47b3713 /httemplate | |
parent | 2daf4c6c460e66d67839ad48f4b050be181e109f (diff) |
bulk DID order/inventory improvements, RT11291
Diffstat (limited to 'httemplate')
-rw-r--r-- | httemplate/browse/did_order.html | 26 | ||||
-rw-r--r-- | httemplate/edit/did_order.html | 95 | ||||
-rw-r--r-- | httemplate/edit/elements/edit.html | 3 | ||||
-rw-r--r-- | httemplate/edit/process/did_order.html | 6 | ||||
-rw-r--r-- | httemplate/elements/did_order_item.html | 69 | ||||
-rw-r--r-- | httemplate/elements/tr-did_order_item.html | 24 | ||||
-rw-r--r-- | httemplate/misc/phone_avail-import.html | 38 |
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); |