task/ta-nst-011-47 -- quick patch to add the stocktake created timestamp
to the report output.
Merge branch 'task/ta-nst-011-47' into feature/us-nst-011

Conflicts:
	nparcel/auditer.py
Merge branch 'feature/us-nst-011' into dev
Quick pre v0.24 release patch:

nparcel/auditer.py
* updated the _cleanse() method by adding STOCKTAKE_CREATED_TS to the
  list of columns to update
defect/de-33 -- compliance report needs to restrict agent compliance
only if they have an aged parcel present

nparcel/auditer.py
* update the _cleanse() method to strip off the decimal seconds

nparcel/report/compliance.py
* updated the process() method to include the new compliance report
  query (jobitem.agent_id_of_aged_parcels()) and pass through the
  _cleanse() method

nparcel/table/jobitem.py
* new method agent_id_of_aged_parcels() to provide a distinct list of
  agents that have an aged parcel
defect/de-34 -- emailer validation check failure.

nparcel/emailerbase.py
* factor out the common validate() method into new email base class

nparcel/emailer.py
nparcel/restemailer.py
* base Emailer() class off new class nparcel.EmailerBase
task/ta-nst-011-48 -- enhance the nparcel.table.jobitem.reference_sql()
method to présent scanned ADP détails

nparcel/table/jobitem.py
* updated the reference_sql() method to display scanning ADP details
task/ta-nst-011-49 -- extend the non-compliance report config to handle
agent exceptions

nparcel/conf/nparceld.conf
* update non-compliance report config items to display agent exceptions
defect/de-34 -- fix error on close against idle FTP connection

nparcel/ftp.py
* new attribute connected that tracks the state of the FTP connection
* updated the disconnect_resource() method to only attempt closure if
  a FTP connection is present
task/defect-de-04-01 -- Create generic string-based hashing function

nparcel/bin/nppod
* provide a simple CLI that can identify an archived POD on the
  filesystem (or produce resultant directory structure if the POD is
  not archived)

nparcel/utils/files.py
* new method gen_digest() where given a string, create a standard and
  unique identifying token
* new method gen_digest_path() that builds consistent directory
  structure based on identifying token that evenly distributes PODs
  across the filesystem
task/de04-ta02 -- Integrate the new POD hashing/archiving routine into
the Exporter

nparcel/b2cconfig.py
nparcel/conf/nparceld.conf
* new condition map options archive_ps_file and archive_png_file
* renamed the get_file_control() method to get_pod_control() and
  refactored the method to handle the archive_*_file condition map

nparcel/exporterdaemon.py
* replace reference to get_file_control() with get_pod_control()

nparcel/exporter.py
* factored out the the move_signature_file() method into the process()
  method
* new method archive_signature_file() that attempts to archive POD
  signature files
* updated the process() method to attempt POD file archiving and staging
task/de04-ta03 -- POD signature migrator tool

nparcel/bin/nppodmigrate
* new script to migrate old-style POD signature archives

nparcel/utils/files.py
* move_file() function now supports a dry run
task/de14-ta04 -- Suppress IPEC to Fast transfers to not trigger a
Toll Parcel Point notification

nparcel/table/transsend.py
* updated the schema() method to include the new columns
  "latest_scanner_description" and "notes"

nparcel/ondelivery.py
* new attributes "scan_desc_header" that represents the TransSend
  column name for the latest scanned description and "scan_desc_keys'
  which is a list of strings that represent a scanned description
  that should be omitted from the search set
* update the process() method to suppress row if scanned description
  value is matched
task/de14-ta06 -- Make the TransSend scanned_description column
values configurable

nparcel/b2cconfig.py
nparcel/conf/nparceld.conf
nparcel/ondeliverydaemon.py
* new attributes "scan_desc_header" which is the scanned description
  column header in TransSend and "scan_desc_keys" list of
  scan_desc_header` tokens to compare against
feature/us-78 -- Comms Events files should be generated for all T1250
line items

nparcel/loader.py
* factored out the ignore_record() call from the process() method
task/us79-ta12 -- T1250 agent code filtering should be a configurable
item

nparcel/conf/nparceld.conf
nparcel/b2cconfig.py
* new attribute "filtering_rules" which is a list of tokens to match
  against the start of the agent code field during the Delivery
  Partner filtering process
task/us79-ta14 -- Integrate the new filtering_rules config item into
filter.py

nparcel/filter.py
* updated the process() method to support configurable list of tokens to
  filter agent codes against
* new __init__() method to handle initialisation of the filtering_rules

nparcel/filter.py
* update _start() method so that call to parcel.Filter() passes through
  the configured filtering_rules
task/us79-ta16 -- filter interface documentation update
task/us84-ta19 -- New condition map setting to control Service Code 2
template types

nparcel/b2cconfig.py
nparcel/conf/nparceld.conf
* support for new attribute delay_template_sc_2
task/us84-ta17 -- Update loader.py to trigger correct template for
Service Code 2

nparcel/loader.py
* update the get_template() method to consider the delay_template_sc_2
  value
* update the process() method to incorporate delay_template_sc_2
  value in method calls within

nparcel/table/jobitem.py
* place a ordering clause around the connote_item_nbr_sql() to structure
  the job_item list output

nparcel/templates/email_delay_html.t
* update the wording of the template