one more repeatability fix + documentation, #37340
authorMark Wells <mark@freeside.biz>
Mon, 31 Aug 2015 21:55:34 +0000 (14:55 -0700)
committerMark Wells <mark@freeside.biz>
Mon, 31 Aug 2015 21:55:34 +0000 (14:55 -0700)
FS-Test/README
FS-Test/share/output/edit/part_pkg.cgi/2
FS/FS/cdr.pm

index b1518bd..8e9681c 100644 (file)
@@ -2,42 +2,36 @@ FS-Test
 
 INSTALLATION
 
-To install this module, install Freeside as usual. Then run the following 
-commands:
-
-       perl Makefile.PL
-       make
-       make install
-
-INITIALIZATION
-
-Run "freeside-test-start" from an account that can sudo to root. This will
-create a database with the test image and set the system clock to one day
-after the last bill. If there's an existing Freeside database, it will be
-renamed to "freeside_YYYYMMDD" (the current date).
-
-To restore the system clock and put the existing database back in place,
-run "freeside-test-stop".
+This module no longer needs to be installed. Run it directly from the source
+tree.
 
 RUNNING TESTS
 
-"freeside-test-run" is the main test script. Currently there's only one 
-test plan, "ui_tests". freeside-test-run will:
+"freeside-test-run" is the main test script. Currently there's only one test
+plan, "ui_tests". freeside-test-run will:
 
 - download all the URLs listed in the test plan into a directory in /tmp
 - compare them to the reference versions with "diff -ur"
 - write the output to "freeside_test.YYYYMMDD.diff"
-- display the results of "diffstat" on that diff
 
 The raw output directory will not be deleted, so you can examine the results
-yourself. This is recommended for files that don't diff nicely like Excel 
-versions of reports and PDF invoices.
+yourself.
+
+If you want to do anything with the database besides compare the test results
+to reference, run "freeside-test-start" by hand first. This will create a
+database with the test image and start Apache with a fake time of one day after
+the last bill. If there's an existing Freeside database, it will be renamed to
+"freeside_YYYYMMDD" (the current date).
+
+To put the existing database back in place, run "freeside-test-stop", then
+restart Apache and any Freeside services.
 
 UPDATING THE REFERENCE PAGES
 
 The simplest way to update the reference copies of the test pages is
 
-freeside-test-fetch -d ./share/output
+bin/freeside-test-start
+bin/freeside-test-fetch -d ./share/output
 
 (from the FS-Test source directory). If you're installing from a git repo,
 this will overwrite the working tree with the newly downloaded test pages.
index 9aba158..798351f 100644 (file)
@@ -4720,9 +4720,9 @@ spawn_supp_dst_pkgpart(this);"
       <INPUT TYPE="checkbox" NAME="voip_cdr__skip_same_customer" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Calculate usage based on the duration field instead of the billsec field</TD><TD>
       <INPUT TYPE="checkbox" NAME="voip_cdr__use_duration" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Rewrite these (comma-separated) destination numbers to 411 for rating purposes (also ignore any carrierid check): </TD><TD>
       <INPUT TYPE="text" NAME="voip_cdr__411_rewrite" VALUE=""></TD></TR><TR><TD ALIGN="right">CDR display format for invoices</TD><TD>
-      <SELECT NAME="voip_cdr__output_format"><OPTION VALUE="" SELECTED><OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="basic">Basic<OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="sum_duration">Summary, one line per service<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name<OPTION VALUE="source_default">Default with source<OPTION VALUE="simple2">Simple with source<OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix<OPTION VALUE="default">Default<OPTION VALUE="simple">Simple<OPTION VALUE="accountcode_default">Default plus accountcode</SELECT></TD></TR><TR><TD ALIGN="right">CDR display format for selfservice</TD><TD>
-      <SELECT NAME="voip_cdr__selfservice_format"><OPTION VALUE="" SELECTED><OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="basic">Basic<OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="sum_duration">Summary, one line per service<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name<OPTION VALUE="source_default">Default with source<OPTION VALUE="simple2">Simple with source<OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix<OPTION VALUE="default">Default<OPTION VALUE="simple">Simple<OPTION VALUE="accountcode_default">Default plus accountcode</SELECT></TD></TR><TR><TD ALIGN="right">Inbound CDR display format for selfservice</TD><TD>
-      <SELECT NAME="voip_cdr__selfservice_inbound_format"><OPTION VALUE="" SELECTED><OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="basic">Basic<OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="sum_duration">Summary, one line per service<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name<OPTION VALUE="source_default">Default with source<OPTION VALUE="simple2">Simple with source<OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix<OPTION VALUE="default">Default<OPTION VALUE="simple">Simple<OPTION VALUE="accountcode_default">Default plus accountcode</SELECT></TD></TR><TR><TD ALIGN="right">Always put usage details in separate section.  The section is defined in the next option.</TD><TD>
+      <SELECT NAME="voip_cdr__output_format"><OPTION VALUE="" SELECTED><OPTION VALUE="accountcode_default">Default plus accountcode<OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="basic">Basic<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name<OPTION VALUE="default">Default<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="simple">Simple<OPTION VALUE="simple2">Simple with source<OPTION VALUE="source_default">Default with source<OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="sum_duration">Summary, one line per service<OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix</SELECT></TD></TR><TR><TD ALIGN="right">CDR display format for selfservice</TD><TD>
+      <SELECT NAME="voip_cdr__selfservice_format"><OPTION VALUE="" SELECTED><OPTION VALUE="accountcode_default">Default plus accountcode<OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="basic">Basic<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name<OPTION VALUE="default">Default<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="simple">Simple<OPTION VALUE="simple2">Simple with source<OPTION VALUE="source_default">Default with source<OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="sum_duration">Summary, one line per service<OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix</SELECT></TD></TR><TR><TD ALIGN="right">Inbound CDR display format for selfservice</TD><TD>
+      <SELECT NAME="voip_cdr__selfservice_inbound_format"><OPTION VALUE="" SELECTED><OPTION VALUE="accountcode_default">Default plus accountcode<OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="basic">Basic<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name<OPTION VALUE="default">Default<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="simple">Simple<OPTION VALUE="simple2">Simple with source<OPTION VALUE="source_default">Default with source<OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="sum_duration">Summary, one line per service<OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix</SELECT></TD></TR><TR><TD ALIGN="right">Always put usage details in separate section.  The section is defined in the next option.</TD><TD>
       <INPUT TYPE="checkbox" NAME="voip_cdr__usage_mandate" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Section in which to place usage charges (whether separated or not): </TD><TD>
       <INPUT TYPE="text" NAME="voip_cdr__usage_section" VALUE=""></TD></TR><TR><TD ALIGN="right">Include usage summary with recurring charges when usage is in separate section</TD><TD>
       <INPUT TYPE="checkbox" NAME="voip_cdr__summarize_usage" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Show details for included / no-charge calls.</TD><TD>
@@ -4775,7 +4775,7 @@ spawn_supp_dst_pkgpart(this);"
       <INPUT TYPE="text" NAME="voip_inbound__skip_dst_length_less" VALUE=""></TD></TR><TR><TD ALIGN="right">Do not charge for CDRs where the lastapp matches this value</TD><TD>
       <INPUT TYPE="text" NAME="voip_inbound__skip_lastapp" VALUE=""></TD></TR><TR><TD ALIGN="right">Calculate usage based on the duration field instead of the billsec field</TD><TD>
       <INPUT TYPE="checkbox" NAME="voip_inbound__use_duration" VALUE=1 ></TD></TR><TR><TD ALIGN="right">CDR invoice display format</TD><TD>
-      <SELECT NAME="voip_inbound__output_format"><OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="basic">Basic<OPTION VALUE="sum_duration">Summary, one line per service<OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="source_default">Default with source<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name<OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix<OPTION VALUE="simple2">Simple with source<OPTION VALUE="default">Default<OPTION VALUE="accountcode_default">Default plus accountcode<OPTION VALUE="simple">Simple<OPTION VALUE="description_default">Default with description field as destination</SELECT></TD></TR><TR><TD ALIGN="right">Always put usage details in separate section</TD><TD>
+      <SELECT NAME="voip_inbound__output_format"><OPTION VALUE="accountcode_default">Default plus accountcode<OPTION VALUE="sum_duration">Summary, one line per service<OPTION VALUE="simple2">Simple with source<OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name<OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix<OPTION VALUE="simple">Simple<OPTION VALUE="source_default">Default with source<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="basic">Basic<OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="default">Default</SELECT></TD></TR><TR><TD ALIGN="right">Always put usage details in separate section</TD><TD>
       <INPUT TYPE="checkbox" NAME="voip_inbound__usage_mandate" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Include usage summary with recurring charges when usage is in separate section</TD><TD>
       <INPUT TYPE="checkbox" NAME="voip_inbound__summarize_usage" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Section in which to place usage charges (whether separated or not)</TD><TD>
       <INPUT TYPE="text" NAME="voip_inbound__usage_section" VALUE=""></TD></TR><TR><TD ALIGN="right">Generate an invoice immediately for every call.  Useful for prepaid.</TD><TD>
@@ -4834,9 +4834,9 @@ spawn_supp_dst_pkgpart(this);"
       <INPUT TYPE="checkbox" NAME="voip_tiered__skip_same_customer" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Calculate usage based on the duration field instead of the billsec field</TD><TD>
       <INPUT TYPE="checkbox" NAME="voip_tiered__use_duration" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Rewrite these (comma-separated) destination numbers to 411 for rating purposes (also ignore any carrierid check): </TD><TD>
       <INPUT TYPE="text" NAME="voip_tiered__411_rewrite" VALUE=""></TD></TR><TR><TD ALIGN="right">CDR display format for invoices</TD><TD>
-      <SELECT NAME="voip_tiered__output_format"><OPTION VALUE="" SELECTED><OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="basic">Basic<OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="sum_duration">Summary, one line per service<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name<OPTION VALUE="source_default">Default with source<OPTION VALUE="simple2">Simple with source<OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix<OPTION VALUE="default">Default<OPTION VALUE="simple">Simple<OPTION VALUE="accountcode_default">Default plus accountcode</SELECT></TD></TR><TR><TD ALIGN="right">CDR display format for selfservice</TD><TD>
-      <SELECT NAME="voip_tiered__selfservice_format"><OPTION VALUE="" SELECTED><OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="basic">Basic<OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="sum_duration">Summary, one line per service<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name<OPTION VALUE="source_default">Default with source<OPTION VALUE="simple2">Simple with source<OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix<OPTION VALUE="default">Default<OPTION VALUE="simple">Simple<OPTION VALUE="accountcode_default">Default plus accountcode</SELECT></TD></TR><TR><TD ALIGN="right">Inbound CDR display format for selfservice</TD><TD>
-      <SELECT NAME="voip_tiered__selfservice_inbound_format"><OPTION VALUE="" SELECTED><OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="basic">Basic<OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="sum_duration">Summary, one line per service<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name<OPTION VALUE="source_default">Default with source<OPTION VALUE="simple2">Simple with source<OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix<OPTION VALUE="default">Default<OPTION VALUE="simple">Simple<OPTION VALUE="accountcode_default">Default plus accountcode</SELECT></TD></TR><TR><TD ALIGN="right">Always put usage details in separate section.  The section is defined in the next option.</TD><TD>
+      <SELECT NAME="voip_tiered__output_format"><OPTION VALUE="" SELECTED><OPTION VALUE="accountcode_default">Default plus accountcode<OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="basic">Basic<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name<OPTION VALUE="default">Default<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="simple">Simple<OPTION VALUE="simple2">Simple with source<OPTION VALUE="source_default">Default with source<OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="sum_duration">Summary, one line per service<OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix</SELECT></TD></TR><TR><TD ALIGN="right">CDR display format for selfservice</TD><TD>
+      <SELECT NAME="voip_tiered__selfservice_format"><OPTION VALUE="" SELECTED><OPTION VALUE="accountcode_default">Default plus accountcode<OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="basic">Basic<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name<OPTION VALUE="default">Default<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="simple">Simple<OPTION VALUE="simple2">Simple with source<OPTION VALUE="source_default">Default with source<OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="sum_duration">Summary, one line per service<OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix</SELECT></TD></TR><TR><TD ALIGN="right">Inbound CDR display format for selfservice</TD><TD>
+      <SELECT NAME="voip_tiered__selfservice_inbound_format"><OPTION VALUE="" SELECTED><OPTION VALUE="accountcode_default">Default plus accountcode<OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="basic">Basic<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name<OPTION VALUE="default">Default<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="simple">Simple<OPTION VALUE="simple2">Simple with source<OPTION VALUE="source_default">Default with source<OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="sum_duration">Summary, one line per service<OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix</SELECT></TD></TR><TR><TD ALIGN="right">Always put usage details in separate section.  The section is defined in the next option.</TD><TD>
       <INPUT TYPE="checkbox" NAME="voip_tiered__usage_mandate" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Section in which to place usage charges (whether separated or not): </TD><TD>
       <INPUT TYPE="text" NAME="voip_tiered__usage_section" VALUE=""></TD></TR><TR><TD ALIGN="right">Include usage summary with recurring charges when usage is in separate section</TD><TD>
       <INPUT TYPE="checkbox" NAME="voip_tiered__summarize_usage" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Show details for included / no-charge calls.</TD><TD>
@@ -4872,7 +4872,7 @@ spawn_supp_dst_pkgpart(this);"
       <INPUT TYPE="checkbox" NAME="cdr_termination__prorate_round_day" VALUE=1  CHECKED></TD></TR><TR><TD ALIGN="right">When prorating first month, also bill for one full period after that</TD><TD>
       <INPUT TYPE="checkbox" NAME="cdr_termination__add_full_period" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Show prorate details on the invoice</TD><TD>
       <INPUT TYPE="checkbox" NAME="cdr_termination__prorate_verbose" VALUE=1  CHECKED></TD></TR><TR><TD ALIGN="right">CDR invoice display format</TD><TD>
-      <SELECT NAME="cdr_termination__output_format"><OPTION VALUE="simple">Simple<OPTION VALUE="accountcode_default">Default plus accountcode<OPTION VALUE="default">Default<OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix<OPTION VALUE="simple2">Simple with source<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name<OPTION VALUE="source_default">Default with source<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="basic">Basic<OPTION VALUE="sum_duration">Summary, one line per service<OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="accountcode_simple">Simple with accountcode</SELECT></TD></TR><TR><TD ALIGN="right">Section in which to place separate usage charges</TD><TD>
+      <SELECT NAME="cdr_termination__output_format"><OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="basic">Basic<OPTION VALUE="default">Default<OPTION VALUE="source_default">Default with source<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix<OPTION VALUE="simple">Simple<OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name<OPTION VALUE="simple2">Simple with source<OPTION VALUE="accountcode_default">Default plus accountcode<OPTION VALUE="sum_duration">Summary, one line per service</SELECT></TD></TR><TR><TD ALIGN="right">Section in which to place separate usage charges</TD><TD>
       <INPUT TYPE="text" NAME="cdr_termination__usage_section" VALUE=""></TD></TR><TR><TD ALIGN="right">Include usage summary with recurring charges when usage is in separate section</TD><TD>
       <INPUT TYPE="checkbox" NAME="cdr_termination__summarize_usage" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Always put usage details in separate section</TD><TD>
       <INPUT TYPE="checkbox" NAME="cdr_termination__usage_mandate" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD>
@@ -4992,7 +4992,7 @@ spawn_supp_dst_pkgpart(this);"
       <INPUT TYPE="checkbox" NAME="agent_cdr__prorate_round_day" VALUE=1  CHECKED></TD></TR><TR><TD ALIGN="right">When prorating first month, also bill for one full period after that</TD><TD>
       <INPUT TYPE="checkbox" NAME="agent_cdr__add_full_period" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Show prorate details on the invoice</TD><TD>
       <INPUT TYPE="checkbox" NAME="agent_cdr__prorate_verbose" VALUE=1  CHECKED></TD></TR><TR><TD ALIGN="right">CDR invoice display format</TD><TD>
-      <SELECT NAME="agent_cdr__output_format"><OPTION VALUE="accountcode_default">Default plus accountcode<OPTION VALUE="simple">Simple<OPTION VALUE="default">Default<OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix<OPTION VALUE="simple2">Simple with source<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name<OPTION VALUE="source_default">Default with source<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="basic">Basic<OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="sum_duration">Summary, one line per service<OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="accountcode_simple">Simple with accountcode</SELECT></TD></TR><TR><TD ALIGN="right">Section in which to place separate usage charges</TD><TD>
+      <SELECT NAME="agent_cdr__output_format"><OPTION VALUE="sum_duration_prefix">Summary, one line per destination prefix<OPTION VALUE="sum_count">Number of calls, one line per service<OPTION VALUE="simple">Simple<OPTION VALUE="sum_count_class">Summary, one line per usage class<OPTION VALUE="basic">Basic<OPTION VALUE="default">Default<OPTION VALUE="source_default">Default with source<OPTION VALUE="description_default">Default with description field as destination<OPTION VALUE="simple2">Simple with source<OPTION VALUE="accountcode_default">Default plus accountcode<OPTION VALUE="sum_duration">Summary, one line per service<OPTION VALUE="accountcode_simple">Simple with accountcode<OPTION VALUE="basic_upstream_dst_regionname">Basic with upstream destination name</SELECT></TD></TR><TR><TD ALIGN="right">Section in which to place separate usage charges</TD><TD>
       <INPUT TYPE="text" NAME="agent_cdr__usage_section" VALUE=""></TD></TR><TR><TD ALIGN="right">Include usage summary with recurring charges when usage is in separate section</TD><TD>
       <INPUT TYPE="checkbox" NAME="agent_cdr__summarize_usage" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Always put usage details in separate section</TD><TD>
       <INPUT TYPE="checkbox" NAME="agent_cdr__usage_mandate" VALUE=1 ></TD></TR><TR><TD ALIGN="right">Credit the customer for the unused portion of service at cancellation</TD><TD>
index 1a36660..775c791 100644 (file)
@@ -1463,7 +1463,7 @@ as keys (for use with part_pkg::voip_cdr) and "pretty" format names as values.
 sub invoice_formats {
   map { ($_ => $export_names{$_}->{'name'}) }
     grep { $export_names{$_}->{'invoice_header'} }
-    keys %export_names;
+    sort keys %export_names;
 }
 
 =item invoice_header FORMAT