<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://calidusassist.adcservices.apteancloud.com/calidus-assist/OBS/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=AppaduN</id>
	<title>Calidus HUB - User contributions [en-gb]</title>
	<link rel="self" type="application/atom+xml" href="https://calidusassist.adcservices.apteancloud.com/calidus-assist/OBS/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=AppaduN"/>
	<link rel="alternate" type="text/html" href="https://calidusassist.adcservices.apteancloud.com/calidus-assist/OBS/index.php/Special:Contributions/AppaduN"/>
	<updated>2026-07-02T15:42:24Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://calidusassist.adcservices.apteancloud.com/calidus-assist/OBS/index.php?title=FS_344273_SCR-343463-01_EBB_Paper_Bespoke_Import_Interface&amp;diff=6003</id>
		<title>FS 344273 SCR-343463-01 EBB Paper Bespoke Import Interface</title>
		<link rel="alternate" type="text/html" href="https://calidusassist.adcservices.apteancloud.com/calidus-assist/OBS/index.php?title=FS_344273_SCR-343463-01_EBB_Paper_Bespoke_Import_Interface&amp;diff=6003"/>
		<updated>2018-06-07T15:23:28Z</updated>

		<summary type="html">&lt;p&gt;AppaduN: Minor corrections&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;noprint&amp;quot;&amp;gt;&lt;br /&gt;
{{#vardefine:Client|EBB}}&lt;br /&gt;
{{#vardefine:ClientName|EBB Paper}}&lt;br /&gt;
{{#vardefine:System|''CALIDUS'' ePOD}}&lt;br /&gt;
{{#vardefine:Doc_Title|Bespoke Import Interface}}&lt;br /&gt;
{{#vardefine:Version|1.1}}&lt;br /&gt;
{{#vardefine:Date|7th June 2018}}&lt;br /&gt;
{{#vardefine:Reference|344273 SCR-343463-01}}&lt;br /&gt;
{{#vardefine:Year|2017}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{Doc_Title&lt;br /&gt;
|Client={{#var:ClientName}}&lt;br /&gt;
|System={{#var:System}}&lt;br /&gt;
|Title={{#var:Doc_Title}}&lt;br /&gt;
|Reference=FS {{#var:Reference}}&lt;br /&gt;
|Version={{#var:Version}}&lt;br /&gt;
|Date={{#var:Date}}&lt;br /&gt;
|Year={{#var:Year}}&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TOC --&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;noprint&amp;quot;&amp;gt;&lt;br /&gt;
= Functional Overview  =&lt;br /&gt;
== Client Requirement  ==&lt;br /&gt;
SCR-343463-01: Bespoke Import Interface&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OBS Logistics have been requested to write the interface in order to speed up the delivery of the project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The loads are interfaced from MSA in a custom XML format in a flat-file, after the routes are planned. A button is pressed when the manifest is finished planning to create this file.&lt;br /&gt;
&lt;br /&gt;
{{Note}} The manifests are used for picking. If additional orders are added to the vehicle (add-ons), the orders are placed on a separate manifest, for the same vehicle on the same day. This is because adding orders to an existing manifest (which is possible) will confuse the pickers and potentially result in double picks. This occurs quite frequently on radial deliveries.&lt;br /&gt;
&lt;br /&gt;
This file does not contain all the information required to create the jobs. Predominantly, address information and product case details are missing from this interface file. The remaining information is to be accessed directly from a view on the ERP system, running a SQL Server database.&lt;br /&gt;
&lt;br /&gt;
== Solution Overview ==&lt;br /&gt;
The interface created will be triggered by the receipt of the TMS XML file. The processing of the jobs on this file will retrieve the information on the orders from a view available in the ERP, through direct connection to this database. &lt;br /&gt;
&lt;br /&gt;
{{Note}} The C-ePOD system will be hosted by OBS, whilst the ERP is hosted by the customer. This interface will need to connect to this ERP to access the view to get the job details. There is a technical requirement to have the two servers connected, which will require action by OBS technical services and the customer in collaboration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A scheduled import process will be created on the system, running at a timed interval.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There will be multiple manifests sent for the same vehicle on the same day. These must be combined into a single manifest on C-ePOD. {{Note}} In order for the interface to successfully combine manifests, it is assumed that there will be one load required per vehicle per depot (Site) per day.&lt;br /&gt;
&lt;br /&gt;
{{Note}} Manifests (that create Loads in C-ePOD) will be allocated to a vehicle and/or driver. This allows the loads to be created and allocated to a driver for completion. Note however that, once created, the {{#var:System}} Admin system (Load or User screens) may be used to change allocation of vehicles and drivers on a load.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The interface will create loads, one per vehicle per depot (Site) per day.&lt;br /&gt;
&lt;br /&gt;
The system will be configured to create standing data from the received import information, such as:&lt;br /&gt;
* Drivers&lt;br /&gt;
* Customers (Invoice Addresses)&lt;br /&gt;
* Vehicles&lt;br /&gt;
As noted above, it is expected that this data will be created at implementation.&lt;br /&gt;
&lt;br /&gt;
When C-ePOD receives an inbound file from the customer, drivers and vehicles will be created as part of this interface, if they do not exist. The driver ID will be created as the first character of the first name, and up to the first 4 characters of the surname, with a 3-digit unique identifier added to them.&lt;br /&gt;
 &lt;br /&gt;
For example:&lt;br /&gt;
*         &amp;quot;David Eastman&amp;quot; will become &amp;quot;DEAST001&amp;quot;&lt;br /&gt;
*         &amp;quot;SMITH JOHN&amp;quot; will become &amp;quot;SJOHN001&amp;quot;&lt;br /&gt;
*         &amp;quot;DEREK MAY&amp;quot; will become &amp;quot;DMAY001&amp;quot;&lt;br /&gt;
*         &amp;quot;TRUNKER M25&amp;quot;. TRUNKER M25 will become &amp;quot;TM25001&amp;quot;&lt;br /&gt;
Note that where other drivers have similar names, the generated ID will increment the unique identifier. So:&lt;br /&gt;
*         &amp;quot;DIANE EASTMAN&amp;quot; will become &amp;quot;DEAST002&amp;quot;&lt;br /&gt;
*         &amp;quot;SANDERSON JOHN&amp;quot; will become &amp;quot;SJOHN002&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
The password will be defaulted to the user name.&lt;br /&gt;
&lt;br /&gt;
It is noted that EBB will tidy up the list of drivers before the implementation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sites will be created for each depot, following the encoding within the customer systems:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!GP Site ID	!!GP ADI Site ID	!!Fleet name&lt;br /&gt;
|-&lt;br /&gt;
|03 CHARLTO	||903 ADI	||Thurrock&lt;br /&gt;
|-&lt;br /&gt;
|04 FARNBOR	||904 ADI	||Farnborough&lt;br /&gt;
|-&lt;br /&gt;
|05 WATFORD	||905 ADI	||Watford&lt;br /&gt;
|-&lt;br /&gt;
|09 YEOVIL	||909 ADI	||BRISTOL&lt;br /&gt;
|-&lt;br /&gt;
|10 BIRMING	||910 ADI	||Birmingham&lt;br /&gt;
|-&lt;br /&gt;
|11 MANCHES	||911 ADI	||Manchester&lt;br /&gt;
|-&lt;br /&gt;
|12 SHEFFIE	||912 ADI	||Sheffield&lt;br /&gt;
|-&lt;br /&gt;
|13 NEWCAST	||913 ADI	||Newcastle&lt;br /&gt;
|-&lt;br /&gt;
|14 GLASGOW	||914 ADI	||Glasgow&lt;br /&gt;
|-&lt;br /&gt;
|31 FELIXST	||931 ADI	||Felixstowe&lt;br /&gt;
|-&lt;br /&gt;
|32 MAREXPO	||932 ADI	||Marexport&lt;br /&gt;
|}&lt;br /&gt;
{{Note}} The site is taken from the Originating Depot. The ADI site ID will be considered to be the GP site ID in this interface. Any manifests in the file for sites not in this list will not have loads or jobs created for them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The interface must identify the Site (the executing depot) and the Owner (the originator). &lt;br /&gt;
* The owner is considered the Sales Territory (column SALSTERR in the MSA view) &lt;br /&gt;
* The executing depot is the depot property on the '''manifest''' tag in the XML file.&lt;br /&gt;
&lt;br /&gt;
It is noted that the following will be Owners only and will not be operators:&lt;br /&gt;
* 08 PRINTMT&lt;br /&gt;
* 20 EBBOFFI&lt;br /&gt;
* 30 GLOSSOP&lt;br /&gt;
&lt;br /&gt;
The following columns are also noted from the MSA view:&lt;br /&gt;
*         DefaultSiteID - the final delivery depot&lt;br /&gt;
*         Originating Depot - the depot from which the product is sourced. {{Note}} The ''depot'' attribute of the '''order''' tag in the TMS XML file also identifies the originating depot. For example, if this contains &amp;quot;\03&amp;quot; this identifies &amp;quot;03 CHARLTON&amp;quot; as the depot (and THURROCK as the fleet).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest on which a job is received will be stored against the job in C-ePOD, as well as any of the other customer references. This will be used by the interface to determine if the manifest has been received before. If this is the case, and the manifest has been modified (i.e. orders or products removed or added), this will be used by the system to determine whether jobs are to be added to the created load for this vehicle and day, or whether the jobs will be removed (deleted). Products not on the jobs updated will be removed, and new products added.&lt;br /&gt;
&lt;br /&gt;
The jobs will be placed on the Load in the order in which they are received in the manifest file. If a further manifest is received for this vehicle, the jobs will be added to the end of the manifest. A hard sequence will be generated for the jobs on the manifest.&lt;br /&gt;
&lt;br /&gt;
In the interface, orders for the same customer code will be linked together and consolidated on the device, ensuring that only one delivery instruction is present, although both orders will be maintained.&lt;br /&gt;
&lt;br /&gt;
The interface will consolidate jobs together if:&lt;br /&gt;
*         The manifest on which the job is received is determined to be on the same Load as other jobs.&lt;br /&gt;
*         The job has the same customer and delivery address as another job on the load.&lt;br /&gt;
*         The other jobs are not completed or cancelled.&lt;br /&gt;
*         They are the same type i.e. deliveries can consolidate with deliveries and collections with collections only.&lt;br /&gt;
Note that the consolidation process will not use the delivery time of the orders when determining whether to consolidate jobs.&lt;br /&gt;
&lt;br /&gt;
Note also that the driver will have the ability to manually consolidate and deconsolidate jobs on the device when executing the load.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are many different types of orders. The type is identified through the alpha prefix against the order. The main types are below:&lt;br /&gt;
* INV - Delivery order&lt;br /&gt;
* CAL - Call-off. Considered to be the same as an INV order.&lt;br /&gt;
* RTN - Collection from customer.&lt;br /&gt;
&lt;br /&gt;
{{Note}} Only these order types will be uploaded to the C-ePOD system as jobs. All other types will be excluded when processing the files. &lt;br /&gt;
&lt;br /&gt;
{{Note}} Any manifests marked as TRUNK (in the '''trailer''' tag of the TMS XML file) will also not be processed.&lt;br /&gt;
&lt;br /&gt;
Desk collections will be interfaced to C-ePOD on a separate manifest per depot, but with a driver of &amp;quot;WAREHOUSE&amp;quot;. {{Note}} The view MSA contains a column that identifies whether this is a customer collection (column CustColl), but this is unreliable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Job Instructions should be populated with Order comments (OrdComm) and Delivery Instructions (DelIns) concatenated together.&lt;br /&gt;
&lt;br /&gt;
When receiving jobs through the interface, the invoice (customer) address will be updated, if this has changed. EBB Paper have confirmed that the Invoice address changing is as expected. It has been confirmed that any previous jobs with this invoice (customer) address will from that point show the new invoice address, and this is acceptable to EBB Paper.&lt;br /&gt;
&lt;br /&gt;
Planned delivery times will be maintained on each job created. &lt;br /&gt;
&lt;br /&gt;
There are essentially 2 types of order:&lt;br /&gt;
* A non-timed delivery will have a cut off of 14:00&lt;br /&gt;
* Timed Delivery&lt;br /&gt;
&lt;br /&gt;
{{Note}} Development work is required with GP to allow the EBB Paper sales team to maintain times on the order. This will be an EBB Paper task to complete.&lt;br /&gt;
&lt;br /&gt;
The start and end planned dates and times will be populated from the values in the following MSA view columns:&lt;br /&gt;
*	Start Planned Date - ReqShipDate&lt;br /&gt;
*	Start Planned Time - StartTime if populated, else 06000000 (06:00)&lt;br /&gt;
*	End Planned Date - ReqShipDate&lt;br /&gt;
*	End Planned Time - DelTime if populated, else FinishTime if populated, else 14000000 (14:00).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All jobs will be set with a configuration element known as Job Group - this will define the process to be followed against each job, such as:&lt;br /&gt;
* Driver Signature.&lt;br /&gt;
* POC/POD document format.&lt;br /&gt;
* POC/POD business address and logo.&lt;br /&gt;
* Terms and Conditions displayed.&lt;br /&gt;
&lt;br /&gt;
It is expected that there will need to be Job Group configurations for the different job types, as they will have different execution processes on the mobile devices:&lt;br /&gt;
* Radial Collection/Delivery&lt;br /&gt;
** Customer Signature&lt;br /&gt;
** Unmanned Location Signature enabled&lt;br /&gt;
** Deliver All functionality enabled&lt;br /&gt;
* Desk Collect&lt;br /&gt;
** Customer Signature&lt;br /&gt;
** Unmanned Location Signature will ''not'' be enabled&lt;br /&gt;
** Deliver All functionality enabled&lt;br /&gt;
For all jobs groups, it is expected that the following will also be configured:&lt;br /&gt;
* No Job Photo&lt;br /&gt;
* EBB Paper POD format&lt;br /&gt;
* Terms and Conditions is expected to be set to:&lt;br /&gt;
** Please be sure to check every consignment before signing. All sales are subject to Conditions of Sale, a copy of which is at the back of the EBB Price List and on our website http://www.ebbpaper.co.uk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The products will be created on each job created with the details taken from the ERP. The details expected to be received are:&lt;br /&gt;
* Product Code&lt;br /&gt;
* Product Description - stored as a truncated value&lt;br /&gt;
* FSC number (optional) - stored with the full product description in the long description field.&lt;br /&gt;
* Pack Size&lt;br /&gt;
* UOM&lt;br /&gt;
* Weight&lt;br /&gt;
* Quantity&lt;br /&gt;
&lt;br /&gt;
The pack size of the product will be taken from the ERP view in the interface. This will come from Sell Pack in the interface. It is noted that there is also a Purch Pack field, and it is confirmed that C-ePOD has no place to store this information.&lt;br /&gt;
&lt;br /&gt;
UOFM is the defined unit of measure of the product being delivered. There are multiple products UOMs that require the quantity to be decimal (for example, Weight (TONNES), Length (LINEAR METRES), Area (METRES SQUARED). In order for this to be achieved, the C-ePOD import interface for this system will multiply the quantities by a factor (for example, SHEETS UOM is in 1000's, so quantity 1.4 is actually 1400 sheets). &lt;br /&gt;
&lt;br /&gt;
The following is a list of the UOFMs known at this time and the proposals to handle them:&lt;br /&gt;
*	1 - always 1 - accepted as such, but rounded up if decimal.&lt;br /&gt;
*	1000 - quantity will be multiplied by 1000.&lt;br /&gt;
*	BOTTLE - always integer value - accepted as such, but rounded up if decimal.&lt;br /&gt;
*	BOX - always integer value - accepted as such, but rounded up if decimal.&lt;br /&gt;
*	CHARGE - Excluded - this is a delivery charge. No line will be created.&lt;br /&gt;
*	EACH - always integer value - accepted as such, but rounded up if decimal.&lt;br /&gt;
*	ENVS - Envelopes. Quantity will be multiplied by 1000. &lt;br /&gt;
*	MISC - always integer value - accepted as such, but rounded up if decimal.&lt;br /&gt;
*	ROLL - always integer value - accepted as such, but rounded up if decimal.&lt;br /&gt;
*	SETS - Multi-part paper. Quantity will be multiplied by 1000.&lt;br /&gt;
*	SHEETS - quantity will be multiplied by 1000&lt;br /&gt;
*	TONNE - quantity will be multiplied by 1000 and the UOM set to &amp;quot;KGS&amp;quot;.&lt;br /&gt;
*	METRES SQUARED - quantity will be multiplied by 1000.&lt;br /&gt;
*	LINEAR METRES - quantity will be multiplied by 1000.&lt;br /&gt;
&lt;br /&gt;
There are then essentially 4 rules:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!RULE	!!UOMS&lt;br /&gt;
|-&lt;br /&gt;
|Multiply by 1000 	||1000, ENVS, SETS, SHEETS, METRES SQUARED, LINEAR METRES&lt;br /&gt;
|-&lt;br /&gt;
|Round up to nearest integer value	||1, BOTTLE, BOX, EACH, MISC, ROLL&lt;br /&gt;
|-&lt;br /&gt;
|Exclude	||CHARGE&lt;br /&gt;
|-&lt;br /&gt;
|Multiply by 1000 and change to KGS	||TONNE&lt;br /&gt;
|}&lt;br /&gt;
Any not on the list would follow the first rule (i.e. multiply quantity by 1000).&lt;br /&gt;
&lt;br /&gt;
Note that the above method has been confirmed by the customer. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This process will create jobs as part of loads on the interface. It is possible that additional information may need to be communicated to the driver whilst out in the field. In this case, the WEBFLEET messaging function will be used by the operation. Furthermore, it is noted that additional jobs may be created in C-ePOD Admin for ad-hoc collections. For example, adding a job at the end of the shift (load) to go to a customer and pick up some empty pallets. {{Note}} This job will exist solely in C-ePOD, as the jobs are not being interfaced back to GP when complete. EBB Paper must take care when adding jobs of this type, ensuring that any subsequent actions required for these jobs is handled (for example, invoicing).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
This change will be applied to system version 4.X.&lt;br /&gt;
&lt;br /&gt;
This change includes up to 2 days relating to the external MSA view, for set-up and testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- NEW PAGE --&amp;gt; &lt;br /&gt;
= Set-up  =&lt;br /&gt;
== Pre-requisites  ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Menu Structure  ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Data  ==&lt;br /&gt;
A new Interface ID of &amp;quot;EBB&amp;quot;, description &amp;quot;EBB&amp;quot;, will be added to the EPOD_LIST_ITEMS for XF Interface IDs.&lt;br /&gt;
&lt;br /&gt;
A new Code Type of &amp;quot;UOM&amp;quot;, description &amp;quot;UOMs&amp;quot;, will be added to the EPOD_LIST_ITEMS for Reason Codes.&lt;br /&gt;
&lt;br /&gt;
A new EPOD_LISTS ID must be configured for Code Conversion Types, with the following List Items on EPOD_LIST_ITEMS, with Description and Value set as follows:&lt;br /&gt;
*   Value &amp;quot;MULTIPLY&amp;quot;, Description &amp;quot;Multiply&amp;quot;. This is the default value for EBB Paper.&lt;br /&gt;
*   Value &amp;quot;ROUND&amp;quot;, description &amp;quot;Round&amp;quot;.&lt;br /&gt;
*   Value &amp;quot;EXCLUDE&amp;quot;, description &amp;quot;Exclude&amp;quot;.&lt;br /&gt;
*   Value &amp;quot;DEFAULT&amp;quot;, description &amp;quot;As Received&amp;quot;. This is the default value for all other customers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sites for each depot will be configured. Each site will be set up with EPL_EXT_FLEET set to the fleet name, as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Site ID	!!Fleet&lt;br /&gt;
|-&lt;br /&gt;
|03 CHARLTO	||THURROCK&lt;br /&gt;
|-&lt;br /&gt;
|04 FARNBOR	||FARNBOROUGH&lt;br /&gt;
|-&lt;br /&gt;
|05 WATFORD	||WATFORD&lt;br /&gt;
|-&lt;br /&gt;
|09 YEOVIL	||BRISTOL&lt;br /&gt;
|-&lt;br /&gt;
|10 BIRMING	||BIRMINGHAM&lt;br /&gt;
|-&lt;br /&gt;
|11 MANCHES	||MANCHESTER&lt;br /&gt;
|-&lt;br /&gt;
|12 SHEFFIE	||SHEFFIELD&lt;br /&gt;
|-&lt;br /&gt;
|13 NEWCAST	||NEWCASTLE&lt;br /&gt;
|-&lt;br /&gt;
|14 GLASGOW	||GLASGOW&lt;br /&gt;
|-&lt;br /&gt;
|31 FELIXST	||FELIXSTOWE&lt;br /&gt;
|-&lt;br /&gt;
|32 MAREXPO	||MAREXPORT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=600px heights=350px perrow=1&amp;gt;&lt;br /&gt;
File:FS_344273_Admin_Site1.png|''Site Maintenance''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A new Import Interface configuration will be set up. This is required only for one of the sites, expected to be the first site &amp;quot;03 CHARLTO&amp;quot;:&lt;br /&gt;
*	EPL_XF_CONFIG_ID - &amp;quot;03 CHARLTO&amp;quot;&lt;br /&gt;
*	EPL_DESCRIPTION - As required&lt;br /&gt;
*	EPL_XF_TYPE - &amp;quot;FTP&amp;quot; or &amp;quot;FILE&amp;quot;&lt;br /&gt;
*	EPL_XF_DESTINATION - remote FTP server and path for FTP, local file path for FILE&lt;br /&gt;
*	EPL_XF_ID - &amp;quot;EBB&amp;quot;&lt;br /&gt;
*	EPL_WEB_USER - FTP user for FTP&lt;br /&gt;
*	EPL_WEB_PASSWORD - FTP password for FTP&lt;br /&gt;
*	EPL_DB_CONNECTION  - MSA database connection information e.g. &amp;quot;Data Source=[SERVER];Initial Catalog=[DB_NAME];User Id=[USER];Password=[PASSWORD];&amp;quot;&lt;br /&gt;
*	EPL_XF_DIRECTION - &amp;quot;I&amp;quot; - Import type&lt;br /&gt;
*	EPL_EXPORT_JOB_TYPES - &amp;quot;INV|CAL|RTN&amp;quot; - list of Order Types to be processed, pipe-delimited. Up to 5 allowed&lt;br /&gt;
*	EPL_FILENAME - Filename to match when picking up files. Expected to be &amp;quot;Manifest_*.xml&amp;quot;.&lt;br /&gt;
*	EPL_EMAIL_ERRORS - email address for file processing error notifications&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=600px heights=350px perrow=1&amp;gt;&lt;br /&gt;
File:FS_344273_Admin_XFConfig1.png|''New EBB Import Configuration''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A generic TTM Export configuration will be created (as ID &amp;quot;TTM&amp;quot;), as well as a specific TTM Export configuration for the first site (e.g. &amp;quot;03 CHARLTO&amp;quot;). The configuration of both will be identical apart from the Config ID.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=600px heights=350px perrow=1&amp;gt;&lt;br /&gt;
File:FS_344273_Admin_XFConfig2.png|''TTM Export Sample Configuration''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Interfaces for each site will be set as follows:&lt;br /&gt;
* For Site ID &amp;quot;03 CHARLTO&amp;quot;, set the XF Config ID to &amp;quot;03 CHARLTO&amp;quot;.&lt;br /&gt;
* For all other sites, set to &amp;quot;TTM&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is expected that there will need to be Job Group configurations for the different job types, as they will have different execution processes on the mobile devices.&lt;br /&gt;
&lt;br /&gt;
Job Groups will be created as follows for each site above:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Job Group	!!Description&lt;br /&gt;
|-&lt;br /&gt;
|COL    || Radial Collection&lt;br /&gt;
|-&lt;br /&gt;
|DEL    || Radial Delivery&lt;br /&gt;
|-&lt;br /&gt;
|DESK    || Desk Collections&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=600px heights=350px perrow=1&amp;gt;&lt;br /&gt;
File:FS_344273_Admin_JobGroups1.png|''Job Groups Maintenance''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The set-up of each job group will include the following:&lt;br /&gt;
* Radial Collection/Delivery&lt;br /&gt;
** Customer Signature&lt;br /&gt;
** Unmanned Location Signature enabled&lt;br /&gt;
** Deliver All functionality enabled&lt;br /&gt;
* Desk Collect&lt;br /&gt;
** Customer Signature&lt;br /&gt;
** Unmanned Location Signature will ''not'' be enabled&lt;br /&gt;
** Deliver All functionality enabled&lt;br /&gt;
&lt;br /&gt;
For all jobs groups, it is expected that the following will also be configured:&lt;br /&gt;
* No Job Photo&lt;br /&gt;
* EBB Paper POD format&lt;br /&gt;
* Terms and Conditions is expected to be set to:&lt;br /&gt;
** Please be sure to check every consignment before signing. All sales are subject to Conditions of Sale, a copy of which is at the back of the EBB Price List and on our website http://www.ebbpaper.co.uk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All of the UOMs required by the customer should be configured on the Admin Codes Maintenance screen for all sites. The values known at this time are as follows, with the Conversion settings required for each:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Conversion Type	!! Value	!! Code	!! UOMS&lt;br /&gt;
|-&lt;br /&gt;
|Multiply	|| 1000	||&amp;amp;nbsp;	|| 1000, ENVS, SETS, SHEETS, METRES SQUARED, LINEAR METRES&lt;br /&gt;
|-&lt;br /&gt;
|Round 	|| 1	||&amp;amp;nbsp;	|| 1, BOTTLE, BOX, EACH, MISC, ROLL&lt;br /&gt;
|-&lt;br /&gt;
|Exclude	||&amp;amp;nbsp;	||&amp;amp;nbsp;	|| CHARGE&lt;br /&gt;
|-&lt;br /&gt;
|Multiply 	|| 1000	|| KGS	|| TONNE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=600px heights=350px perrow=1&amp;gt;&lt;br /&gt;
File:FS_344273_Admin_Codes1.png|''Codes Maintenance''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- NEW PAGE --&amp;gt; &lt;br /&gt;
= Functional Description  =&lt;br /&gt;
== Database &amp;amp; Data Access Layer ==&lt;br /&gt;
The following fields will be added to the Job table EPOD_REASON_CODE:&lt;br /&gt;
*   EPL_CONV_TYPE - nvarchar(10)&lt;br /&gt;
*   EPL_CONV_VALUE - float&lt;br /&gt;
*   EPL_CONV_CODE - nvarchar(20)&lt;br /&gt;
&lt;br /&gt;
These fields will be added to all stored procedures in the database that require them.&lt;br /&gt;
&lt;br /&gt;
These fields are ''not'' required on the device.&lt;br /&gt;
&lt;br /&gt;
These fields are ''not'' required to be set on codes imported through the standard XML import (flat file or webservice). &lt;br /&gt;
&lt;br /&gt;
These fields are ''not'' required to be contained within the Export.&lt;br /&gt;
&lt;br /&gt;
These fields are ''not'' required to be used when filtering data for selection.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following fields will be added to the Job table EPOD_XF_CONFIG:&lt;br /&gt;
*   EPL_DB_CONNECTION - nvarchar(255)&lt;br /&gt;
&lt;br /&gt;
This field will be added to all stored procedures in the database that require it.&lt;br /&gt;
&lt;br /&gt;
This field is ''not'' required on the device.&lt;br /&gt;
&lt;br /&gt;
This field is ''not'' required to be used when filtering data for selection.&lt;br /&gt;
&lt;br /&gt;
{{Note}} All DAL objects that link to XF_CONFIG may also require change.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The EPOD_SETUP stored procedure will be modified for the new EPOD_LISTS and EPOD_LIST_ITEMS values.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Admin ==&lt;br /&gt;
=== Codes Maintenance Screen ===&lt;br /&gt;
The Codes Maintenance screen (reason_code.aspx) will be modified to support UOMs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=600px heights=350px perrow=1&amp;gt;&lt;br /&gt;
File:FS_344273_Admin_Codes1.png|''Codes Maintenance''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The '''Find''' criteria will be modified to allow selection of the new &amp;quot;UOM&amp;quot; type. Additionally, a blank &amp;quot;-- Select --&amp;quot; option will also be provided, for when the user wished to see all codes of all types. A new Code Type of &amp;quot;UOM&amp;quot; (description &amp;quot;UOMs&amp;quot;) will be added to the EPOD_LIST_ITEMS for Reason Codes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The results table does ''not'' require modifications.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The pop-up Entry/Edit form will be modified for entry of the new UOM codes.&lt;br /&gt;
&lt;br /&gt;
This is accessed when entering a new code using the '''New''' button, and when editing existing codes by clicking the '''Select''' button against a line in the results table.&lt;br /&gt;
&lt;br /&gt;
The user will be allowed to enter codes of type &amp;quot;UOM&amp;quot;, selected from the drop-down list.  A new Code Type of &amp;quot;UOM&amp;quot; will be added to the EPOD_LIST_ITEMS for Reason Codes.&lt;br /&gt;
&lt;br /&gt;
When editing or adding reason codes of type &amp;quot;UOM&amp;quot; ''only'', new fields will be present on the pop-up form, as shown below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Label	!!Field	!!Pop-up Help&lt;br /&gt;
|-&lt;br /&gt;
|Conversion Type	|| EPL_CONV_TYPE	||USED BY BESPOKE INTERFACES ONLY to determine whether the quantity is modified or the line processed when the UOM against the product line matches this value&lt;br /&gt;
|-&lt;br /&gt;
|Value	|| EPL_CONV_VALUE	||USED BY BESPOKE INTERFACES ONLY. If Conversion Type is &amp;quot;Multiply&amp;quot;, this value is used to multiply the product quantity. If Conversion Type is &amp;quot;Round&amp;quot;, this is used to round the quantity to the nearest value provided here.&lt;br /&gt;
|-&lt;br /&gt;
|XRef Code	|| EPL_CONV_CODE	||USED BY BESPOKE INTERFACES ONLY. If present, the UOM is converted to the value provided here.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These should be laid out as shown in the screenshot in the pop-up form.&lt;br /&gt;
&lt;br /&gt;
The Conversion Type will be added with the following drop-down list items, populated from the EPOD_LISTS and EPOD_LIST_ITEMS tables.&lt;br /&gt;
* &amp;quot;Multiply&amp;quot; - enter numeric value for multiplication.&lt;br /&gt;
* &amp;quot;Round&amp;quot; - enter value to round to (e.g. 1 means integer value, 0.25 is round to nearest 0.25, etc)&lt;br /&gt;
* &amp;quot;Exclude&amp;quot; - lines of this DU type are not added at all - Value field disabled.&lt;br /&gt;
* &amp;quot;As Received&amp;quot; - no calculation - Value field disabled.&lt;br /&gt;
&lt;br /&gt;
The default value for this list will be set by the default value in the EPOD_LIST_ITEMS table, as follows:&lt;br /&gt;
* Defaults to Type &amp;quot;Multiply&amp;quot; for EBB Paper &lt;br /&gt;
* Default to &amp;quot;As Received&amp;quot; for all other customers.&lt;br /&gt;
&lt;br /&gt;
The Value field will be enabled only if the following values are selected in the Conversion Type:&lt;br /&gt;
* Multiply&lt;br /&gt;
* Round&lt;br /&gt;
The Value field will be a numeric text field, allowing decimal entry, defaulting to &amp;quot;1000&amp;quot; if enabled. &lt;br /&gt;
&lt;br /&gt;
The XRef Code will be a drop-down list of all codes of the Code Type being edited/added by this screen, and will be populated on selection of the Code Type. This drop-down list will include a blank default value of &amp;quot;Blank&amp;quot;, and show the Code and Descriptions of all the selected codes. The list will be ordered by the Code, ascending.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When saving, the values will be saved in the appropriate fields on the EPOD_REASON_CODE table, as shown above.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Interface Config Screen ===&lt;br /&gt;
The Import/Export Maintenance screen (xf_config.aspx) will be modified to support configuration of the new EBB Paper interface.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=600px heights=350px perrow=1&amp;gt;&lt;br /&gt;
File:FS_344273_Admin_XFConfig1.png|''Import/Export Configuration Maintenance''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fields required to be displayed when configuring the &amp;quot;EBB&amp;quot; interface:&lt;br /&gt;
*	EPL_XF_CONFIG_ID - Always displayed.&lt;br /&gt;
*	EPL_DESCRIPTION - Always displayed.&lt;br /&gt;
*	EPL_XF_TYPE - Always displayed.&lt;br /&gt;
*	EPL_XF_DESTINATION - Always displayed.&lt;br /&gt;
*	EPL_XF_ID - Always displayed. This drop-down list will be modified to include ID &amp;quot;EBB&amp;quot;.&lt;br /&gt;
*	EPL_XF_DIRECTION - Always displayed.&lt;br /&gt;
*	EPL_WEB_USER - only if FTP or SOAP transfer types are selected.&lt;br /&gt;
*	EPL_WEB_PASSWORD - only if FTP or SOAP type selected&lt;br /&gt;
*	EPL_DB_CONNECTION - This new field will only display if type &amp;quot;EBB&amp;quot; is selected and will include validation that it must be entered. This will be labelled as &amp;quot;Database Connection&amp;quot;. The field will be a wide entry field (at least double the width of a standard field). &lt;br /&gt;
*	EPL_EXPORT_JOB_TYPES - Display if type is &amp;quot;EBB&amp;quot;. The validation on this field will be modified so that pipe-delimited list of anything can be entered, if the type is &amp;quot;EBB&amp;quot;.&lt;br /&gt;
*	EPL_FILENAME - Filename to match when picking up files. Expected to be &amp;quot;Manifest_*.xml&amp;quot;.&lt;br /&gt;
*	EPL_EMAIL_ERRORS - email address for file processing error notifications.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Auto-Import ==&lt;br /&gt;
=== General ===&lt;br /&gt;
The process will update and create all data as required, committing each as they are processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are instances where the failure reason will result in the following processing:&lt;br /&gt;
* Stop processing this file and all further files (Failed Import).&lt;br /&gt;
* Stop processing this file and process subsequent files (Failed File).&lt;br /&gt;
* Stop processing this order and move to the next order (Failed Order).&lt;br /&gt;
&lt;br /&gt;
Failed Import reasons:&lt;br /&gt;
* Unable to connect to MSA&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Failed File reasons:&lt;br /&gt;
* Standing Data not being created:&lt;br /&gt;
** User does not exist&lt;br /&gt;
** Vehicle does not exist&lt;br /&gt;
** Job Group does not exist&lt;br /&gt;
* Non-DESK manifest is on a load that has already been completed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Failed Order reasons:&lt;br /&gt;
* No details of this order in MSA&lt;br /&gt;
* Job for this order already complete&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reasons why a Manifest file will not create Loads and Jobs:&lt;br /&gt;
* Site does not exist&lt;br /&gt;
* Manifest is a trunk.&lt;br /&gt;
* Jobs are of the wrong type.&lt;br /&gt;
* There are no valid products on the job.&lt;br /&gt;
* There are no valid jobs on a Load.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If there are issues processing, the whole file will be rejected and will need to be reprocessed. However, all data saved to that point will be present.&lt;br /&gt;
&lt;br /&gt;
Audit records will be maintained, identifying successfully processed and failed import files, identifying the reason why a file failed to import. &lt;br /&gt;
&lt;br /&gt;
It is possible for a manifest to generate multiple audit reasons when processing a file. All of these codes will be audited. Multiple audit records may be maintained per file, or a single audit record created with all details in it. This will be decided when developed, based on which method is a more generic solution for the C-ePOD product.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rejected files will be emailed (depending on configuration) and will be stored in the standard Failed files location, as the processes do now.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Note}} The process generating the email will be modified to include the auditing of the file. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When a file is reprocessed, this will over-write and update the existing data, as specified in the processing below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The processing of each file will proceed as follows:&lt;br /&gt;
* Retrieve Manifest files.&lt;br /&gt;
* Filter and validate the manifest file.&lt;br /&gt;
* Create User and Vehicle data.&lt;br /&gt;
* Create a new Load or combine to an existing Load.&lt;br /&gt;
* Create or update jobs on the load, through a link to the MSA view.&lt;br /&gt;
* Create or update products on the jobs.&lt;br /&gt;
* Remove any products from the job not contained in the manifest file.&lt;br /&gt;
* Remove any jobs from the load not contained in the manifest file.&lt;br /&gt;
These areas are covered in the following sections&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=== Retrieve Manifest Files ===&lt;br /&gt;
For FILE transfer type, currently all files in the specified destination folder (EPL_XF_DESTINATION) are processed (using Directory.GetFiles). This will be modified so that, if a filename pattern is specified (in EPOD_XF_CONFIG.EPL_FILENAME), the process will only retrieve and process files matching this pattern (by passing a second parameter to the GetFiles method, specifying the pattern from EPOD_XF_CONFIG.EPL_FILENAME).&lt;br /&gt;
&lt;br /&gt;
For FTP transfer type, the same is true, in that all files are retrieved (using ListDirectory in method GetFileList). No facility exists to pattern-match file names. Therefore the method GetFileList will be modified so that, if a filename pattern is specified (to be passed to an overloaded method in a new parameter, passing EPOD_XF_CONFIG.EPL_FILENAME), the process will only add these to the result if the filename returned matches the pattern provided.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Regardless of whether the file was retrieved through FTP or from the filesystem, each file (representing a single manifest) will be passed to a new processing method to validate and process the contents and create jobs and products. The current process bases this on EPL_MSG_TYPE. This will be extended to check the EPL_XF_ID field - should this be &amp;quot;EBB&amp;quot;, the new processing method will be called.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A file failing to process will not stop subsequent files from processing. However, if the MSA view cannot be connected to, processing will stop (see section Create Jobs for details on the MSA View connection).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Validate the Manifest ===&lt;br /&gt;
This process will receive the manifest contents as an XML file. This file will be downloaded before processing to ensure that all characters that should have been URL encoded have been. The file will be pre-parsed to remove any non printable characters.&lt;br /&gt;
&lt;br /&gt;
The '''depot''' tag will be extracted from the '''manifest/header''' tag contents. The site will be retrieved using the EPL_EXT_FLEET field. If a site is not found with a fleet matching the '''depot''' tag, the manifest will not be processed. {{Note}} This is not an error and will not be audited as such - the manifest will be marked as successfully processed.&lt;br /&gt;
&lt;br /&gt;
The site retrieved will be stored by the process in an EPOD_SITE DAL object.&lt;br /&gt;
&lt;br /&gt;
The '''trailer''' tag will be extracted from '''manifest/header''' tag contents. If this tag starts with the text &amp;quot;TRUNK&amp;quot;, then this manifest will not be processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create Vehicles and Users ===&lt;br /&gt;
The '''driver''' tag will be extracted from the '''manifest/header''' tag contents. &lt;br /&gt;
&lt;br /&gt;
If this driver is set to &amp;quot;WAREHOUSE&amp;quot;, the user ID will be created as this value.&lt;br /&gt;
&lt;br /&gt;
If this is a non-zero value that is not explicitly &amp;quot;WAREHOUSE&amp;quot;, C-ePOD will attempt to create the driver ID (if configured to do so) as the first character of the first name, and up to the first 4 characters of the surname, with a 3-digit unique identifier added to them. The case will be converted to uppercase.&lt;br /&gt;
 &lt;br /&gt;
For example:&lt;br /&gt;
*         &amp;quot;David Eastman&amp;quot; will become &amp;quot;DEAST001&amp;quot;&lt;br /&gt;
*         &amp;quot;SMITH JOHN&amp;quot; will become &amp;quot;SJOHN001&amp;quot;&lt;br /&gt;
*         &amp;quot;DEREK MAY&amp;quot; will become &amp;quot;DMAY001&amp;quot;&lt;br /&gt;
*         &amp;quot;TRUNKER M25&amp;quot;. TRUNKER M25 will become &amp;quot;TM25001&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The process will attempt to find this user using the Site ID and the generated User ID above. If a record is found, the process will compare the user name in the XML file to the user name on the database. If different, the 3-digit id will be incremented by 1 and the process repeated until a matching EPOD_USER record is found, or one is not found for this ID.&lt;br /&gt;
&lt;br /&gt;
Check the EPOD_SITE.EPL_IMPORT_CREATE_SD_FLAG. If this is set to &amp;quot;N&amp;quot; and an EPOD_USER record is not found, the file should be rejected. An audit record of &amp;quot;User X Not Found&amp;quot; shall be created.&lt;br /&gt;
&lt;br /&gt;
If one is not found and EPOD_SITE.EPL_IMPORT_CREATE_SD_FLAG is &amp;quot;Y&amp;quot;, the EPOD_USER record will be created and updated as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Field	!!Populated by&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SITE_ID || EPOD_SITE.EPL_SITE_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_USER_ID || either &amp;quot;WAREHOUSE&amp;quot;, or as generated above&lt;br /&gt;
|-&lt;br /&gt;
|EPL_USER_PASSWORD || set to the same value as the user ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_USER_NAME || '''driver'''&lt;br /&gt;
|-&lt;br /&gt;
|EPL_USER_ADMIN || &amp;quot;N&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_USER_ACTIVE || &amp;quot;Y&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_USER_ACTIVITY_DATE || 0&lt;br /&gt;
|-&lt;br /&gt;
|EPL_USER_ACTIVITY_TIME || 0&lt;br /&gt;
|-&lt;br /&gt;
|EPL_PASSWORD_VISIBLE_IND || 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The '''vehiclereg''' tag will be extracted from the '''manifest/header''' tag contents. If this is a non-zero value, C-ePOD will attempt to create the driver ID (if configured to do so).&lt;br /&gt;
&lt;br /&gt;
The process will attempt to find this vehicle using the Site ID and the Vehicle ID as the Vehicle Reg above. If a record is found, this will be stored by the process as EPOD_VEHICLE.&lt;br /&gt;
&lt;br /&gt;
Check the EPOD_SITE.EPL_IMPORT_CREATE_SD_FLAG. If this is set to &amp;quot;N&amp;quot; and an EPOD_VEHICLE record is not found, the file should be rejected. An audit record of &amp;quot;Vehicle X Not Found&amp;quot; shall be created.&lt;br /&gt;
&lt;br /&gt;
If one is not found and EPOD_SITE.EPL_IMPORT_CREATE_SD_FLAG is &amp;quot;Y&amp;quot;, the EPOD_VEHICLE record will be created and updated as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Field	!!Populated by&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SITE_ID || EPOD_SITE.EPL_SITE_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_VEHICLE_ID || '''vehiclereg'''&lt;br /&gt;
|-&lt;br /&gt;
|EPL_VEHICLE_REG || '''vehiclereg'''&lt;br /&gt;
|-&lt;br /&gt;
|EPL_DESCRIPTION || '''vehiclereg'''&lt;br /&gt;
|-&lt;br /&gt;
|EPL_STATUS || &amp;quot;Y&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note}} Data created on these tables will be truncated. Comparisons to this data as described above with be truncated before comparison, in case the data is space-filled in the XML file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a Load ===&lt;br /&gt;
A load will be attempted to be found using the following data, providing that at least a vehicle or user has been provided:&lt;br /&gt;
* EPL_SITE_ID - EPOD_SITE.EPL_SITE_ID&lt;br /&gt;
* EPL_LOAD_START_PLANNED_DATE - '''deliverydate''' tag. Note that this value must be reformatted to YYYYMMDD format from DD-MM-YYYY format.&lt;br /&gt;
* EPL_VEHICLE_ID - EPOD_VEHICLE.EPL_VEHICLE_ID if one is present, otherwise this is not set as an parameter for the selection.&lt;br /&gt;
* EPL_USER_ID - EPOD_USER.EPOD_USER_ID if one is present, otherwise this is not set as an parameter for the selection.&lt;br /&gt;
* EPL_STATUS - Not equal to &amp;quot;C&amp;quot; &amp;quot;X&amp;quot; if the '''driver''' attribute is not explicitly set to &amp;quot;WAREHOUSE&amp;quot;, otherwise this is not set as an parameter for the selection.&lt;br /&gt;
&lt;br /&gt;
If one is not found, a new load will be created on EPOD_LOAD as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Field	!!Populated by&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SITE_ID ||EPOD_SITE.EPL_SITE_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_LOAD_ID || generated by the EPOD system.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_LOAD_START_PLANNED_DATE || extracted from the '''deliverydate''' tag. Note that this value must be reformatted to YYYYMMDD format from DD-MM-YYYY format.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_LOAD_START_PLANNED_TIME || extracted from the '''starttime''' tag. Note that this value must be reformatted (removing the embedded colon character and adding &amp;quot;0000&amp;quot; to the end. Note that if this tag is not present or blank, this field should be set to 6000000.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_LOAD_END_PLANNED_DATE || as the Load Start Planned Date.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_LOAD_END_PLANNED_TIME || 0&lt;br /&gt;
|-&lt;br /&gt;
|EPL_VEHICLE_ID || EPOD_VEHICLE.EPL_VEHICLE_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_USER_ID || EPOD_VEHICLE.EPL_USER_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_STATUS || &amp;quot;P&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_LOAD_INFORMATION || the ''number'' attribute of the '''manifest''' tag concatenated with the '''addinstruct''' tag, delimited by a dash.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If a load is found and the manifest is ''not'' for desk collection (i.e. where the '''driver''' tag value is not explicitly &amp;quot;WAREHOUSE&amp;quot;), the status (EPL_STATUS) should be checked. If this value is not &amp;quot;P&amp;quot; then the file should be rejected. An audit record of &amp;quot;Load X at wrong status&amp;quot; shall be created.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If a load is found, the Load Information field EPL_LOAD_INFORMATION should be checked that it contains the text built from:&lt;br /&gt;
* the ''number'' attribute of the '''manifest''' tag concatenated with the '''addinstruct''' tag, delimited by a dash.&lt;br /&gt;
If it does not contain this, this should be added to the text already in the field, delimited by a newline character.&lt;br /&gt;
&lt;br /&gt;
The load (found or created) should be stored in an EPOD_LOAD object and updated.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create Jobs ===&lt;br /&gt;
The process will find and store the highest sequence of any jobs already attached to the EPOD_LOAD object, by checking the content of the EPOD_JOBS list on the EPOD_LOAD object. &lt;br /&gt;
&lt;br /&gt;
The process will extract the list of allowed order prefixes from the EPOD_XF_CONFIG.EPL_EXPORT_JOB_TYPES field. {{Note}} If this parameter is empty, all orders will be processed.&lt;br /&gt;
&lt;br /&gt;
The process will loop through all instances of the '''order''' tag in the ''manifest/data'' tag. Note that this is separated by a '''customer''' tag.&lt;br /&gt;
&lt;br /&gt;
Each '''order''' tag will be processed to create EPOD_JOB records, which will be added to the EPOD_LOAD.EPOD_JOBS list.&lt;br /&gt;
&lt;br /&gt;
The ''sopnumber'' attribute of the '''order''' tag will be extracted. if the attribute does not exist or has no value, this tag may be skipped. &lt;br /&gt;
&lt;br /&gt;
The trimmed attribute value will be checked to see whether the value begins with any of the allowed order prefixes. If it does not, then then the order will not be processed. &lt;br /&gt;
&lt;br /&gt;
A connection will be made to the MSA database for the order details. This will be achieved by opening a connection using the connection information stored in EPOD_XF_CONFIG.EPL_DB_CONNECTION. The connection should be attempted several times (for example, 3 times). If a connection cannot be made, then the file should be rejected. An audit record of &amp;quot;Order X: Cannot connect to MSA&amp;quot; shall be created. {{Note}} As this is a fundamental requirement of the process, should this fail, processing of this file ''and all others'' should be terminated for this run.&lt;br /&gt;
&lt;br /&gt;
The connection details will be specified in a connection string in EPOD_XF_CONFIG.EPL_DB_CONNECTION.&lt;br /&gt;
&lt;br /&gt;
{{Note}} At this time, the following information has not yet been confirmed. &lt;br /&gt;
* Connection details (IP, user, password, port)&lt;br /&gt;
* Database type&lt;br /&gt;
* View name&lt;br /&gt;
&lt;br /&gt;
{{Note}} This MSA view is used from this point onwards for all details. Should the connection fail when attempting to retrieve subsequent records from the MSA view, the connection should be attempted to be re-established, again retrying several times, to ensure that this process is predominantly uninterrupted. &lt;br /&gt;
&lt;br /&gt;
In the instance where the connection fails, the file need not be rejected and moved to the Failure area - it can be left to be reprocessed immediately on the next run.&lt;br /&gt;
&lt;br /&gt;
When the connection is established, the details of the order will be retrieved from the MSA view using a standard SQL query, querying on the SOP Number.&lt;br /&gt;
&lt;br /&gt;
Should the view return no details, then the order will not be processed. An audit record of &amp;quot;Order X: No details in MSA&amp;quot; shall be created. The process will continue with the next order in the XML file.&lt;br /&gt;
&lt;br /&gt;
The Load will be checked to see whether the order already exists - the process will look for the order in EPOD_LOAD.EPOD_JOBS, where the job code (EPL_JOB_CODE_ is equal to the trimmed value of the '''sopnumber''' tag. If an order is found, an EPOD_JOB object will be created and set to the value of the job in the EPOD_LOAD.EPOD_JOBS EPOD_JOB object by reference.&lt;br /&gt;
&lt;br /&gt;
If the job found is already complete (EPL_STATUS = &amp;quot;C&amp;quot;), then the process will skip updating this order. An audit record of &amp;quot;Order X: already complete&amp;quot; shall be created. The process will continue with the next order in the XML file.&lt;br /&gt;
&lt;br /&gt;
If a job is not found, a new job will be created using the key values:&lt;br /&gt;
*	EPL_SITE_ID - EPOD_LOAD.EPL_SITE_ID.&lt;br /&gt;
*	EPL_LOAD_ID - EPOD_LOAD.EPL_LOAD_ID.&lt;br /&gt;
*	EPL_JOB_TYPE - If the left 3 characters of the '''sopnumber''' tag are &amp;quot;RTN&amp;quot;, set this value to &amp;quot;C&amp;quot;, otherwise set this value to &amp;quot;D&amp;quot;.&lt;br /&gt;
*	EPL_JOB_CODE - the trimmed value of the '''sopnumber''' tag.&lt;br /&gt;
A value in EPL_JOB_ID will be generated for this job at this stage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Job Group should be calculated as follows:&lt;br /&gt;
* If the EPL_JOB_TYPE is &amp;quot;C&amp;quot;, set to &amp;quot;COL&amp;quot;&lt;br /&gt;
* else if EPOD_LOAD.EPL_USER_ID = &amp;quot;WAREHOUSE&amp;quot;, set to &amp;quot;DESK&amp;quot;&lt;br /&gt;
* else set to &amp;quot;DEL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The process will attempt to find this Job Group using:&lt;br /&gt;
*	EPL_SITE_ID - EPOD_LOAD.EPL_SITE_ID.&lt;br /&gt;
*	EPL_JOB_GROUP - as set above.&lt;br /&gt;
If a record is found, this will be stored by the process as an EPOD_JOB_GROUPS DAL object.&lt;br /&gt;
&lt;br /&gt;
Check the EPOD_SITE.EPL_IMPORT_CREATE_SD_FLAG. If this is set to &amp;quot;N&amp;quot; and an EPOD_JOB_GROUPS record is not found, the file should be rejected. An audit record of &amp;quot;Job Group X Not Found&amp;quot; shall be created.&lt;br /&gt;
&lt;br /&gt;
If one is not found and EPOD_SITE.EPL_IMPORT_CREATE_SD_FLAG is &amp;quot;Y&amp;quot;, the EPOD_JOB_GROUPS record will be created as follows:&lt;br /&gt;
*	EPL_SITE_ID - EPOD_SITE.EPL_SITE_ID&lt;br /&gt;
*	EPL_JOB_GROUP - as set above.&lt;br /&gt;
*	EPL_DESCRIPTION:&lt;br /&gt;
** If EPL_JOB_GROUP is &amp;quot;COL&amp;quot;, set to &amp;quot;Collections&amp;quot;.&lt;br /&gt;
** If EPL_JOB_GROUP is &amp;quot;DEL&amp;quot;, set to &amp;quot;Deliveries&amp;quot;.&lt;br /&gt;
** If EPL_JOB_GROUP is &amp;quot;DESK&amp;quot;, set to &amp;quot;Desk Collections&amp;quot;.&lt;br /&gt;
All flags will be set as their default values.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The customer code, invoice address and contact information will be retrieved from the MSA view. The customer code will be checked as to whether it is already created in the system, by checking for an EPOD_CUSTOMER record using the keys:&lt;br /&gt;
*	EPL_SITE_ID - EPOD_SITE.EPL_SITE_ID&lt;br /&gt;
*	EPL_CUSTOMER_CODE - column CUSTNMBR from the MSA view.&lt;br /&gt;
&lt;br /&gt;
If this record does not exist, or a record does exist but the details are different, the record will be updated as follows:&lt;br /&gt;
If one is not found, a new customer will be created on EPOD_CUSTOMER as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Field	!!Populated by&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SITE_ID || EPOD_SITE.EPL_SITE_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_CUSTOMER_CODE || CUSTNMBR&lt;br /&gt;
|-&lt;br /&gt;
|EPL_CUSTOMER_NAME || CUSTNAME&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_1 || InvAdd1&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_2 || InvAdd2&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_3 || InvAdd3&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_4 || InvCity&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_5 || InvState&lt;br /&gt;
|-&lt;br /&gt;
|EPL_POSTCODE || InvZip (Spaces removed and truncated to 8 characters)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Note}} All values above are leading/trailing space trimmed unless otherwise stated.&lt;br /&gt;
&lt;br /&gt;
The delivery address and contact information will then be compared to this Invoice address, comparing the following items:&lt;br /&gt;
*	EPL_CUSTOMER_NAME - DelName&lt;br /&gt;
*	EPL_ADDRESS_1 - DelAdd1&lt;br /&gt;
*	EPL_ADDRESS_2 - DelAdd2&lt;br /&gt;
*	EPL_ADDRESS_3 - DelAdd3&lt;br /&gt;
*	EPL_ADDRESS_4 - DelCity&lt;br /&gt;
*	EPL_ADDRESS_5 - DelState&lt;br /&gt;
*	EPL_POSTCODE - DelZip &lt;br /&gt;
&lt;br /&gt;
If any of the values are different, a Job Address will be created through an EPOD_JOB_ADDRESS DAL object, populated as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Field	!!Populated by&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SITE_ID || EPOD_SITE.EPL_SITE_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_JOB_ID || EPOD_JOB.EPL_JOB_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_JOB_TYPE || EPOD_JOB.EPL_JOB_TYPE&lt;br /&gt;
|-&lt;br /&gt;
|EPL_NAME || DelName&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_1 || DelAdd1&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_2 || DelAdd2&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_3 || DelAdd3&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_4 || DelCity&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_5 || DelState&lt;br /&gt;
|-&lt;br /&gt;
|EPL_POSTCODE || DelZip (Spaces removed and truncated to 8 characters)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note}} All values above are leading/trailing space trimmed unless otherwise stated.&lt;br /&gt;
&lt;br /&gt;
If this is not the first job being processed for the load, the process will check whether the job being created is not the first job being created for the customer code in this manifest. If this is not a subsequent job for this customer code, blank any stored values for the following fields:&lt;br /&gt;
* EPL_SEQUENCE&lt;br /&gt;
* EPL_LINKED_ID&lt;br /&gt;
&lt;br /&gt;
If this is not a subsequent job for this customer code, the process will then loop through existing jobs in EPOD_LOAD.EPOD_JOBS in reverse sequence, looking for any job that matches as follows:&lt;br /&gt;
* EPL_CUSTOMER_CODE is the same&lt;br /&gt;
* EPL_STATUS not &amp;quot;C&amp;quot; or &amp;quot;X&amp;quot;&lt;br /&gt;
* EPL_JOB_TYPE is the same as the job being created.&lt;br /&gt;
* The delivery address is the same as the job being created.&lt;br /&gt;
&lt;br /&gt;
If a match is found, check the value of the field EPL_LINKED_ID. If there is no value, set this to the value in the record's EPL_SEQUENCE field and update the object. The process will then store the values in the following fields:&lt;br /&gt;
* EPL_SEQUENCE - EPL_SEQUENCE of the job found&lt;br /&gt;
* EPL_LINKED_ID - EPL_LINKED_ID of the job found&lt;br /&gt;
&lt;br /&gt;
The EPOD_JOB object will then be updated with the values as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Field	!!Populated by&lt;br /&gt;
|-&lt;br /&gt;
|EPL_JOB_GROUP	|| The calculated Job Group above&lt;br /&gt;
|-&lt;br /&gt;
|EPL_JOB_INSTRUCTION	|| Manifest No (manfest), Order comments (OrdComm) and Delivery Instructions (DelIns) concatenated together with a space separator.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_STATUS	|| &amp;quot;P&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_CUSTOMER_CODE	|| The customer code (CUSTNMBR).&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SEQUENCE	|| Stored value of EPL_SEQUENCE if there is one, or the maximum value of sequences of jobs on this load, plus 1.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_START_PLANNED_DATE	|| ReqShipDate&lt;br /&gt;
|-&lt;br /&gt;
|EPL_START_PLANNED_TIME	|| StartTime if populated, else 06000000 (06:00)&lt;br /&gt;
|-&lt;br /&gt;
|EPL_END_PLANNED_DATE	|| ReqShipDate&lt;br /&gt;
|-&lt;br /&gt;
|EPL_END_PLANNED_TIME	|| DelTime if populated, else FinishTime if populated, else 14000000 (14:00).&lt;br /&gt;
|-&lt;br /&gt;
|EPL_JOB_CODE	|| the trimmed value of the '''sopnumber''' tag.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_CUST_REF	|| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_OFFICE_INSTRUCTION	|| tcsFLST_Route&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SO_NUMBER	|| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ORDER_DATE	|| CREATDDT&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SALES_CONTACT	|| UserID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_OWNER_NAME	|| The sales territory (SALSTERR)&lt;br /&gt;
|-&lt;br /&gt;
|EPL_EXT_REF	|| The manifest (extracted from the ''number'' attribute of the '''manifest''' tag)&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ACCOUNT	|| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_LINKED_ID	|| Stored value of EPL_LINKED_ID if there is one.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_TIMEZONE	|| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_LOAD_LOCATION	|| Originating Depot&lt;br /&gt;
|-&lt;br /&gt;
|EPL_TTM_STOP_NUMBER	|| Set to the value in EPL_SEQUENCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note}} that if updating a job at EPL_STATUS of &amp;quot;X&amp;quot;, any existing products/containers associated with this job will also be reset to pending status.&lt;br /&gt;
&lt;br /&gt;
The process will then store the following:&lt;br /&gt;
* EPL_CUSTOMER_CODE - the Customer code last processed in this manifest file.&lt;br /&gt;
* EPL_SEQUENCE - EPL_SEQUENCE of the job created&lt;br /&gt;
* EPL_LINKED_ID - EPL_LINKED_ID of the job created&lt;br /&gt;
&lt;br /&gt;
The job will be updated and saved at this point.&lt;br /&gt;
&lt;br /&gt;
The Job ID of the job created will be added to a comma-delimited string of jobs processed for this manifest.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create Products ===&lt;br /&gt;
The process will loop through each record from MSA view, in order to create the product lines. {{Note}} All lines in the MSA view detail product information, including the first line.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The value in UOFM field of the MSA view will be looked up against the EPOD_REASON_CODE table matching the following parameters:&lt;br /&gt;
* EPL_SITE_ID - EPOD_JOB.EPL_SITE_ID&lt;br /&gt;
* EPL_REASON_CODE - UOFM&lt;br /&gt;
&lt;br /&gt;
If a record is not found, create an EPOD_PRODUCT DAL object with values set as follows:&lt;br /&gt;
* EPL_SITE_ID - EPOD_JOB.EPL_SITE_ID&lt;br /&gt;
* EPL_REASON_CODE - UOFM&lt;br /&gt;
* EPL_DESCRIPTION - UOFM&lt;br /&gt;
* EPL_CONV_TYPE - &amp;quot;MULTIPLY&amp;quot;&lt;br /&gt;
* EPL_CONV_VALUE - 1000&lt;br /&gt;
* EPL_CONV_CODE - &amp;quot;&amp;quot;&lt;br /&gt;
Update this UOM code.&lt;br /&gt;
&lt;br /&gt;
If the value of EPOD_PRODUCT.EPL_CONV_TYPE is &amp;quot;EXCLUDE&amp;quot;, this product will not be added - the process will move to the next record in the MSA view.&lt;br /&gt;
&lt;br /&gt;
If the value of EPOD_PRODUCT.EPL_CONV_TYPE is &amp;quot;MULTIPLY&amp;quot;, multiply the value in the QUANTITY field of the MSA view by the value stored in EPL_CONV_VALUE and store as the quantity.&lt;br /&gt;
&lt;br /&gt;
If the value of EPOD_PRODUCT.EPL_CONV_TYPE is &amp;quot;ROUND&amp;quot;, round the value in the QUANTITY field of the MSA view by the value stored in EPL_CONV_VALUE and store as the quantity.&lt;br /&gt;
&lt;br /&gt;
If the value of EPOD_PRODUCT.EPL_CONV_TYPE is &amp;quot;DEFAULT&amp;quot;, store the value in the QUANTITY field of the MSA view as the quantity.&lt;br /&gt;
&lt;br /&gt;
If the value of EPOD_PRODUCT.EPL_CONV_CODE has a valid value, store the EPL_CONV_CODE as the UOM.&lt;br /&gt;
&lt;br /&gt;
If the value of EPOD_PRODUCT.EPL_CONV_CODE is blank or null, store the UOFM field from the MSA view as the UOM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The process will check to see if a product already exists on the job by checking the EPOD_JOB.EPOD_PRODUCTS list for an object with the following values:&lt;br /&gt;
* EPL_SITE_ID - EPOD_JOB.EPL_SITE_ID&lt;br /&gt;
* EPL_JOB_ID - EPOD_JOB.EPL_JOB_ID&lt;br /&gt;
* EPL_CONTAINER_ID - &amp;quot;000000000000000&amp;quot; (15 zeroes in a string, denoting a loose product)&lt;br /&gt;
* EPL_PRODUCT_CODE - ITEMNMBR &lt;br /&gt;
* EPL_SEQUENCE - linenumber/16384 (first 4 characters of this if not a whole number)&lt;br /&gt;
&lt;br /&gt;
Note that ITEMNMBR and ITEMDESC may contain control characters not compatible with the EPOD device software. These should be stripped out before saving into the EPOD database.&lt;br /&gt;
&lt;br /&gt;
If one is not found, an EPOD_PRODUCT object will be created and added to the EPOD_JOB.EPOD_PRODUCTS list.&lt;br /&gt;
&lt;br /&gt;
If one is found or created above, an EPOD_PRODUCT object will be pointed to this object by reference.&lt;br /&gt;
&lt;br /&gt;
The EPOD_PRODUCT object (found or created) will have the fields updated as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Field	!!Populated by&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SITE_ID || EPOD_JOB.EPL_SITE_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_JOB_ID || EPOD_JOB.EPL_JOB_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_CONTAINER_ID || &amp;quot;000000000000000&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_PRODUCT_CODE || ITEMNMBR&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SEQUENCE || linenumber/16384 (first 4 characters of this if not a whole number)&lt;br /&gt;
|-&lt;br /&gt;
|EPL_DESCRIPTION || ITEMDESC, truncated to 40 characters&lt;br /&gt;
|-&lt;br /&gt;
|EPL_PRODUCT_QTY_PLANNED || The quantity calculated and stored above&lt;br /&gt;
|-&lt;br /&gt;
|EPL_PRODUCT_QTY_CASE || SellPack if populated and numeric, else 0.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_STATUS || &amp;quot;P&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_PRODUCT_WEIGHT || ITEMSHWT&lt;br /&gt;
|-&lt;br /&gt;
|EPL_CUST_REF || CustordNo&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ITEM_TYPE ||&lt;br /&gt;
|-&lt;br /&gt;
|EPL_UNIT_TYPE || The UOM stored above.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_DESCRIPTION_LONG || ITEMDESC and ebbFLTX_Sales_Comments concatenated with CR/LF characters.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_PRODUCT_QTY_ORDERED || Set to the same value as EPL_PRODUCT_QTY_PLANNED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The product record on EPOD_PRODUCT will then be updated.&lt;br /&gt;
&lt;br /&gt;
The Product Code of the product created will be added to a comma-delimited string of products processed for this job.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Remove Products not on the Job ===&lt;br /&gt;
All subsequent records on the MSA view will be processed in this manner and stored on the job.&lt;br /&gt;
&lt;br /&gt;
When all products are processed, the process will check through all products on the job and compare to the list of products processed on this manifest for this job. Any products on the job but not in the manifest will be deleted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If, after this, there are no products on the job, the job will be deleted. An audit record of &amp;quot;No Products on Order X - order deleted&amp;quot; shall be created.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Remove Jobs not on the Load for that Manifest ===&lt;br /&gt;
All subsequent order tags in the Manifest will be processed in this manner and stored on the load.&lt;br /&gt;
&lt;br /&gt;
When all orders on the manifest are processed, the process will check through all jobs on the load (with that Manifest number, as stored in EPL_EXT_REF) and compare to the list of jobs processed on this manifest. Any jobs for this manifest on the load but not in the manifest will be deleted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If, after this, there are no jobs on the load, the load will be deleted. An audit record of &amp;quot;No Jobs on Load X - load deleted&amp;quot; shall be created.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- MEDIA LANDSCAPE YES --&amp;gt; &lt;br /&gt;
= Appendix A: TEST PLAN  =&lt;br /&gt;
{{TestPlan_Header&lt;br /&gt;
|Title={{#var:Doc_Title}}&lt;br /&gt;
|Log={{#var:Reference}}&lt;br /&gt;
|Description=Testing the new EBB paper interface can be configured and works as expected.&lt;br /&gt;
|MenuAccess=N/A&lt;br /&gt;
|Prerequisites=A system configured as EBB Paper.&lt;br /&gt;
|Objective=To test that: UOMs may be entered with conversion types; the EBB Paper interface may be configured and; the EBB paper interface works as expected.&lt;br /&gt;
}} {{ #vardefine: Cycle | 0 }}{{ #vardefine: SubCycle | 0 }}&lt;br /&gt;
{{TestPlan_CycleHeader&lt;br /&gt;
|Cycle={{ #vardefineecho: Cycle | {{ #expr: {{ #var: Cycle }} + 1 }} }}{{ #vardefine: SubCycle | {{ #var: Cycle }} }}&lt;br /&gt;
|Title=Admin&lt;br /&gt;
|Notes=&amp;amp;nbsp;&lt;br /&gt;
}} &amp;lt;!--INSERT TESTS HERE --&amp;gt; {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a new Interface type as expected for EBB Paper.&lt;br /&gt;
|Result=The new EBB Paper interface can be configured and edited as expected.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a new reason code. Select type &amp;quot;UOM&amp;quot;.&lt;br /&gt;
|Result=Type UOM can be selected from the drop-down list. The Conversion fields are displayed and defaulted as expected.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Select Conversion Type &amp;quot;Round&amp;quot; and &amp;quot;Multiply&amp;quot;.&lt;br /&gt;
|Result=A Value may be entered.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Save the code. Enter another code. Select other Conversion Types.&lt;br /&gt;
|Result=A Value may not be entered.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Save the code. Enter another code with an Xref code and conversion type &amp;quot;As Received&amp;quot;.&lt;br /&gt;
|Result=The XRef code is entered and saved.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Find all UOM codes. &lt;br /&gt;
|Result=UOM can be selected as a filter element. All UOM codes are displayed. &lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Edit UOM codes.&lt;br /&gt;
|Result=The codes are displayed as they were entered. The Conversion fields are displayed as expected.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_CycleFooter}} &lt;br /&gt;
{{TestPlan_CycleHeader&lt;br /&gt;
|Cycle={{ #vardefineecho: Cycle | {{ #expr: {{ #var: Cycle }} + 1 }} }}{{ #vardefine: SubCycle | {{ #var: Cycle }} }}&lt;br /&gt;
|Title=Interface&lt;br /&gt;
|Notes=Set up the site to NOT create standing data. Configure the interface for FTP file transfer. Configure the MSA connection to be incorrect.&lt;br /&gt;
}} &amp;lt;!--INSERT TESTS HERE --&amp;gt; {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create valid manifest files in the configured FTP area, one named &amp;quot;Manifest_test1.xml&amp;quot; and one named &amp;quot;incorrect.xml&amp;quot;. Both should have a user that does not match an existing vehicle. Run the import process.&lt;br /&gt;
|Result=Only the manifest matching the filename is processed. This is rejected for an invalid user. The file is placed in a Failed directory.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Change the interface configuration to FILE transfer type. Create valid manifest files in the configured FILE area, one named &amp;quot;Manifest_test2.xml&amp;quot; and one named &amp;quot;incorrect.xml&amp;quot;. Both should have a vehicle that does not match an existing vehicle, but with a valid user. Run the import process.&lt;br /&gt;
|Result=Only the manifest matching the filename is processed. This is rejected for an invalid vehicle. The file is placed in a Failed directory.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Process a manifest (any transfer method) with a valid user and vehicle, with job groups not created.&lt;br /&gt;
|Result=The file is rejected for invalid job group. The file is placed in a Failed directory.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Configure the system to create standing data. Create two valid (but different) manifests, with a user and vehicle that does not match any existing data. Ensure there is a valid job with at least one valid product.&lt;br /&gt;
|Result=The first file is processed and rejected due to being unable to connect to MSA. The second file is not processed at all.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Configure the interface with the correct MSA view connection details. Process the manifests above again.&lt;br /&gt;
|Result=The files are processed without errors. The Vehicle is created. The Users is created. The Job Group is created. The Customer is created. The Load is created. The Job is created. The products are created. The file is audited as processed successfully. The file is placed in a Success directory.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a manifest almost identical to the last manifest, but with different Load start time, Job Start time, product quantities. Ensure the invoice address is changed. Ensure that there are comments on the Manifest. Process the manifest.&lt;br /&gt;
|Result=The load, job and products are updated. The manifest comments are appended to the Load Instructions. The invoice (customer) address is updated.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a manifest for the same date, vehicle and user, with orders with one valid sopnumber, and all others as invalid SOP numbers. Ensure the valid order is not for the same customer as the prior manifest. Process the manifest.&lt;br /&gt;
|Result=A job is created on the load for the one valid order. All others are not processed. The job is sequenced after all others&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a manifest for the same date, vehicle and user, with an order with a valid INV sopnumber. Ensure the order is for the same customer as the first manifest. Process the manifest.&lt;br /&gt;
|Result=A job is created on the load for the order. The job is sequenced and linked to the matching job from the first manifest.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a manifest for the same date, vehicle and user, with orders with a valid sopnumber with the same customer code as the last manifest. Ensure two are RTN jobs and two are INV jobs. Process the manifest.&lt;br /&gt;
|Result=Jobs are created on the load for the orders. The jobs are correctly identified as Collection and Delivery jobs, with the correct Job Group. The jobs are sequenced after any existing jobs on the load. The RTN jobs will have the same sequence and linked ID. The INV jobs will have the same sequence and linked ID as the existing INV job on the load for this customer.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a manifest for the same date, vehicle and user, with orders with a valid sopnumber with the same customer code as the last manifest. Ensure two are RTN jobs and two are INV jobs. Ensure the delivery address is different to the invoice address. Process the manifest.&lt;br /&gt;
|Result=Jobs are created on the load for the orders. The jobs are correctly identified as Collection and Delivery jobs, with the correct Job Group. The jobs are sequenced after any existing jobs on the load. The RTN jobs will have the same sequence and linked ID. The INV jobs will have the same sequence and linked ID. No jobs will be linked to existing jobs on the manifest. The Job Address is created for these loads.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a manifest for a different date, vehicle and user, with orders with valid sopnumbers, for many customers. Ensure that they have a mix of UOMs configured with Round, Multiply, As Received, Exclude and Xref Code conversions, as well as a product without a configured UOM.&lt;br /&gt;
|Result=The jobs and products are created as expected. The Exclude product is not created. The quantities are set as per the conversion type rules. The unknown UOM is created with default values.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Complete or cancel the load created. Process the same manifest file.&lt;br /&gt;
|Result=The manifest is rejected for invalid load status.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Process a DESK COLLECT manifest with a user of &amp;quot;WAREHOUSE&amp;quot;&lt;br /&gt;
|Result=A load is created. The user is created.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Complete or cancel the load created. Process another DESK COLLECT manifest file.&lt;br /&gt;
|Result=A new load is created. &lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Process a manifest with a job with no valid products.&lt;br /&gt;
|Result=The file is processed successfully. Audit history is recorded as the job having no products, and the load having no jobs.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_CycleFooter}} &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- MEDIA LANDSCAPE NO --&amp;gt; &lt;br /&gt;
{{Doc_Appendix&lt;br /&gt;
|Appendix=B&lt;br /&gt;
|Estimate=Y&lt;br /&gt;
|Glossary=EPOD&lt;br /&gt;
|Ref1=[[REQ 343463 EBB Paper Solution Design]]&lt;br /&gt;
|RefV1=2.0&lt;br /&gt;
|RefDate1=01/08/2017&lt;br /&gt;
|EREQ=0&lt;br /&gt;
|EEST=0&lt;br /&gt;
|EFS=2.5&lt;br /&gt;
|ETS=0&lt;br /&gt;
|EDEV=15.5&lt;br /&gt;
|ESTT=3.50&lt;br /&gt;
|EIMP=1.25&lt;br /&gt;
|EPM=1.5&lt;br /&gt;
|REQ=0&lt;br /&gt;
|EST=0&lt;br /&gt;
|FS=0.0&lt;br /&gt;
|TS=0&lt;br /&gt;
|DEV=5&lt;br /&gt;
|ST=0.0&lt;br /&gt;
|IMP=0.0&lt;br /&gt;
|PM=0.0&lt;br /&gt;
|Client={{#var:Client}}&lt;br /&gt;
|Year={{#var:Year}}&lt;br /&gt;
|FSEST=Y&lt;br /&gt;
|FOC=N&lt;br /&gt;
|Rev1=Matt Turner&lt;br /&gt;
|Rev1Title=OBSL Account Manager&lt;br /&gt;
|Rev2=Rebecca Elliott&lt;br /&gt;
|Rev2Title=EBB Paper Representative&lt;br /&gt;
}}&amp;lt;/div&amp;gt; &lt;br /&gt;
[[Category:{{#var:Client}} FS]]&lt;/div&gt;</summary>
		<author><name>AppaduN</name></author>
	</entry>
	<entry>
		<id>https://calidusassist.adcservices.apteancloud.com/calidus-assist/OBS/index.php?title=FS_344273_SCR-343463-01_EBB_Paper_Bespoke_Import_Interface&amp;diff=6002</id>
		<title>FS 344273 SCR-343463-01 EBB Paper Bespoke Import Interface</title>
		<link rel="alternate" type="text/html" href="https://calidusassist.adcservices.apteancloud.com/calidus-assist/OBS/index.php?title=FS_344273_SCR-343463-01_EBB_Paper_Bespoke_Import_Interface&amp;diff=6002"/>
		<updated>2018-06-07T15:22:37Z</updated>

		<summary type="html">&lt;p&gt;AppaduN: Minor corrections&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;noprint&amp;quot;&amp;gt;&lt;br /&gt;
{{#vardefine:Client|EBB}}&lt;br /&gt;
{{#vardefine:ClientName|EBB Paper}}&lt;br /&gt;
{{#vardefine:System|''CALIDUS'' ePOD}}&lt;br /&gt;
{{#vardefine:Doc_Title|Bespoke Import Interface}}&lt;br /&gt;
{{#vardefine:Version|1.1}}&lt;br /&gt;
{{#vardefine:Date|10th August 2017}}&lt;br /&gt;
{{#vardefine:Reference|344273 SCR-343463-01}}&lt;br /&gt;
{{#vardefine:Year|2017}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{Doc_Title&lt;br /&gt;
|Client={{#var:ClientName}}&lt;br /&gt;
|System={{#var:System}}&lt;br /&gt;
|Title={{#var:Doc_Title}}&lt;br /&gt;
|Reference=FS {{#var:Reference}}&lt;br /&gt;
|Version={{#var:Version}}&lt;br /&gt;
|Date={{#var:Date}}&lt;br /&gt;
|Year={{#var:Year}}&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TOC --&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;noprint&amp;quot;&amp;gt;&lt;br /&gt;
= Functional Overview  =&lt;br /&gt;
== Client Requirement  ==&lt;br /&gt;
SCR-343463-01: Bespoke Import Interface&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OBS Logistics have been requested to write the interface in order to speed up the delivery of the project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The loads are interfaced from MSA in a custom XML format in a flat-file, after the routes are planned. A button is pressed when the manifest is finished planning to create this file.&lt;br /&gt;
&lt;br /&gt;
{{Note}} The manifests are used for picking. If additional orders are added to the vehicle (add-ons), the orders are placed on a separate manifest, for the same vehicle on the same day. This is because adding orders to an existing manifest (which is possible) will confuse the pickers and potentially result in double picks. This occurs quite frequently on radial deliveries.&lt;br /&gt;
&lt;br /&gt;
This file does not contain all the information required to create the jobs. Predominantly, address information and product case details are missing from this interface file. The remaining information is to be accessed directly from a view on the ERP system, running a SQL Server database.&lt;br /&gt;
&lt;br /&gt;
== Solution Overview ==&lt;br /&gt;
The interface created will be triggered by the receipt of the TMS XML file. The processing of the jobs on this file will retrieve the information on the orders from a view available in the ERP, through direct connection to this database. &lt;br /&gt;
&lt;br /&gt;
{{Note}} The C-ePOD system will be hosted by OBS, whilst the ERP is hosted by the customer. This interface will need to connect to this ERP to access the view to get the job details. There is a technical requirement to have the two servers connected, which will require action by OBS technical services and the customer in collaboration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A scheduled import process will be created on the system, running at a timed interval.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There will be multiple manifests sent for the same vehicle on the same day. These must be combined into a single manifest on C-ePOD. {{Note}} In order for the interface to successfully combine manifests, it is assumed that there will be one load required per vehicle per depot (Site) per day.&lt;br /&gt;
&lt;br /&gt;
{{Note}} Manifests (that create Loads in C-ePOD) will be allocated to a vehicle and/or driver. This allows the loads to be created and allocated to a driver for completion. Note however that, once created, the {{#var:System}} Admin system (Load or User screens) may be used to change allocation of vehicles and drivers on a load.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The interface will create loads, one per vehicle per depot (Site) per day.&lt;br /&gt;
&lt;br /&gt;
The system will be configured to create standing data from the received import information, such as:&lt;br /&gt;
* Drivers&lt;br /&gt;
* Customers (Invoice Addresses)&lt;br /&gt;
* Vehicles&lt;br /&gt;
As noted above, it is expected that this data will be created at implementation.&lt;br /&gt;
&lt;br /&gt;
When C-ePOD receives an inbound file from the customer, drivers and vehicles will be created as part of this interface, if they do not exist. The driver ID will be created as the first character of the first name, and up to the first 4 characters of the surname, with a 3-digit unique identifier added to them.&lt;br /&gt;
 &lt;br /&gt;
For example:&lt;br /&gt;
*         &amp;quot;David Eastman&amp;quot; will become &amp;quot;DEAST001&amp;quot;&lt;br /&gt;
*         &amp;quot;SMITH JOHN&amp;quot; will become &amp;quot;SJOHN001&amp;quot;&lt;br /&gt;
*         &amp;quot;DEREK MAY&amp;quot; will become &amp;quot;DMAY001&amp;quot;&lt;br /&gt;
*         &amp;quot;TRUNKER M25&amp;quot;. TRUNKER M25 will become &amp;quot;TM25001&amp;quot;&lt;br /&gt;
Note that where other drivers have similar names, the generated ID will increment the unique identifier. So:&lt;br /&gt;
*         &amp;quot;DIANE EASTMAN&amp;quot; will become &amp;quot;DEAST002&amp;quot;&lt;br /&gt;
*         &amp;quot;SANDERSON JOHN&amp;quot; will become &amp;quot;SJOHN002&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
The password will be defaulted to the user name.&lt;br /&gt;
&lt;br /&gt;
It is noted that EBB will tidy up the list of drivers before the implementation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sites will be created for each depot, following the encoding within the customer systems:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!GP Site ID	!!GP ADI Site ID	!!Fleet name&lt;br /&gt;
|-&lt;br /&gt;
|03 CHARLTO	||903 ADI	||Thurrock&lt;br /&gt;
|-&lt;br /&gt;
|04 FARNBOR	||904 ADI	||Farnborough&lt;br /&gt;
|-&lt;br /&gt;
|05 WATFORD	||905 ADI	||Watford&lt;br /&gt;
|-&lt;br /&gt;
|09 YEOVIL	||909 ADI	||BRISTOL&lt;br /&gt;
|-&lt;br /&gt;
|10 BIRMING	||910 ADI	||Birmingham&lt;br /&gt;
|-&lt;br /&gt;
|11 MANCHES	||911 ADI	||Manchester&lt;br /&gt;
|-&lt;br /&gt;
|12 SHEFFIE	||912 ADI	||Sheffield&lt;br /&gt;
|-&lt;br /&gt;
|13 NEWCAST	||913 ADI	||Newcastle&lt;br /&gt;
|-&lt;br /&gt;
|14 GLASGOW	||914 ADI	||Glasgow&lt;br /&gt;
|-&lt;br /&gt;
|31 FELIXST	||931 ADI	||Felixstowe&lt;br /&gt;
|-&lt;br /&gt;
|32 MAREXPO	||932 ADI	||Marexport&lt;br /&gt;
|}&lt;br /&gt;
{{Note}} The site is taken from the Originating Depot. The ADI site ID will be considered to be the GP site ID in this interface. Any manifests in the file for sites not in this list will not have loads or jobs created for them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The interface must identify the Site (the executing depot) and the Owner (the originator). &lt;br /&gt;
* The owner is considered the Sales Territory (column SALSTERR in the MSA view) &lt;br /&gt;
* The executing depot is the depot property on the '''manifest''' tag in the XML file.&lt;br /&gt;
&lt;br /&gt;
It is noted that the following will be Owners only and will not be operators:&lt;br /&gt;
* 08 PRINTMT&lt;br /&gt;
* 20 EBBOFFI&lt;br /&gt;
* 30 GLOSSOP&lt;br /&gt;
&lt;br /&gt;
The following columns are also noted from the MSA view:&lt;br /&gt;
*         DefaultSiteID - the final delivery depot&lt;br /&gt;
*         Originating Depot - the depot from which the product is sourced. {{Note}} The ''depot'' attribute of the '''order''' tag in the TMS XML file also identifies the originating depot. For example, if this contains &amp;quot;\03&amp;quot; this identifies &amp;quot;03 CHARLTON&amp;quot; as the depot (and THURROCK as the fleet).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest on which a job is received will be stored against the job in C-ePOD, as well as any of the other customer references. This will be used by the interface to determine if the manifest has been received before. If this is the case, and the manifest has been modified (i.e. orders or products removed or added), this will be used by the system to determine whether jobs are to be added to the created load for this vehicle and day, or whether the jobs will be removed (deleted). Products not on the jobs updated will be removed, and new products added.&lt;br /&gt;
&lt;br /&gt;
The jobs will be placed on the Load in the order in which they are received in the manifest file. If a further manifest is received for this vehicle, the jobs will be added to the end of the manifest. A hard sequence will be generated for the jobs on the manifest.&lt;br /&gt;
&lt;br /&gt;
In the interface, orders for the same customer code will be linked together and consolidated on the device, ensuring that only one delivery instruction is present, although both orders will be maintained.&lt;br /&gt;
&lt;br /&gt;
The interface will consolidate jobs together if:&lt;br /&gt;
*         The manifest on which the job is received is determined to be on the same Load as other jobs.&lt;br /&gt;
*         The job has the same customer and delivery address as another job on the load.&lt;br /&gt;
*         The other jobs are not completed or cancelled.&lt;br /&gt;
*         They are the same type i.e. deliveries can consolidate with deliveries and collections with collections only.&lt;br /&gt;
Note that the consolidation process will not use the delivery time of the orders when determining whether to consolidate jobs.&lt;br /&gt;
&lt;br /&gt;
Note also that the driver will have the ability to manually consolidate and deconsolidate jobs on the device when executing the load.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are many different types of orders. The type is identified through the alpha prefix against the order. The main types are below:&lt;br /&gt;
* INV - Delivery order&lt;br /&gt;
* CAL - Call-off. Considered to be the same as an INV order.&lt;br /&gt;
* RTN - Collection from customer.&lt;br /&gt;
&lt;br /&gt;
{{Note}} Only these order types will be uploaded to the C-ePOD system as jobs. All other types will be excluded when processing the files. &lt;br /&gt;
&lt;br /&gt;
{{Note}} Any manifests marked as TRUNK (in the '''trailer''' tag of the TMS XML file) will also not be processed.&lt;br /&gt;
&lt;br /&gt;
Desk collections will be interfaced to C-ePOD on a separate manifest per depot, but with a driver of &amp;quot;WAREHOUSE&amp;quot;. {{Note}} The view MSA contains a column that identifies whether this is a customer collection (column CustColl), but this is unreliable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Job Instructions should be populated with Order comments (OrdComm) and Delivery Instructions (DelIns) concatenated together.&lt;br /&gt;
&lt;br /&gt;
When receiving jobs through the interface, the invoice (customer) address will be updated, if this has changed. EBB Paper have confirmed that the Invoice address changing is as expected. It has been confirmed that any previous jobs with this invoice (customer) address will from that point show the new invoice address, and this is acceptable to EBB Paper.&lt;br /&gt;
&lt;br /&gt;
Planned delivery times will be maintained on each job created. &lt;br /&gt;
&lt;br /&gt;
There are essentially 2 types of order:&lt;br /&gt;
* A non-timed delivery will have a cut off of 14:00&lt;br /&gt;
* Timed Delivery&lt;br /&gt;
&lt;br /&gt;
{{Note}} Development work is required with GP to allow the EBB Paper sales team to maintain times on the order. This will be an EBB Paper task to complete.&lt;br /&gt;
&lt;br /&gt;
The start and end planned dates and times will be populated from the values in the following MSA view columns:&lt;br /&gt;
*	Start Planned Date - ReqShipDate&lt;br /&gt;
*	Start Planned Time - StartTime if populated, else 06000000 (06:00)&lt;br /&gt;
*	End Planned Date - ReqShipDate&lt;br /&gt;
*	End Planned Time - DelTime if populated, else FinishTime if populated, else 14000000 (14:00).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All jobs will be set with a configuration element known as Job Group - this will define the process to be followed against each job, such as:&lt;br /&gt;
* Driver Signature.&lt;br /&gt;
* POC/POD document format.&lt;br /&gt;
* POC/POD business address and logo.&lt;br /&gt;
* Terms and Conditions displayed.&lt;br /&gt;
&lt;br /&gt;
It is expected that there will need to be Job Group configurations for the different job types, as they will have different execution processes on the mobile devices:&lt;br /&gt;
* Radial Collection/Delivery&lt;br /&gt;
** Customer Signature&lt;br /&gt;
** Unmanned Location Signature enabled&lt;br /&gt;
** Deliver All functionality enabled&lt;br /&gt;
* Desk Collect&lt;br /&gt;
** Customer Signature&lt;br /&gt;
** Unmanned Location Signature will ''not'' be enabled&lt;br /&gt;
** Deliver All functionality enabled&lt;br /&gt;
For all jobs groups, it is expected that the following will also be configured:&lt;br /&gt;
* No Job Photo&lt;br /&gt;
* EBB Paper POD format&lt;br /&gt;
* Terms and Conditions is expected to be set to:&lt;br /&gt;
** Please be sure to check every consignment before signing. All sales are subject to Conditions of Sale, a copy of which is at the back of the EBB Price List and on our website http://www.ebbpaper.co.uk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The products will be created on each job created with the details taken from the ERP. The details expected to be received are:&lt;br /&gt;
* Product Code&lt;br /&gt;
* Product Description - stored as a truncated value&lt;br /&gt;
* FSC number (optional) - stored with the full product description in the long description field.&lt;br /&gt;
* Pack Size&lt;br /&gt;
* UOM&lt;br /&gt;
* Weight&lt;br /&gt;
* Quantity&lt;br /&gt;
&lt;br /&gt;
The pack size of the product will be taken from the ERP view in the interface. This will come from Sell Pack in the interface. It is noted that there is also a Purch Pack field, and it is confirmed that C-ePOD has no place to store this information.&lt;br /&gt;
&lt;br /&gt;
UOFM is the defined unit of measure of the product being delivered. There are multiple products UOMs that require the quantity to be decimal (for example, Weight (TONNES), Length (LINEAR METRES), Area (METRES SQUARED). In order for this to be achieved, the C-ePOD import interface for this system will multiply the quantities by a factor (for example, SHEETS UOM is in 1000's, so quantity 1.4 is actually 1400 sheets). &lt;br /&gt;
&lt;br /&gt;
The following is a list of the UOFMs known at this time and the proposals to handle them:&lt;br /&gt;
*	1 - always 1 - accepted as such, but rounded up if decimal.&lt;br /&gt;
*	1000 - quantity will be multiplied by 1000.&lt;br /&gt;
*	BOTTLE - always integer value - accepted as such, but rounded up if decimal.&lt;br /&gt;
*	BOX - always integer value - accepted as such, but rounded up if decimal.&lt;br /&gt;
*	CHARGE - Excluded - this is a delivery charge. No line will be created.&lt;br /&gt;
*	EACH - always integer value - accepted as such, but rounded up if decimal.&lt;br /&gt;
*	ENVS - Envelopes. Quantity will be multiplied by 1000. &lt;br /&gt;
*	MISC - always integer value - accepted as such, but rounded up if decimal.&lt;br /&gt;
*	ROLL - always integer value - accepted as such, but rounded up if decimal.&lt;br /&gt;
*	SETS - Multi-part paper. Quantity will be multiplied by 1000.&lt;br /&gt;
*	SHEETS - quantity will be multiplied by 1000&lt;br /&gt;
*	TONNE - quantity will be multiplied by 1000 and the UOM set to &amp;quot;KGS&amp;quot;.&lt;br /&gt;
*	METRES SQUARED - quantity will be multiplied by 1000.&lt;br /&gt;
*	LINEAR METRES - quantity will be multiplied by 1000.&lt;br /&gt;
&lt;br /&gt;
There are then essentially 4 rules:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!RULE	!!UOMS&lt;br /&gt;
|-&lt;br /&gt;
|Multiply by 1000 	||1000, ENVS, SETS, SHEETS, METRES SQUARED, LINEAR METRES&lt;br /&gt;
|-&lt;br /&gt;
|Round up to nearest integer value	||1, BOTTLE, BOX, EACH, MISC, ROLL&lt;br /&gt;
|-&lt;br /&gt;
|Exclude	||CHARGE&lt;br /&gt;
|-&lt;br /&gt;
|Multiply by 1000 and change to KGS	||TONNE&lt;br /&gt;
|}&lt;br /&gt;
Any not on the list would follow the first rule (i.e. multiply quantity by 1000).&lt;br /&gt;
&lt;br /&gt;
Note that the above method has been confirmed by the customer. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This process will create jobs as part of loads on the interface. It is possible that additional information may need to be communicated to the driver whilst out in the field. In this case, the WEBFLEET messaging function will be used by the operation. Furthermore, it is noted that additional jobs may be created in C-ePOD Admin for ad-hoc collections. For example, adding a job at the end of the shift (load) to go to a customer and pick up some empty pallets. {{Note}} This job will exist solely in C-ePOD, as the jobs are not being interfaced back to GP when complete. EBB Paper must take care when adding jobs of this type, ensuring that any subsequent actions required for these jobs is handled (for example, invoicing).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
This change will be applied to system version 4.X.&lt;br /&gt;
&lt;br /&gt;
This change includes up to 2 days relating to the external MSA view, for set-up and testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- NEW PAGE --&amp;gt; &lt;br /&gt;
= Set-up  =&lt;br /&gt;
== Pre-requisites  ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Menu Structure  ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Data  ==&lt;br /&gt;
A new Interface ID of &amp;quot;EBB&amp;quot;, description &amp;quot;EBB&amp;quot;, will be added to the EPOD_LIST_ITEMS for XF Interface IDs.&lt;br /&gt;
&lt;br /&gt;
A new Code Type of &amp;quot;UOM&amp;quot;, description &amp;quot;UOMs&amp;quot;, will be added to the EPOD_LIST_ITEMS for Reason Codes.&lt;br /&gt;
&lt;br /&gt;
A new EPOD_LISTS ID must be configured for Code Conversion Types, with the following List Items on EPOD_LIST_ITEMS, with Description and Value set as follows:&lt;br /&gt;
*   Value &amp;quot;MULTIPLY&amp;quot;, Description &amp;quot;Multiply&amp;quot;. This is the default value for EBB Paper.&lt;br /&gt;
*   Value &amp;quot;ROUND&amp;quot;, description &amp;quot;Round&amp;quot;.&lt;br /&gt;
*   Value &amp;quot;EXCLUDE&amp;quot;, description &amp;quot;Exclude&amp;quot;.&lt;br /&gt;
*   Value &amp;quot;DEFAULT&amp;quot;, description &amp;quot;As Received&amp;quot;. This is the default value for all other customers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sites for each depot will be configured. Each site will be set up with EPL_EXT_FLEET set to the fleet name, as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Site ID	!!Fleet&lt;br /&gt;
|-&lt;br /&gt;
|03 CHARLTO	||THURROCK&lt;br /&gt;
|-&lt;br /&gt;
|04 FARNBOR	||FARNBOROUGH&lt;br /&gt;
|-&lt;br /&gt;
|05 WATFORD	||WATFORD&lt;br /&gt;
|-&lt;br /&gt;
|09 YEOVIL	||BRISTOL&lt;br /&gt;
|-&lt;br /&gt;
|10 BIRMING	||BIRMINGHAM&lt;br /&gt;
|-&lt;br /&gt;
|11 MANCHES	||MANCHESTER&lt;br /&gt;
|-&lt;br /&gt;
|12 SHEFFIE	||SHEFFIELD&lt;br /&gt;
|-&lt;br /&gt;
|13 NEWCAST	||NEWCASTLE&lt;br /&gt;
|-&lt;br /&gt;
|14 GLASGOW	||GLASGOW&lt;br /&gt;
|-&lt;br /&gt;
|31 FELIXST	||FELIXSTOWE&lt;br /&gt;
|-&lt;br /&gt;
|32 MAREXPO	||MAREXPORT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=600px heights=350px perrow=1&amp;gt;&lt;br /&gt;
File:FS_344273_Admin_Site1.png|''Site Maintenance''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A new Import Interface configuration will be set up. This is required only for one of the sites, expected to be the first site &amp;quot;03 CHARLTO&amp;quot;:&lt;br /&gt;
*	EPL_XF_CONFIG_ID - &amp;quot;03 CHARLTO&amp;quot;&lt;br /&gt;
*	EPL_DESCRIPTION - As required&lt;br /&gt;
*	EPL_XF_TYPE - &amp;quot;FTP&amp;quot; or &amp;quot;FILE&amp;quot;&lt;br /&gt;
*	EPL_XF_DESTINATION - remote FTP server and path for FTP, local file path for FILE&lt;br /&gt;
*	EPL_XF_ID - &amp;quot;EBB&amp;quot;&lt;br /&gt;
*	EPL_WEB_USER - FTP user for FTP&lt;br /&gt;
*	EPL_WEB_PASSWORD - FTP password for FTP&lt;br /&gt;
*	EPL_DB_CONNECTION  - MSA database connection information e.g. &amp;quot;Data Source=[SERVER];Initial Catalog=[DB_NAME];User Id=[USER];Password=[PASSWORD];&amp;quot;&lt;br /&gt;
*	EPL_XF_DIRECTION - &amp;quot;I&amp;quot; - Import type&lt;br /&gt;
*	EPL_EXPORT_JOB_TYPES - &amp;quot;INV|CAL|RTN&amp;quot; - list of Order Types to be processed, pipe-delimited. Up to 5 allowed&lt;br /&gt;
*	EPL_FILENAME - Filename to match when picking up files. Expected to be &amp;quot;Manifest_*.xml&amp;quot;.&lt;br /&gt;
*	EPL_EMAIL_ERRORS - email address for file processing error notifications&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=600px heights=350px perrow=1&amp;gt;&lt;br /&gt;
File:FS_344273_Admin_XFConfig1.png|''New EBB Import Configuration''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A generic TTM Export configuration will be created (as ID &amp;quot;TTM&amp;quot;), as well as a specific TTM Export configuration for the first site (e.g. &amp;quot;03 CHARLTO&amp;quot;). The configuration of both will be identical apart from the Config ID.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=600px heights=350px perrow=1&amp;gt;&lt;br /&gt;
File:FS_344273_Admin_XFConfig2.png|''TTM Export Sample Configuration''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Interfaces for each site will be set as follows:&lt;br /&gt;
* For Site ID &amp;quot;03 CHARLTO&amp;quot;, set the XF Config ID to &amp;quot;03 CHARLTO&amp;quot;.&lt;br /&gt;
* For all other sites, set to &amp;quot;TTM&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is expected that there will need to be Job Group configurations for the different job types, as they will have different execution processes on the mobile devices.&lt;br /&gt;
&lt;br /&gt;
Job Groups will be created as follows for each site above:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Job Group	!!Description&lt;br /&gt;
|-&lt;br /&gt;
|COL    || Radial Collection&lt;br /&gt;
|-&lt;br /&gt;
|DEL    || Radial Delivery&lt;br /&gt;
|-&lt;br /&gt;
|DESK    || Desk Collections&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=600px heights=350px perrow=1&amp;gt;&lt;br /&gt;
File:FS_344273_Admin_JobGroups1.png|''Job Groups Maintenance''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The set-up of each job group will include the following:&lt;br /&gt;
* Radial Collection/Delivery&lt;br /&gt;
** Customer Signature&lt;br /&gt;
** Unmanned Location Signature enabled&lt;br /&gt;
** Deliver All functionality enabled&lt;br /&gt;
* Desk Collect&lt;br /&gt;
** Customer Signature&lt;br /&gt;
** Unmanned Location Signature will ''not'' be enabled&lt;br /&gt;
** Deliver All functionality enabled&lt;br /&gt;
&lt;br /&gt;
For all jobs groups, it is expected that the following will also be configured:&lt;br /&gt;
* No Job Photo&lt;br /&gt;
* EBB Paper POD format&lt;br /&gt;
* Terms and Conditions is expected to be set to:&lt;br /&gt;
** Please be sure to check every consignment before signing. All sales are subject to Conditions of Sale, a copy of which is at the back of the EBB Price List and on our website http://www.ebbpaper.co.uk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All of the UOMs required by the customer should be configured on the Admin Codes Maintenance screen for all sites. The values known at this time are as follows, with the Conversion settings required for each:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Conversion Type	!! Value	!! Code	!! UOMS&lt;br /&gt;
|-&lt;br /&gt;
|Multiply	|| 1000	||&amp;amp;nbsp;	|| 1000, ENVS, SETS, SHEETS, METRES SQUARED, LINEAR METRES&lt;br /&gt;
|-&lt;br /&gt;
|Round 	|| 1	||&amp;amp;nbsp;	|| 1, BOTTLE, BOX, EACH, MISC, ROLL&lt;br /&gt;
|-&lt;br /&gt;
|Exclude	||&amp;amp;nbsp;	||&amp;amp;nbsp;	|| CHARGE&lt;br /&gt;
|-&lt;br /&gt;
|Multiply 	|| 1000	|| KGS	|| TONNE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=600px heights=350px perrow=1&amp;gt;&lt;br /&gt;
File:FS_344273_Admin_Codes1.png|''Codes Maintenance''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- NEW PAGE --&amp;gt; &lt;br /&gt;
= Functional Description  =&lt;br /&gt;
== Database &amp;amp; Data Access Layer ==&lt;br /&gt;
The following fields will be added to the Job table EPOD_REASON_CODE:&lt;br /&gt;
*   EPL_CONV_TYPE - nvarchar(10)&lt;br /&gt;
*   EPL_CONV_VALUE - float&lt;br /&gt;
*   EPL_CONV_CODE - nvarchar(20)&lt;br /&gt;
&lt;br /&gt;
These fields will be added to all stored procedures in the database that require them.&lt;br /&gt;
&lt;br /&gt;
These fields are ''not'' required on the device.&lt;br /&gt;
&lt;br /&gt;
These fields are ''not'' required to be set on codes imported through the standard XML import (flat file or webservice). &lt;br /&gt;
&lt;br /&gt;
These fields are ''not'' required to be contained within the Export.&lt;br /&gt;
&lt;br /&gt;
These fields are ''not'' required to be used when filtering data for selection.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following fields will be added to the Job table EPOD_XF_CONFIG:&lt;br /&gt;
*   EPL_DB_CONNECTION - nvarchar(255)&lt;br /&gt;
&lt;br /&gt;
This field will be added to all stored procedures in the database that require it.&lt;br /&gt;
&lt;br /&gt;
This field is ''not'' required on the device.&lt;br /&gt;
&lt;br /&gt;
This field is ''not'' required to be used when filtering data for selection.&lt;br /&gt;
&lt;br /&gt;
{{Note}} All DAL objects that link to XF_CONFIG may also require change.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The EPOD_SETUP stored procedure will be modified for the new EPOD_LISTS and EPOD_LIST_ITEMS values.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Admin ==&lt;br /&gt;
=== Codes Maintenance Screen ===&lt;br /&gt;
The Codes Maintenance screen (reason_code.aspx) will be modified to support UOMs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=600px heights=350px perrow=1&amp;gt;&lt;br /&gt;
File:FS_344273_Admin_Codes1.png|''Codes Maintenance''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The '''Find''' criteria will be modified to allow selection of the new &amp;quot;UOM&amp;quot; type. Additionally, a blank &amp;quot;-- Select --&amp;quot; option will also be provided, for when the user wished to see all codes of all types. A new Code Type of &amp;quot;UOM&amp;quot; (description &amp;quot;UOMs&amp;quot;) will be added to the EPOD_LIST_ITEMS for Reason Codes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The results table does ''not'' require modifications.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The pop-up Entry/Edit form will be modified for entry of the new UOM codes.&lt;br /&gt;
&lt;br /&gt;
This is accessed when entering a new code using the '''New''' button, and when editing existing codes by clicking the '''Select''' button against a line in the results table.&lt;br /&gt;
&lt;br /&gt;
The user will be allowed to enter codes of type &amp;quot;UOM&amp;quot;, selected from the drop-down list.  A new Code Type of &amp;quot;UOM&amp;quot; will be added to the EPOD_LIST_ITEMS for Reason Codes.&lt;br /&gt;
&lt;br /&gt;
When editing or adding reason codes of type &amp;quot;UOM&amp;quot; ''only'', new fields will be present on the pop-up form, as shown below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Label	!!Field	!!Pop-up Help&lt;br /&gt;
|-&lt;br /&gt;
|Conversion Type	|| EPL_CONV_TYPE	||USED BY BESPOKE INTERFACES ONLY to determine whether the quantity is modified or the line processed when the UOM against the product line matches this value&lt;br /&gt;
|-&lt;br /&gt;
|Value	|| EPL_CONV_VALUE	||USED BY BESPOKE INTERFACES ONLY. If Conversion Type is &amp;quot;Multiply&amp;quot;, this value is used to multiply the product quantity. If Conversion Type is &amp;quot;Round&amp;quot;, this is used to round the quantity to the nearest value provided here.&lt;br /&gt;
|-&lt;br /&gt;
|XRef Code	|| EPL_CONV_CODE	||USED BY BESPOKE INTERFACES ONLY. If present, the UOM is converted to the value provided here.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These should be laid out as shown in the screenshot in the pop-up form.&lt;br /&gt;
&lt;br /&gt;
The Conversion Type will be added with the following drop-down list items, populated from the EPOD_LISTS and EPOD_LIST_ITEMS tables.&lt;br /&gt;
* &amp;quot;Multiply&amp;quot; - enter numeric value for multiplication.&lt;br /&gt;
* &amp;quot;Round&amp;quot; - enter value to round to (e.g. 1 means integer value, 0.25 is round to nearest 0.25, etc)&lt;br /&gt;
* &amp;quot;Exclude&amp;quot; - lines of this DU type are not added at all - Value field disabled.&lt;br /&gt;
* &amp;quot;As Received&amp;quot; - no calculation - Value field disabled.&lt;br /&gt;
&lt;br /&gt;
The default value for this list will be set by the default value in the EPOD_LIST_ITEMS table, as follows:&lt;br /&gt;
* Defaults to Type &amp;quot;Multiply&amp;quot; for EBB Paper &lt;br /&gt;
* Default to &amp;quot;As Received&amp;quot; for all other customers.&lt;br /&gt;
&lt;br /&gt;
The Value field will be enabled only if the following values are selected in the Conversion Type:&lt;br /&gt;
* Multiply&lt;br /&gt;
* Round&lt;br /&gt;
The Value field will be a numeric text field, allowing decimal entry, defaulting to &amp;quot;1000&amp;quot; if enabled. &lt;br /&gt;
&lt;br /&gt;
The XRef Code will be a drop-down list of all codes of the Code Type being edited/added by this screen, and will be populated on selection of the Code Type. This drop-down list will include a blank default value of &amp;quot;Blank&amp;quot;, and show the Code and Descriptions of all the selected codes. The list will be ordered by the Code, ascending.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When saving, the values will be saved in the appropriate fields on the EPOD_REASON_CODE table, as shown above.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Interface Config Screen ===&lt;br /&gt;
The Import/Export Maintenance screen (xf_config.aspx) will be modified to support configuration of the new EBB Paper interface.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=600px heights=350px perrow=1&amp;gt;&lt;br /&gt;
File:FS_344273_Admin_XFConfig1.png|''Import/Export Configuration Maintenance''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fields required to be displayed when configuring the &amp;quot;EBB&amp;quot; interface:&lt;br /&gt;
*	EPL_XF_CONFIG_ID - Always displayed.&lt;br /&gt;
*	EPL_DESCRIPTION - Always displayed.&lt;br /&gt;
*	EPL_XF_TYPE - Always displayed.&lt;br /&gt;
*	EPL_XF_DESTINATION - Always displayed.&lt;br /&gt;
*	EPL_XF_ID - Always displayed. This drop-down list will be modified to include ID &amp;quot;EBB&amp;quot;.&lt;br /&gt;
*	EPL_XF_DIRECTION - Always displayed.&lt;br /&gt;
*	EPL_WEB_USER - only if FTP or SOAP transfer types are selected.&lt;br /&gt;
*	EPL_WEB_PASSWORD - only if FTP or SOAP type selected&lt;br /&gt;
*	EPL_DB_CONNECTION - This new field will only display if type &amp;quot;EBB&amp;quot; is selected and will include validation that it must be entered. This will be labelled as &amp;quot;Database Connection&amp;quot;. The field will be a wide entry field (at least double the width of a standard field). &lt;br /&gt;
*	EPL_EXPORT_JOB_TYPES - Display if type is &amp;quot;EBB&amp;quot;. The validation on this field will be modified so that pipe-delimited list of anything can be entered, if the type is &amp;quot;EBB&amp;quot;.&lt;br /&gt;
*	EPL_FILENAME - Filename to match when picking up files. Expected to be &amp;quot;Manifest_*.xml&amp;quot;.&lt;br /&gt;
*	EPL_EMAIL_ERRORS - email address for file processing error notifications.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Auto-Import ==&lt;br /&gt;
=== General ===&lt;br /&gt;
The process will update and create all data as required, committing each as they are processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are instances where the failure reason will result in the following processing:&lt;br /&gt;
* Stop processing this file and all further files (Failed Import).&lt;br /&gt;
* Stop processing this file and process subsequent files (Failed File).&lt;br /&gt;
* Stop processing this order and move to the next order (Failed Order).&lt;br /&gt;
&lt;br /&gt;
Failed Import reasons:&lt;br /&gt;
* Unable to connect to MSA&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Failed File reasons:&lt;br /&gt;
* Standing Data not being created:&lt;br /&gt;
** User does not exist&lt;br /&gt;
** Vehicle does not exist&lt;br /&gt;
** Job Group does not exist&lt;br /&gt;
* Non-DESK manifest is on a load that has already been completed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Failed Order reasons:&lt;br /&gt;
* No details of this order in MSA&lt;br /&gt;
* Job for this order already complete&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reasons why a Manifest file will not create Loads and Jobs:&lt;br /&gt;
* Site does not exist&lt;br /&gt;
* Manifest is a trunk.&lt;br /&gt;
* Jobs are of the wrong type.&lt;br /&gt;
* There are no valid products on the job.&lt;br /&gt;
* There are no valid jobs on a Load.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If there are issues processing, the whole file will be rejected and will need to be reprocessed. However, all data saved to that point will be present.&lt;br /&gt;
&lt;br /&gt;
Audit records will be maintained, identifying successfully processed and failed import files, identifying the reason why a file failed to import. &lt;br /&gt;
&lt;br /&gt;
It is possible for a manifest to generate multiple audit reasons when processing a file. All of these codes will be audited. Multiple audit records may be maintained per file, or a single audit record created with all details in it. This will be decided when developed, based on which method is a more generic solution for the C-ePOD product.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rejected files will be emailed (depending on configuration) and will be stored in the standard Failed files location, as the processes do now.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Note}} The process generating the email will be modified to include the auditing of the file. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When a file is reprocessed, this will over-write and update the existing data, as specified in the processing below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The processing of each file will proceed as follows:&lt;br /&gt;
* Retrieve Manifest files.&lt;br /&gt;
* Filter and validate the manifest file.&lt;br /&gt;
* Create User and Vehicle data.&lt;br /&gt;
* Create a new Load or combine to an existing Load.&lt;br /&gt;
* Create or update jobs on the load, through a link to the MSA view.&lt;br /&gt;
* Create or update products on the jobs.&lt;br /&gt;
* Remove any products from the job not contained in the manifest file.&lt;br /&gt;
* Remove any jobs from the load not contained in the manifest file.&lt;br /&gt;
These areas are covered in the following sections&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=== Retrieve Manifest Files ===&lt;br /&gt;
For FILE transfer type, currently all files in the specified destination folder (EPL_XF_DESTINATION) are processed (using Directory.GetFiles). This will be modified so that, if a filename pattern is specified (in EPOD_XF_CONFIG.EPL_FILENAME), the process will only retrieve and process files matching this pattern (by passing a second parameter to the GetFiles method, specifying the pattern from EPOD_XF_CONFIG.EPL_FILENAME).&lt;br /&gt;
&lt;br /&gt;
For FTP transfer type, the same is true, in that all files are retrieved (using ListDirectory in method GetFileList). No facility exists to pattern-match file names. Therefore the method GetFileList will be modified so that, if a filename pattern is specified (to be passed to an overloaded method in a new parameter, passing EPOD_XF_CONFIG.EPL_FILENAME), the process will only add these to the result if the filename returned matches the pattern provided.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Regardless of whether the file was retrieved through FTP or from the filesystem, each file (representing a single manifest) will be passed to a new processing method to validate and process the contents and create jobs and products. The current process bases this on EPL_MSG_TYPE. This will be extended to check the EPL_XF_ID field - should this be &amp;quot;EBB&amp;quot;, the new processing method will be called.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A file failing to process will not stop subsequent files from processing. However, if the MSA view cannot be connected to, processing will stop (see section Create Jobs for details on the MSA View connection).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Validate the Manifest ===&lt;br /&gt;
This process will receive the manifest contents as an XML file. This file will be downloaded before processing to ensure that all characters that should have been URL encoded have been. The file will be pre-parsed to remove any non printable characters.&lt;br /&gt;
&lt;br /&gt;
The '''depot''' tag will be extracted from the '''manifest/header''' tag contents. The site will be retrieved using the EPL_EXT_FLEET field. If a site is not found with a fleet matching the '''depot''' tag, the manifest will not be processed. {{Note}} This is not an error and will not be audited as such - the manifest will be marked as successfully processed.&lt;br /&gt;
&lt;br /&gt;
The site retrieved will be stored by the process in an EPOD_SITE DAL object.&lt;br /&gt;
&lt;br /&gt;
The '''trailer''' tag will be extracted from '''manifest/header''' tag contents. If this tag starts with the text &amp;quot;TRUNK&amp;quot;, then this manifest will not be processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create Vehicles and Users ===&lt;br /&gt;
The '''driver''' tag will be extracted from the '''manifest/header''' tag contents. &lt;br /&gt;
&lt;br /&gt;
If this driver is set to &amp;quot;WAREHOUSE&amp;quot;, the user ID will be created as this value.&lt;br /&gt;
&lt;br /&gt;
If this is a non-zero value that is not explicitly &amp;quot;WAREHOUSE&amp;quot;, C-ePOD will attempt to create the driver ID (if configured to do so) as the first character of the first name, and up to the first 4 characters of the surname, with a 3-digit unique identifier added to them. The case will be converted to uppercase.&lt;br /&gt;
 &lt;br /&gt;
For example:&lt;br /&gt;
*         &amp;quot;David Eastman&amp;quot; will become &amp;quot;DEAST001&amp;quot;&lt;br /&gt;
*         &amp;quot;SMITH JOHN&amp;quot; will become &amp;quot;SJOHN001&amp;quot;&lt;br /&gt;
*         &amp;quot;DEREK MAY&amp;quot; will become &amp;quot;DMAY001&amp;quot;&lt;br /&gt;
*         &amp;quot;TRUNKER M25&amp;quot;. TRUNKER M25 will become &amp;quot;TM25001&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The process will attempt to find this user using the Site ID and the generated User ID above. If a record is found, the process will compare the user name in the XML file to the user name on the database. If different, the 3-digit id will be incremented by 1 and the process repeated until a matching EPOD_USER record is found, or one is not found for this ID.&lt;br /&gt;
&lt;br /&gt;
Check the EPOD_SITE.EPL_IMPORT_CREATE_SD_FLAG. If this is set to &amp;quot;N&amp;quot; and an EPOD_USER record is not found, the file should be rejected. An audit record of &amp;quot;User X Not Found&amp;quot; shall be created.&lt;br /&gt;
&lt;br /&gt;
If one is not found and EPOD_SITE.EPL_IMPORT_CREATE_SD_FLAG is &amp;quot;Y&amp;quot;, the EPOD_USER record will be created and updated as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Field	!!Populated by&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SITE_ID || EPOD_SITE.EPL_SITE_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_USER_ID || either &amp;quot;WAREHOUSE&amp;quot;, or as generated above&lt;br /&gt;
|-&lt;br /&gt;
|EPL_USER_PASSWORD || set to the same value as the user ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_USER_NAME || '''driver'''&lt;br /&gt;
|-&lt;br /&gt;
|EPL_USER_ADMIN || &amp;quot;N&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_USER_ACTIVE || &amp;quot;Y&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_USER_ACTIVITY_DATE || 0&lt;br /&gt;
|-&lt;br /&gt;
|EPL_USER_ACTIVITY_TIME || 0&lt;br /&gt;
|-&lt;br /&gt;
|EPL_PASSWORD_VISIBLE_IND || 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The '''vehiclereg''' tag will be extracted from the '''manifest/header''' tag contents. If this is a non-zero value, C-ePOD will attempt to create the driver ID (if configured to do so).&lt;br /&gt;
&lt;br /&gt;
The process will attempt to find this vehicle using the Site ID and the Vehicle ID as the Vehicle Reg above. If a record is found, this will be stored by the process as EPOD_VEHICLE.&lt;br /&gt;
&lt;br /&gt;
Check the EPOD_SITE.EPL_IMPORT_CREATE_SD_FLAG. If this is set to &amp;quot;N&amp;quot; and an EPOD_VEHICLE record is not found, the file should be rejected. An audit record of &amp;quot;Vehicle X Not Found&amp;quot; shall be created.&lt;br /&gt;
&lt;br /&gt;
If one is not found and EPOD_SITE.EPL_IMPORT_CREATE_SD_FLAG is &amp;quot;Y&amp;quot;, the EPOD_VEHICLE record will be created and updated as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Field	!!Populated by&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SITE_ID || EPOD_SITE.EPL_SITE_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_VEHICLE_ID || '''vehiclereg'''&lt;br /&gt;
|-&lt;br /&gt;
|EPL_VEHICLE_REG || '''vehiclereg'''&lt;br /&gt;
|-&lt;br /&gt;
|EPL_DESCRIPTION || '''vehiclereg'''&lt;br /&gt;
|-&lt;br /&gt;
|EPL_STATUS || &amp;quot;Y&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note}} Data created on these tables will be truncated. Comparisons to this data as described above with be truncated before comparison, in case the data is space-filled in the XML file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a Load ===&lt;br /&gt;
A load will be attempted to be found using the following data, providing that at least a vehicle or user has been provided:&lt;br /&gt;
* EPL_SITE_ID - EPOD_SITE.EPL_SITE_ID&lt;br /&gt;
* EPL_LOAD_START_PLANNED_DATE - '''deliverydate''' tag. Note that this value must be reformatted to YYYYMMDD format from DD-MM-YYYY format.&lt;br /&gt;
* EPL_VEHICLE_ID - EPOD_VEHICLE.EPL_VEHICLE_ID if one is present, otherwise this is not set as an parameter for the selection.&lt;br /&gt;
* EPL_USER_ID - EPOD_USER.EPOD_USER_ID if one is present, otherwise this is not set as an parameter for the selection.&lt;br /&gt;
* EPL_STATUS - Not equal to &amp;quot;C&amp;quot; &amp;quot;X&amp;quot; if the '''driver''' attribute is not explicitly set to &amp;quot;WAREHOUSE&amp;quot;, otherwise this is not set as an parameter for the selection.&lt;br /&gt;
&lt;br /&gt;
If one is not found, a new load will be created on EPOD_LOAD as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Field	!!Populated by&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SITE_ID ||EPOD_SITE.EPL_SITE_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_LOAD_ID || generated by the EPOD system.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_LOAD_START_PLANNED_DATE || extracted from the '''deliverydate''' tag. Note that this value must be reformatted to YYYYMMDD format from DD-MM-YYYY format.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_LOAD_START_PLANNED_TIME || extracted from the '''starttime''' tag. Note that this value must be reformatted (removing the embedded colon character and adding &amp;quot;0000&amp;quot; to the end. Note that if this tag is not present or blank, this field should be set to 6000000.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_LOAD_END_PLANNED_DATE || as the Load Start Planned Date.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_LOAD_END_PLANNED_TIME || 0&lt;br /&gt;
|-&lt;br /&gt;
|EPL_VEHICLE_ID || EPOD_VEHICLE.EPL_VEHICLE_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_USER_ID || EPOD_VEHICLE.EPL_USER_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_STATUS || &amp;quot;P&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_LOAD_INFORMATION || the ''number'' attribute of the '''manifest''' tag concatenated with the '''addinstruct''' tag, delimited by a dash.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If a load is found and the manifest is ''not'' for desk collection (i.e. where the '''driver''' tag value is not explicitly &amp;quot;WAREHOUSE&amp;quot;), the status (EPL_STATUS) should be checked. If this value is not &amp;quot;P&amp;quot; then the file should be rejected. An audit record of &amp;quot;Load X at wrong status&amp;quot; shall be created.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If a load is found, the Load Information field EPL_LOAD_INFORMATION should be checked that it contains the text built from:&lt;br /&gt;
* the ''number'' attribute of the '''manifest''' tag concatenated with the '''addinstruct''' tag, delimited by a dash.&lt;br /&gt;
If it does not contain this, this should be added to the text already in the field, delimited by a newline character.&lt;br /&gt;
&lt;br /&gt;
The load (found or created) should be stored in an EPOD_LOAD object and updated.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create Jobs ===&lt;br /&gt;
The process will find and store the highest sequence of any jobs already attached to the EPOD_LOAD object, by checking the content of the EPOD_JOBS list on the EPOD_LOAD object. &lt;br /&gt;
&lt;br /&gt;
The process will extract the list of allowed order prefixes from the EPOD_XF_CONFIG.EPL_EXPORT_JOB_TYPES field. {{Note}} If this parameter is empty, all orders will be processed.&lt;br /&gt;
&lt;br /&gt;
The process will loop through all instances of the '''order''' tag in the ''manifest/data'' tag. Note that this is separated by a '''customer''' tag.&lt;br /&gt;
&lt;br /&gt;
Each '''order''' tag will be processed to create EPOD_JOB records, which will be added to the EPOD_LOAD.EPOD_JOBS list.&lt;br /&gt;
&lt;br /&gt;
The ''sopnumber'' attribute of the '''order''' tag will be extracted. if the attribute does not exist or has no value, this tag may be skipped. &lt;br /&gt;
&lt;br /&gt;
The trimmed attribute value will be checked to see whether the value begins with any of the allowed order prefixes. If it does not, then then the order will not be processed. &lt;br /&gt;
&lt;br /&gt;
A connection will be made to the MSA database for the order details. This will be achieved by opening a connection using the connection information stored in EPOD_XF_CONFIG.EPL_DB_CONNECTION. The connection should be attempted several times (for example, 3 times). If a connection cannot be made, then the file should be rejected. An audit record of &amp;quot;Order X: Cannot connect to MSA&amp;quot; shall be created. {{Note}} As this is a fundamental requirement of the process, should this fail, processing of this file ''and all others'' should be terminated for this run.&lt;br /&gt;
&lt;br /&gt;
The connection details will be specified in a connection string in EPOD_XF_CONFIG.EPL_DB_CONNECTION.&lt;br /&gt;
&lt;br /&gt;
{{Note}} At this time, the following information has not yet been confirmed. &lt;br /&gt;
* Connection details (IP, user, password, port)&lt;br /&gt;
* Database type&lt;br /&gt;
* View name&lt;br /&gt;
&lt;br /&gt;
{{Note}} This MSA view is used from this point onwards for all details. Should the connection fail when attempting to retrieve subsequent records from the MSA view, the connection should be attempted to be re-established, again retrying several times, to ensure that this process is predominantly uninterrupted. &lt;br /&gt;
&lt;br /&gt;
In the instance where the connection fails, the file need not be rejected and moved to the Failure area - it can be left to be reprocessed immediately on the next run.&lt;br /&gt;
&lt;br /&gt;
When the connection is established, the details of the order will be retrieved from the MSA view using a standard SQL query, querying on the SOP Number.&lt;br /&gt;
&lt;br /&gt;
Should the view return no details, then the order will not be processed. An audit record of &amp;quot;Order X: No details in MSA&amp;quot; shall be created. The process will continue with the next order in the XML file.&lt;br /&gt;
&lt;br /&gt;
The Load will be checked to see whether the order already exists - the process will look for the order in EPOD_LOAD.EPOD_JOBS, where the job code (EPL_JOB_CODE_ is equal to the trimmed value of the '''sopnumber''' tag. If an order is found, an EPOD_JOB object will be created and set to the value of the job in the EPOD_LOAD.EPOD_JOBS EPOD_JOB object by reference.&lt;br /&gt;
&lt;br /&gt;
If the job found is already complete (EPL_STATUS = &amp;quot;C&amp;quot;), then the process will skip updating this order. An audit record of &amp;quot;Order X: already complete&amp;quot; shall be created. The process will continue with the next order in the XML file.&lt;br /&gt;
&lt;br /&gt;
If a job is not found, a new job will be created using the key values:&lt;br /&gt;
*	EPL_SITE_ID - EPOD_LOAD.EPL_SITE_ID.&lt;br /&gt;
*	EPL_LOAD_ID - EPOD_LOAD.EPL_LOAD_ID.&lt;br /&gt;
*	EPL_JOB_TYPE - If the left 3 characters of the '''sopnumber''' tag are &amp;quot;RTN&amp;quot;, set this value to &amp;quot;C&amp;quot;, otherwise set this value to &amp;quot;D&amp;quot;.&lt;br /&gt;
*	EPL_JOB_CODE - the trimmed value of the '''sopnumber''' tag.&lt;br /&gt;
A value in EPL_JOB_ID will be generated for this job at this stage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Job Group should be calculated as follows:&lt;br /&gt;
* If the EPL_JOB_TYPE is &amp;quot;C&amp;quot;, set to &amp;quot;COL&amp;quot;&lt;br /&gt;
* else if EPOD_LOAD.EPL_USER_ID = &amp;quot;WAREHOUSE&amp;quot;, set to &amp;quot;DESK&amp;quot;&lt;br /&gt;
* else set to &amp;quot;DEL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The process will attempt to find this Job Group using:&lt;br /&gt;
*	EPL_SITE_ID - EPOD_LOAD.EPL_SITE_ID.&lt;br /&gt;
*	EPL_JOB_GROUP - as set above.&lt;br /&gt;
If a record is found, this will be stored by the process as an EPOD_JOB_GROUPS DAL object.&lt;br /&gt;
&lt;br /&gt;
Check the EPOD_SITE.EPL_IMPORT_CREATE_SD_FLAG. If this is set to &amp;quot;N&amp;quot; and an EPOD_JOB_GROUPS record is not found, the file should be rejected. An audit record of &amp;quot;Job Group X Not Found&amp;quot; shall be created.&lt;br /&gt;
&lt;br /&gt;
If one is not found and EPOD_SITE.EPL_IMPORT_CREATE_SD_FLAG is &amp;quot;Y&amp;quot;, the EPOD_JOB_GROUPS record will be created as follows:&lt;br /&gt;
*	EPL_SITE_ID - EPOD_SITE.EPL_SITE_ID&lt;br /&gt;
*	EPL_JOB_GROUP - as set above.&lt;br /&gt;
*	EPL_DESCRIPTION:&lt;br /&gt;
** If EPL_JOB_GROUP is &amp;quot;COL&amp;quot;, set to &amp;quot;Collections&amp;quot;.&lt;br /&gt;
** If EPL_JOB_GROUP is &amp;quot;DEL&amp;quot;, set to &amp;quot;Deliveries&amp;quot;.&lt;br /&gt;
** If EPL_JOB_GROUP is &amp;quot;DESK&amp;quot;, set to &amp;quot;Desk Collections&amp;quot;.&lt;br /&gt;
All flags will be set as their default values.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The customer code, invoice address and contact information will be retrieved from the MSA view. The customer code will be checked as to whether it is already created in the system, by checking for an EPOD_CUSTOMER record using the keys:&lt;br /&gt;
*	EPL_SITE_ID - EPOD_SITE.EPL_SITE_ID&lt;br /&gt;
*	EPL_CUSTOMER_CODE - column CUSTNMBR from the MSA view.&lt;br /&gt;
&lt;br /&gt;
If this record does not exist, or a record does exist but the details are different, the record will be updated as follows:&lt;br /&gt;
If one is not found, a new customer will be created on EPOD_CUSTOMER as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Field	!!Populated by&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SITE_ID || EPOD_SITE.EPL_SITE_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_CUSTOMER_CODE || CUSTNMBR&lt;br /&gt;
|-&lt;br /&gt;
|EPL_CUSTOMER_NAME || CUSTNAME&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_1 || InvAdd1&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_2 || InvAdd2&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_3 || InvAdd3&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_4 || InvCity&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_5 || InvState&lt;br /&gt;
|-&lt;br /&gt;
|EPL_POSTCODE || InvZip (Spaces removed and truncated to 8 characters)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Note}} All values above are leading/trailing space trimmed unless otherwise stated.&lt;br /&gt;
&lt;br /&gt;
The delivery address and contact information will then be compared to this Invoice address, comparing the following items:&lt;br /&gt;
*	EPL_CUSTOMER_NAME - DelName&lt;br /&gt;
*	EPL_ADDRESS_1 - DelAdd1&lt;br /&gt;
*	EPL_ADDRESS_2 - DelAdd2&lt;br /&gt;
*	EPL_ADDRESS_3 - DelAdd3&lt;br /&gt;
*	EPL_ADDRESS_4 - DelCity&lt;br /&gt;
*	EPL_ADDRESS_5 - DelState&lt;br /&gt;
*	EPL_POSTCODE - DelZip &lt;br /&gt;
&lt;br /&gt;
If any of the values are different, a Job Address will be created through an EPOD_JOB_ADDRESS DAL object, populated as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Field	!!Populated by&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SITE_ID || EPOD_SITE.EPL_SITE_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_JOB_ID || EPOD_JOB.EPL_JOB_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_JOB_TYPE || EPOD_JOB.EPL_JOB_TYPE&lt;br /&gt;
|-&lt;br /&gt;
|EPL_NAME || DelName&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_1 || DelAdd1&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_2 || DelAdd2&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_3 || DelAdd3&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_4 || DelCity&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_5 || DelState&lt;br /&gt;
|-&lt;br /&gt;
|EPL_POSTCODE || DelZip (Spaces removed and truncated to 8 characters)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note}} All values above are leading/trailing space trimmed unless otherwise stated.&lt;br /&gt;
&lt;br /&gt;
If this is not the first job being processed for the load, the process will check whether the job being created is not the first job being created for the customer code in this manifest. If this is not a subsequent job for this customer code, blank any stored values for the following fields:&lt;br /&gt;
* EPL_SEQUENCE&lt;br /&gt;
* EPL_LINKED_ID&lt;br /&gt;
&lt;br /&gt;
If this is not a subsequent job for this customer code, the process will then loop through existing jobs in EPOD_LOAD.EPOD_JOBS in reverse sequence, looking for any job that matches as follows:&lt;br /&gt;
* EPL_CUSTOMER_CODE is the same&lt;br /&gt;
* EPL_STATUS not &amp;quot;C&amp;quot; or &amp;quot;X&amp;quot;&lt;br /&gt;
* EPL_JOB_TYPE is the same as the job being created.&lt;br /&gt;
* The delivery address is the same as the job being created.&lt;br /&gt;
&lt;br /&gt;
If a match is found, check the value of the field EPL_LINKED_ID. If there is no value, set this to the value in the record's EPL_SEQUENCE field and update the object. The process will then store the values in the following fields:&lt;br /&gt;
* EPL_SEQUENCE - EPL_SEQUENCE of the job found&lt;br /&gt;
* EPL_LINKED_ID - EPL_LINKED_ID of the job found&lt;br /&gt;
&lt;br /&gt;
The EPOD_JOB object will then be updated with the values as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Field	!!Populated by&lt;br /&gt;
|-&lt;br /&gt;
|EPL_JOB_GROUP	|| The calculated Job Group above&lt;br /&gt;
|-&lt;br /&gt;
|EPL_JOB_INSTRUCTION	|| Manifest No (manfest), Order comments (OrdComm) and Delivery Instructions (DelIns) concatenated together with a space separator.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_STATUS	|| &amp;quot;P&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_CUSTOMER_CODE	|| The customer code (CUSTNMBR).&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SEQUENCE	|| Stored value of EPL_SEQUENCE if there is one, or the maximum value of sequences of jobs on this load, plus 1.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_START_PLANNED_DATE	|| ReqShipDate&lt;br /&gt;
|-&lt;br /&gt;
|EPL_START_PLANNED_TIME	|| StartTime if populated, else 06000000 (06:00)&lt;br /&gt;
|-&lt;br /&gt;
|EPL_END_PLANNED_DATE	|| ReqShipDate&lt;br /&gt;
|-&lt;br /&gt;
|EPL_END_PLANNED_TIME	|| DelTime if populated, else FinishTime if populated, else 14000000 (14:00).&lt;br /&gt;
|-&lt;br /&gt;
|EPL_JOB_CODE	|| the trimmed value of the '''sopnumber''' tag.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_CUST_REF	|| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_OFFICE_INSTRUCTION	|| tcsFLST_Route&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SO_NUMBER	|| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ORDER_DATE	|| CREATDDT&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SALES_CONTACT	|| UserID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_OWNER_NAME	|| The sales territory (SALSTERR)&lt;br /&gt;
|-&lt;br /&gt;
|EPL_EXT_REF	|| The manifest (extracted from the ''number'' attribute of the '''manifest''' tag)&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ACCOUNT	|| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_LINKED_ID	|| Stored value of EPL_LINKED_ID if there is one.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_TIMEZONE	|| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_LOAD_LOCATION	|| Originating Depot&lt;br /&gt;
|-&lt;br /&gt;
|EPL_TTM_STOP_NUMBER	|| Set to the value in EPL_SEQUENCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note}} that if updating a job at EPL_STATUS of &amp;quot;X&amp;quot;, any existing products/containers associated with this job will also be reset to pending status.&lt;br /&gt;
&lt;br /&gt;
The process will then store the following:&lt;br /&gt;
* EPL_CUSTOMER_CODE - the Customer code last processed in this manifest file.&lt;br /&gt;
* EPL_SEQUENCE - EPL_SEQUENCE of the job created&lt;br /&gt;
* EPL_LINKED_ID - EPL_LINKED_ID of the job created&lt;br /&gt;
&lt;br /&gt;
The job will be updated and saved at this point.&lt;br /&gt;
&lt;br /&gt;
The Job ID of the job created will be added to a comma-delimited string of jobs processed for this manifest.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create Products ===&lt;br /&gt;
The process will loop through each record from MSA view, in order to create the product lines. {{Note}} All lines in the MSA view detail product information, including the first line.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The value in UOFM field of the MSA view will be looked up against the EPOD_REASON_CODE table matching the following parameters:&lt;br /&gt;
* EPL_SITE_ID - EPOD_JOB.EPL_SITE_ID&lt;br /&gt;
* EPL_REASON_CODE - UOFM&lt;br /&gt;
&lt;br /&gt;
If a record is not found, create an EPOD_PRODUCT DAL object with values set as follows:&lt;br /&gt;
* EPL_SITE_ID - EPOD_JOB.EPL_SITE_ID&lt;br /&gt;
* EPL_REASON_CODE - UOFM&lt;br /&gt;
* EPL_DESCRIPTION - UOFM&lt;br /&gt;
* EPL_CONV_TYPE - &amp;quot;MULTIPLY&amp;quot;&lt;br /&gt;
* EPL_CONV_VALUE - 1000&lt;br /&gt;
* EPL_CONV_CODE - &amp;quot;&amp;quot;&lt;br /&gt;
Update this UOM code.&lt;br /&gt;
&lt;br /&gt;
If the value of EPOD_PRODUCT.EPL_CONV_TYPE is &amp;quot;EXCLUDE&amp;quot;, this product will not be added - the process will move to the next record in the MSA view.&lt;br /&gt;
&lt;br /&gt;
If the value of EPOD_PRODUCT.EPL_CONV_TYPE is &amp;quot;MULTIPLY&amp;quot;, multiply the value in the QUANTITY field of the MSA view by the value stored in EPL_CONV_VALUE and store as the quantity.&lt;br /&gt;
&lt;br /&gt;
If the value of EPOD_PRODUCT.EPL_CONV_TYPE is &amp;quot;ROUND&amp;quot;, round the value in the QUANTITY field of the MSA view by the value stored in EPL_CONV_VALUE and store as the quantity.&lt;br /&gt;
&lt;br /&gt;
If the value of EPOD_PRODUCT.EPL_CONV_TYPE is &amp;quot;DEFAULT&amp;quot;, store the value in the QUANTITY field of the MSA view as the quantity.&lt;br /&gt;
&lt;br /&gt;
If the value of EPOD_PRODUCT.EPL_CONV_CODE has a valid value, store the EPL_CONV_CODE as the UOM.&lt;br /&gt;
&lt;br /&gt;
If the value of EPOD_PRODUCT.EPL_CONV_CODE is blank or null, store the UOFM field from the MSA view as the UOM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The process will check to see if a product already exists on the job by checking the EPOD_JOB.EPOD_PRODUCTS list for an object with the following values:&lt;br /&gt;
* EPL_SITE_ID - EPOD_JOB.EPL_SITE_ID&lt;br /&gt;
* EPL_JOB_ID - EPOD_JOB.EPL_JOB_ID&lt;br /&gt;
* EPL_CONTAINER_ID - &amp;quot;000000000000000&amp;quot; (15 zeroes in a string, denoting a loose product)&lt;br /&gt;
* EPL_PRODUCT_CODE - ITEMNMBR &lt;br /&gt;
* EPL_SEQUENCE - linenumber/16384 (first 4 characters of this if not a whole number)&lt;br /&gt;
&lt;br /&gt;
Note that ITEMNMBR and ITEMDESC may contain control characters not compatible with the EPOD device software. These should be stripped out before saving into the EPOD database.&lt;br /&gt;
&lt;br /&gt;
If one is not found, an EPOD_PRODUCT object will be created and added to the EPOD_JOB.EPOD_PRODUCTS list.&lt;br /&gt;
&lt;br /&gt;
If one is found or created above, an EPOD_PRODUCT object will be pointed to this object by reference.&lt;br /&gt;
&lt;br /&gt;
The EPOD_PRODUCT object (found or created) will have the fields updated as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Field	!!Populated by&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SITE_ID || EPOD_JOB.EPL_SITE_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_JOB_ID || EPOD_JOB.EPL_JOB_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_CONTAINER_ID || &amp;quot;000000000000000&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_PRODUCT_CODE || ITEMNMBR&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SEQUENCE || linenumber/16384 (first 4 characters of this if not a whole number)&lt;br /&gt;
|-&lt;br /&gt;
|EPL_DESCRIPTION || ITEMDESC, truncated to 40 characters&lt;br /&gt;
|-&lt;br /&gt;
|EPL_PRODUCT_QTY_PLANNED || The quantity calculated and stored above&lt;br /&gt;
|-&lt;br /&gt;
|EPL_PRODUCT_QTY_CASE || SellPack if populated and numeric, else 0.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_STATUS || &amp;quot;P&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_PRODUCT_WEIGHT || ITEMSHWT&lt;br /&gt;
|-&lt;br /&gt;
|EPL_CUST_REF || CustordNo&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ITEM_TYPE ||&lt;br /&gt;
|-&lt;br /&gt;
|EPL_UNIT_TYPE || The UOM stored above.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_DESCRIPTION_LONG || ITEMDESC and ebbFLTX_Sales_Comments concatenated with CR/LF characters.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_PRODUCT_QTY_ORDERED || Set to the same value as EPL_PRODUCT_QTY_PLANNED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The product record on EPOD_PRODUCT will then be updated.&lt;br /&gt;
&lt;br /&gt;
The Product Code of the product created will be added to a comma-delimited string of products processed for this job.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Remove Products not on the Job ===&lt;br /&gt;
All subsequent records on the MSA view will be processed in this manner and stored on the job.&lt;br /&gt;
&lt;br /&gt;
When all products are processed, the process will check through all products on the job and compare to the list of products processed on this manifest for this job. Any products on the job but not in the manifest will be deleted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If, after this, there are no products on the job, the job will be deleted. An audit record of &amp;quot;No Products on Order X - order deleted&amp;quot; shall be created.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Remove Jobs not on the Load for that Manifest ===&lt;br /&gt;
All subsequent order tags in the Manifest will be processed in this manner and stored on the load.&lt;br /&gt;
&lt;br /&gt;
When all orders on the manifest are processed, the process will check through all jobs on the load (with that Manifest number, as stored in EPL_EXT_REF) and compare to the list of jobs processed on this manifest. Any jobs for this manifest on the load but not in the manifest will be deleted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If, after this, there are no jobs on the load, the load will be deleted. An audit record of &amp;quot;No Jobs on Load X - load deleted&amp;quot; shall be created.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- MEDIA LANDSCAPE YES --&amp;gt; &lt;br /&gt;
= Appendix A: TEST PLAN  =&lt;br /&gt;
{{TestPlan_Header&lt;br /&gt;
|Title={{#var:Doc_Title}}&lt;br /&gt;
|Log={{#var:Reference}}&lt;br /&gt;
|Description=Testing the new EBB paper interface can be configured and works as expected.&lt;br /&gt;
|MenuAccess=N/A&lt;br /&gt;
|Prerequisites=A system configured as EBB Paper.&lt;br /&gt;
|Objective=To test that: UOMs may be entered with conversion types; the EBB Paper interface may be configured and; the EBB paper interface works as expected.&lt;br /&gt;
}} {{ #vardefine: Cycle | 0 }}{{ #vardefine: SubCycle | 0 }}&lt;br /&gt;
{{TestPlan_CycleHeader&lt;br /&gt;
|Cycle={{ #vardefineecho: Cycle | {{ #expr: {{ #var: Cycle }} + 1 }} }}{{ #vardefine: SubCycle | {{ #var: Cycle }} }}&lt;br /&gt;
|Title=Admin&lt;br /&gt;
|Notes=&amp;amp;nbsp;&lt;br /&gt;
}} &amp;lt;!--INSERT TESTS HERE --&amp;gt; {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a new Interface type as expected for EBB Paper.&lt;br /&gt;
|Result=The new EBB Paper interface can be configured and edited as expected.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a new reason code. Select type &amp;quot;UOM&amp;quot;.&lt;br /&gt;
|Result=Type UOM can be selected from the drop-down list. The Conversion fields are displayed and defaulted as expected.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Select Conversion Type &amp;quot;Round&amp;quot; and &amp;quot;Multiply&amp;quot;.&lt;br /&gt;
|Result=A Value may be entered.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Save the code. Enter another code. Select other Conversion Types.&lt;br /&gt;
|Result=A Value may not be entered.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Save the code. Enter another code with an Xref code and conversion type &amp;quot;As Received&amp;quot;.&lt;br /&gt;
|Result=The XRef code is entered and saved.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Find all UOM codes. &lt;br /&gt;
|Result=UOM can be selected as a filter element. All UOM codes are displayed. &lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Edit UOM codes.&lt;br /&gt;
|Result=The codes are displayed as they were entered. The Conversion fields are displayed as expected.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_CycleFooter}} &lt;br /&gt;
{{TestPlan_CycleHeader&lt;br /&gt;
|Cycle={{ #vardefineecho: Cycle | {{ #expr: {{ #var: Cycle }} + 1 }} }}{{ #vardefine: SubCycle | {{ #var: Cycle }} }}&lt;br /&gt;
|Title=Interface&lt;br /&gt;
|Notes=Set up the site to NOT create standing data. Configure the interface for FTP file transfer. Configure the MSA connection to be incorrect.&lt;br /&gt;
}} &amp;lt;!--INSERT TESTS HERE --&amp;gt; {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create valid manifest files in the configured FTP area, one named &amp;quot;Manifest_test1.xml&amp;quot; and one named &amp;quot;incorrect.xml&amp;quot;. Both should have a user that does not match an existing vehicle. Run the import process.&lt;br /&gt;
|Result=Only the manifest matching the filename is processed. This is rejected for an invalid user. The file is placed in a Failed directory.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Change the interface configuration to FILE transfer type. Create valid manifest files in the configured FILE area, one named &amp;quot;Manifest_test2.xml&amp;quot; and one named &amp;quot;incorrect.xml&amp;quot;. Both should have a vehicle that does not match an existing vehicle, but with a valid user. Run the import process.&lt;br /&gt;
|Result=Only the manifest matching the filename is processed. This is rejected for an invalid vehicle. The file is placed in a Failed directory.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Process a manifest (any transfer method) with a valid user and vehicle, with job groups not created.&lt;br /&gt;
|Result=The file is rejected for invalid job group. The file is placed in a Failed directory.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Configure the system to create standing data. Create two valid (but different) manifests, with a user and vehicle that does not match any existing data. Ensure there is a valid job with at least one valid product.&lt;br /&gt;
|Result=The first file is processed and rejected due to being unable to connect to MSA. The second file is not processed at all.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Configure the interface with the correct MSA view connection details. Process the manifests above again.&lt;br /&gt;
|Result=The files are processed without errors. The Vehicle is created. The Users is created. The Job Group is created. The Customer is created. The Load is created. The Job is created. The products are created. The file is audited as processed successfully. The file is placed in a Success directory.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a manifest almost identical to the last manifest, but with different Load start time, Job Start time, product quantities. Ensure the invoice address is changed. Ensure that there are comments on the Manifest. Process the manifest.&lt;br /&gt;
|Result=The load, job and products are updated. The manifest comments are appended to the Load Instructions. The invoice (customer) address is updated.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a manifest for the same date, vehicle and user, with orders with one valid sopnumber, and all others as invalid SOP numbers. Ensure the valid order is not for the same customer as the prior manifest. Process the manifest.&lt;br /&gt;
|Result=A job is created on the load for the one valid order. All others are not processed. The job is sequenced after all others&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a manifest for the same date, vehicle and user, with an order with a valid INV sopnumber. Ensure the order is for the same customer as the first manifest. Process the manifest.&lt;br /&gt;
|Result=A job is created on the load for the order. The job is sequenced and linked to the matching job from the first manifest.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a manifest for the same date, vehicle and user, with orders with a valid sopnumber with the same customer code as the last manifest. Ensure two are RTN jobs and two are INV jobs. Process the manifest.&lt;br /&gt;
|Result=Jobs are created on the load for the orders. The jobs are correctly identified as Collection and Delivery jobs, with the correct Job Group. The jobs are sequenced after any existing jobs on the load. The RTN jobs will have the same sequence and linked ID. The INV jobs will have the same sequence and linked ID as the existing INV job on the load for this customer.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a manifest for the same date, vehicle and user, with orders with a valid sopnumber with the same customer code as the last manifest. Ensure two are RTN jobs and two are INV jobs. Ensure the delivery address is different to the invoice address. Process the manifest.&lt;br /&gt;
|Result=Jobs are created on the load for the orders. The jobs are correctly identified as Collection and Delivery jobs, with the correct Job Group. The jobs are sequenced after any existing jobs on the load. The RTN jobs will have the same sequence and linked ID. The INV jobs will have the same sequence and linked ID. No jobs will be linked to existing jobs on the manifest. The Job Address is created for these loads.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a manifest for a different date, vehicle and user, with orders with valid sopnumbers, for many customers. Ensure that they have a mix of UOMs configured with Round, Multiply, As Received, Exclude and Xref Code conversions, as well as a product without a configured UOM.&lt;br /&gt;
|Result=The jobs and products are created as expected. The Exclude product is not created. The quantities are set as per the conversion type rules. The unknown UOM is created with default values.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Complete or cancel the load created. Process the same manifest file.&lt;br /&gt;
|Result=The manifest is rejected for invalid load status.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Process a DESK COLLECT manifest with a user of &amp;quot;WAREHOUSE&amp;quot;&lt;br /&gt;
|Result=A load is created. The user is created.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Complete or cancel the load created. Process another DESK COLLECT manifest file.&lt;br /&gt;
|Result=A new load is created. &lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Process a manifest with a job with no valid products.&lt;br /&gt;
|Result=The file is processed successfully. Audit history is recorded as the job having no products, and the load having no jobs.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_CycleFooter}} &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- MEDIA LANDSCAPE NO --&amp;gt; &lt;br /&gt;
{{Doc_Appendix&lt;br /&gt;
|Appendix=B&lt;br /&gt;
|Estimate=Y&lt;br /&gt;
|Glossary=EPOD&lt;br /&gt;
|Ref1=[[REQ 343463 EBB Paper Solution Design]]&lt;br /&gt;
|RefV1=2.0&lt;br /&gt;
|RefDate1=01/08/2017&lt;br /&gt;
|EREQ=0&lt;br /&gt;
|EEST=0&lt;br /&gt;
|EFS=2.5&lt;br /&gt;
|ETS=0&lt;br /&gt;
|EDEV=15.5&lt;br /&gt;
|ESTT=3.50&lt;br /&gt;
|EIMP=1.25&lt;br /&gt;
|EPM=1.5&lt;br /&gt;
|REQ=0&lt;br /&gt;
|EST=0&lt;br /&gt;
|FS=0.0&lt;br /&gt;
|TS=0&lt;br /&gt;
|DEV=5&lt;br /&gt;
|ST=0.0&lt;br /&gt;
|IMP=0.0&lt;br /&gt;
|PM=0.0&lt;br /&gt;
|Client={{#var:Client}}&lt;br /&gt;
|Year={{#var:Year}}&lt;br /&gt;
|FSEST=Y&lt;br /&gt;
|FOC=N&lt;br /&gt;
|Rev1=Matt Turner&lt;br /&gt;
|Rev1Title=OBSL Account Manager&lt;br /&gt;
|Rev2=Rebecca Elliott&lt;br /&gt;
|Rev2Title=EBB Paper Representative&lt;br /&gt;
}}&amp;lt;/div&amp;gt; &lt;br /&gt;
[[Category:{{#var:Client}} FS]]&lt;/div&gt;</summary>
		<author><name>AppaduN</name></author>
	</entry>
	<entry>
		<id>https://calidusassist.adcservices.apteancloud.com/calidus-assist/OBS/index.php?title=FS_344273_SCR-343463-01_EBB_Paper_Bespoke_Import_Interface&amp;diff=5983</id>
		<title>FS 344273 SCR-343463-01 EBB Paper Bespoke Import Interface</title>
		<link rel="alternate" type="text/html" href="https://calidusassist.adcservices.apteancloud.com/calidus-assist/OBS/index.php?title=FS_344273_SCR-343463-01_EBB_Paper_Bespoke_Import_Interface&amp;diff=5983"/>
		<updated>2018-06-05T17:06:16Z</updated>

		<summary type="html">&lt;p&gt;AppaduN: v1.1 - Changes reflecting changes after development&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;noprint&amp;quot;&amp;gt;&lt;br /&gt;
{{#vardefine:Client|EBB}}&lt;br /&gt;
{{#vardefine:ClientName|EBB Paper}}&lt;br /&gt;
{{#vardefine:System|''CALIDUS'' ePOD}}&lt;br /&gt;
{{#vardefine:Doc_Title|Bespoke Import Interface}}&lt;br /&gt;
{{#vardefine:Version|1.1}}&lt;br /&gt;
{{#vardefine:Date|10th August 2017}}&lt;br /&gt;
{{#vardefine:Reference|344273 SCR-343463-01}}&lt;br /&gt;
{{#vardefine:Year|2017}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{Doc_Title&lt;br /&gt;
|Client={{#var:ClientName}}&lt;br /&gt;
|System={{#var:System}}&lt;br /&gt;
|Title={{#var:Doc_Title}}&lt;br /&gt;
|Reference=FS {{#var:Reference}}&lt;br /&gt;
|Version={{#var:Version}}&lt;br /&gt;
|Date={{#var:Date}}&lt;br /&gt;
|Year={{#var:Year}}&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TOC --&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;noprint&amp;quot;&amp;gt;&lt;br /&gt;
= Functional Overview  =&lt;br /&gt;
== Client Requirement  ==&lt;br /&gt;
SCR-343463-01: Bespoke Import Interface&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OBS Logistics have been requested to write the interface in order to speed up the delivery of the project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The loads are interfaced from MSA in a custom XML format in a flat-file, after the routes are planned. A button is pressed when the manifest is finished planning to create this file.&lt;br /&gt;
&lt;br /&gt;
{{Note}} The manifests are used for picking. If additional orders are added to the vehicle (add-ons), the orders are placed on a separate manifest, for the same vehicle on the same day. This is because adding orders to an existing manifest (which is possible) will confuse the pickers and potentially result in double picks. This occurs quite frequently on radial deliveries.&lt;br /&gt;
&lt;br /&gt;
This file does not contain all the information required to create the jobs. Predominantly, address information and product case details are missing from this interface file. The remaining information is to be accessed directly from a view on the ERP system, running a SQL Server database.&lt;br /&gt;
&lt;br /&gt;
== Solution Overview ==&lt;br /&gt;
The interface created will be triggered by the receipt of the TMS XML file. The processing of the jobs on this file will retrieve the information on the orders from a view available in the ERP, through direct connection to this database. &lt;br /&gt;
&lt;br /&gt;
{{Note}} The C-ePOD system will be hosted by OBS, whilst the ERP is hosted by the customer. This interface will need to connect to this ERP to access the view to get the job details. There is a technical requirement to have the two servers connected, which will require action by OBS technical services and the customer in collaboration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A scheduled import process will be created on the system, running at a timed interval.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There will be multiple manifests sent for the same vehicle on the same day. These must be combined into a single manifest on C-ePOD. {{Note}} In order for the interface to successfully combine manifests, it is assumed that there will be one load required per vehicle per depot (Site) per day.&lt;br /&gt;
&lt;br /&gt;
{{Note}} Manifests (that create Loads in C-ePOD) will be allocated to a vehicle and/or driver. This allows the loads to be created and allocated to a driver for completion. Note however that, once created, the {{#var:System}} Admin system (Load or User screens) may be used to change allocation of vehicles and drivers on a load.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The interface will create loads, one per vehicle per depot (Site) per day.&lt;br /&gt;
&lt;br /&gt;
The system will be configured to create standing data from the received import information, such as:&lt;br /&gt;
* Drivers&lt;br /&gt;
* Customers (Invoice Addresses)&lt;br /&gt;
* Vehicles&lt;br /&gt;
As noted above, it is expected that this data will be created at implementation.&lt;br /&gt;
&lt;br /&gt;
When C-ePOD receives an inbound file from the customer, drivers and vehicles will be created as part of this interface, if they do not exist. The driver ID will be created as the first character of the first name, and up to the first 4 characters of the surname, with a 3-digit unique identifier added to them.&lt;br /&gt;
 &lt;br /&gt;
For example:&lt;br /&gt;
*         &amp;quot;DAVID EASTMAN&amp;quot; will become &amp;quot;DEAST001&amp;quot;&lt;br /&gt;
*         &amp;quot;SMITH JOHN&amp;quot; will become &amp;quot;SJOHN001&amp;quot;&lt;br /&gt;
*         &amp;quot;DEREK MAY&amp;quot; will become &amp;quot;DMAY001&amp;quot;&lt;br /&gt;
*         &amp;quot;TRUNKER M25&amp;quot;. TRUNKER M25 will become &amp;quot;TM25001&amp;quot;&lt;br /&gt;
Note that where other drivers have similar names, the generated ID will increment the unique identifier. So:&lt;br /&gt;
*         &amp;quot;DIANE EASTMAN&amp;quot; will become &amp;quot;DEAST002&amp;quot;&lt;br /&gt;
*         &amp;quot;SANDERSON JOHN&amp;quot; will become &amp;quot;SJOHN002&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
The password will be defaulted to the user name.&lt;br /&gt;
&lt;br /&gt;
It is noted that EBB will tidy up the list of drivers before the implementation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sites will be created for each depot, following the encoding within the customer systems:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!GP Site ID	!!GP ADI Site ID	!!Fleet name&lt;br /&gt;
|-&lt;br /&gt;
|03 CHARLTO	||903 ADI	||Thurrock&lt;br /&gt;
|-&lt;br /&gt;
|04 FARNBOR	||904 ADI	||Farnborough&lt;br /&gt;
|-&lt;br /&gt;
|05 WATFORD	||905 ADI	||Watford&lt;br /&gt;
|-&lt;br /&gt;
|09 YEOVIL	||909 ADI	||BRISTOL&lt;br /&gt;
|-&lt;br /&gt;
|10 BIRMING	||910 ADI	||Birmingham&lt;br /&gt;
|-&lt;br /&gt;
|11 MANCHES	||911 ADI	||Manchester&lt;br /&gt;
|-&lt;br /&gt;
|12 SHEFFIE	||912 ADI	||Sheffield&lt;br /&gt;
|-&lt;br /&gt;
|13 NEWCAST	||913 ADI	||Newcastle&lt;br /&gt;
|-&lt;br /&gt;
|14 GLASGOW	||914 ADI	||Glasgow&lt;br /&gt;
|-&lt;br /&gt;
|31 FELIXST	||931 ADI	||Felixstowe&lt;br /&gt;
|-&lt;br /&gt;
|32 MAREXPO	||932 ADI	||Marexport&lt;br /&gt;
|}&lt;br /&gt;
{{Note}} The site is taken from the Originating Depot. The ADI site ID will be considered to be the GP site ID in this interface. Any manifests in the file for sites not in this list will not have loads or jobs created for them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The interface must identify the Site (the executing depot) and the Owner (the originator). &lt;br /&gt;
* The owner is considered the Sales Territory (column SALSTERR in the MSA view) &lt;br /&gt;
* The executing depot is the depot property on the '''manifest''' tag in the XML file.&lt;br /&gt;
&lt;br /&gt;
It is noted that the following will be Owners only and will not be operators:&lt;br /&gt;
* 08 PRINTMT&lt;br /&gt;
* 20 EBBOFFI&lt;br /&gt;
* 30 GLOSSOP&lt;br /&gt;
&lt;br /&gt;
The following columns are also noted from the MSA view:&lt;br /&gt;
*         DefaultSiteID - the final delivery depot&lt;br /&gt;
*         Originating Depot - the depot from which the product is sourced. {{Note}} The ''depot'' attribute of the '''order''' tag in the TMS XML file also identifies the originating depot. For example, if this contains &amp;quot;\03&amp;quot; this identifies &amp;quot;03 CHARLTON&amp;quot; as the depot (and THURROCK as the fleet).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest on which a job is received will be stored against the job in C-ePOD, as well as any of the other customer references. This will be used by the interface to determine if the manifest has been received before. If this is the case, and the manifest has been modified (i.e. orders or products removed or added), this will be used by the system to determine whether jobs are to be added to the created load for this vehicle and day, or whether the jobs will be removed (deleted). Products not on the jobs updated will be removed, and new products added.&lt;br /&gt;
&lt;br /&gt;
The jobs will be placed on the Load in the order in which they are received in the manifest file. If a further manifest is received for this vehicle, the jobs will be added to the end of the manifest. A hard sequence will be generated for the jobs on the manifest.&lt;br /&gt;
&lt;br /&gt;
In the interface, orders for the same customer code will be linked together and consolidated on the device, ensuring that only one delivery instruction is present, although both orders will be maintained.&lt;br /&gt;
&lt;br /&gt;
The interface will consolidate jobs together if:&lt;br /&gt;
*         The manifest on which the job is received is determined to be on the same Load as other jobs.&lt;br /&gt;
*         The job has the same customer and delivery address as another job on the load.&lt;br /&gt;
*         The other jobs are not completed or cancelled.&lt;br /&gt;
*         They are the same type i.e. deliveries can consolidate with deliveries and collections with collections only.&lt;br /&gt;
Note that the consolidation process will not use the delivery time of the orders when determining whether to consolidate jobs.&lt;br /&gt;
&lt;br /&gt;
Note also that the driver will have the ability to manually consolidate and deconsolidate jobs on the device when executing the load.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are many different types of orders. The type is identified through the alpha prefix against the order. The main types are below:&lt;br /&gt;
* INV - Delivery order&lt;br /&gt;
* CAL - Call-off. Considered to be the same as an INV order.&lt;br /&gt;
* RTN - Collection from customer.&lt;br /&gt;
&lt;br /&gt;
{{Note}} Only these order types will be uploaded to the C-ePOD system as jobs. All other types will be excluded when processing the files. &lt;br /&gt;
&lt;br /&gt;
{{Note}} Any manifests marked as TRUNK (in the '''trailer''' tag of the TMS XML file) will also not be processed.&lt;br /&gt;
&lt;br /&gt;
Desk collections will be interfaced to C-ePOD on a separate manifest per depot, but with a driver of &amp;quot;WAREHOUSE&amp;quot;. {{Note}} The view MSA contains a column that identifies whether this is a customer collection (column CustColl), but this is unreliable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Job Instructions should be populated with Order comments (OrdComm) and Delivery Instructions (DelIns) concatenated together.&lt;br /&gt;
&lt;br /&gt;
When receiving jobs through the interface, the invoice (customer) address will be updated, if this has changed. EBB Paper have confirmed that the Invoice address changing is as expected. It has been confirmed that any previous jobs with this invoice (customer) address will from that point show the new invoice address, and this is acceptable to EBB Paper.&lt;br /&gt;
&lt;br /&gt;
Planned delivery times will be maintained on each job created. &lt;br /&gt;
&lt;br /&gt;
There are essentially 2 types of order:&lt;br /&gt;
* A non-timed delivery will have a cut off of 14:00&lt;br /&gt;
* Timed Delivery&lt;br /&gt;
&lt;br /&gt;
{{Note}} Development work is required with GP to allow the EBB Paper sales team to maintain times on the order. This will be an EBB Paper task to complete.&lt;br /&gt;
&lt;br /&gt;
The start and end planned dates and times will be populated from the values in the following MSA view columns:&lt;br /&gt;
*	Start Planned Date - ReqShipDate&lt;br /&gt;
*	Start Planned Time - StartTime if populated, else 0600&lt;br /&gt;
*	End Planned Date - ReqShipDate&lt;br /&gt;
*	End Planned Time - DelTime if populated, else FinishTime if populated, else 1400.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All jobs will be set with a configuration element known as Job Group - this will define the process to be followed against each job, such as:&lt;br /&gt;
* Driver Signature.&lt;br /&gt;
* POC/POD document format.&lt;br /&gt;
* POC/POD business address and logo.&lt;br /&gt;
* Terms and Conditions displayed.&lt;br /&gt;
&lt;br /&gt;
It is expected that there will need to be Job Group configurations for the different job types, as they will have different execution processes on the mobile devices:&lt;br /&gt;
* Radial Collection/Delivery&lt;br /&gt;
** Customer Signature&lt;br /&gt;
** Unmanned Location Signature enabled&lt;br /&gt;
** Deliver All functionality enabled&lt;br /&gt;
* Desk Collect&lt;br /&gt;
** Customer Signature&lt;br /&gt;
** Unmanned Location Signature will ''not'' be enabled&lt;br /&gt;
** Deliver All functionality enabled&lt;br /&gt;
For all jobs groups, it is expected that the following will also be configured:&lt;br /&gt;
* No Job Photo&lt;br /&gt;
* EBB Paper POD format&lt;br /&gt;
* Terms and Conditions is expected to be set to:&lt;br /&gt;
** Please be sure to check every consignment before signing. All sales are subject to Conditions of Sale, a copy of which is at the back of the EBB Price List and on our website http://www.ebbpaper.co.uk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The products will be created on each job created with the details taken from the ERP. The details expected to be received are:&lt;br /&gt;
* Product Code&lt;br /&gt;
* Product Description - stored as a truncated value&lt;br /&gt;
* FSC number (optional) - stored with the full product description in the long description field.&lt;br /&gt;
* Pack Size&lt;br /&gt;
* UOM&lt;br /&gt;
* Weight&lt;br /&gt;
* Quantity&lt;br /&gt;
&lt;br /&gt;
The pack size of the product will be taken from the ERP view in the interface. This will come from Sell Pack in the interface. It is noted that there is also a Purch Pack field, and it is confirmed that C-ePOD has no place to store this information.&lt;br /&gt;
&lt;br /&gt;
UOFM is the defined unit of measure of the product being delivered. There are multiple products UOMs that require the quantity to be decimal (for example, Weight (TONNES), Length (LINEAR METRES), Area (METRES SQUARED). In order for this to be achieved, the C-ePOD import interface for this system will multiply the quantities by a factor (for example, SHEETS UOM is in 1000's, so quantity 1.4 is actually 1400 sheets). &lt;br /&gt;
&lt;br /&gt;
The following is a list of the UOFMs known at this time and the proposals to handle them:&lt;br /&gt;
*	1 - always 1 - accepted as such, but rounded up if decimal.&lt;br /&gt;
*	1000 - quantity will be multiplied by 1000.&lt;br /&gt;
*	BOTTLE - always integer value - accepted as such, but rounded up if decimal.&lt;br /&gt;
*	BOX - always integer value - accepted as such, but rounded up if decimal.&lt;br /&gt;
*	CHARGE - Excluded - this is a delivery charge. No line will be created.&lt;br /&gt;
*	EACH - always integer value - accepted as such, but rounded up if decimal.&lt;br /&gt;
*	ENVS - Envelopes. Quantity will be multiplied by 1000. &lt;br /&gt;
*	MISC - always integer value - accepted as such, but rounded up if decimal.&lt;br /&gt;
*	ROLL - always integer value - accepted as such, but rounded up if decimal.&lt;br /&gt;
*	SETS - Multi-part paper. Quantity will be multiplied by 1000.&lt;br /&gt;
*	SHEETS - quantity will be multiplied by 1000&lt;br /&gt;
*	TONNE - quantity will be multiplied by 1000 and the UOM set to &amp;quot;KGS&amp;quot;.&lt;br /&gt;
*	METRES SQUARED - quantity will be multiplied by 1000.&lt;br /&gt;
*	LINEAR METRES - quantity will be multiplied by 1000.&lt;br /&gt;
&lt;br /&gt;
There are then essentially 4 rules:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!RULE	!!UOMS&lt;br /&gt;
|-&lt;br /&gt;
|Multiply by 1000 	||1000, ENVS, SETS, SHEETS, METRES SQUARED, LINEAR METRES&lt;br /&gt;
|-&lt;br /&gt;
|Round up to nearest integer value	||1, BOTTLE, BOX, EACH, MISC, ROLL&lt;br /&gt;
|-&lt;br /&gt;
|Exclude	||CHARGE&lt;br /&gt;
|-&lt;br /&gt;
|Multiply by 1000 and change to KGS	||TONNE&lt;br /&gt;
|}&lt;br /&gt;
Any not on the list would follow the first rule (i.e. multiply quantity by 1000).&lt;br /&gt;
&lt;br /&gt;
Note that the above method has been confirmed by the customer. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This process will create jobs as part of loads on the interface. It is possible that additional information may need to be communicated to the driver whilst out in the field. In this case, the WEBFLEET messaging function will be used by the operation. Furthermore, it is noted that additional jobs may be created in C-ePOD Admin for ad-hoc collections. For example, adding a job at the end of the shift (load) to go to a customer and pick up some empty pallets. {{Note}} This job will exist solely in C-ePOD, as the jobs are not being interfaced back to GP when complete. EBB Paper must take care when adding jobs of this type, ensuring that any subsequent actions required for these jobs is handled (for example, invoicing).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
This change will be applied to system version 3.X.&lt;br /&gt;
&lt;br /&gt;
This change includes up to 2 days relating to the external MSA view, for set-up and testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- NEW PAGE --&amp;gt; &lt;br /&gt;
= Set-up  =&lt;br /&gt;
== Pre-requisites  ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Menu Structure  ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Data  ==&lt;br /&gt;
A new Interface ID of &amp;quot;EBB&amp;quot;, description &amp;quot;EBB&amp;quot;, will be added to the EPOD_LIST_ITEMS for XF Interface IDs.&lt;br /&gt;
&lt;br /&gt;
A new Code Type of &amp;quot;UOM&amp;quot;, description &amp;quot;UOMs&amp;quot;, will be added to the EPOD_LIST_ITEMS for Reason Codes.&lt;br /&gt;
&lt;br /&gt;
A new EPOD_LISTS ID must be configured for Code Conversion Types, with the following List Items on EPOD_LIST_ITEMS, with Description and Value set as follows:&lt;br /&gt;
*   Value &amp;quot;MULTIPLY&amp;quot;, Description &amp;quot;Multiply&amp;quot;. This is the default value for EBB Paper.&lt;br /&gt;
*   Value &amp;quot;ROUND&amp;quot;, description &amp;quot;Round&amp;quot;.&lt;br /&gt;
*   Value &amp;quot;EXCLUDE&amp;quot;, description &amp;quot;Exclude&amp;quot;.&lt;br /&gt;
*   Value &amp;quot;DEFAULT&amp;quot;, description &amp;quot;As Received&amp;quot;. This is the default value for all other customers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sites for each depot will be configured. Each site will be set up with EPL_EXT_FLEET set to the fleet name, as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Site ID	!!Fleet&lt;br /&gt;
|-&lt;br /&gt;
|03 CHARLTO	||THURROCK&lt;br /&gt;
|-&lt;br /&gt;
|04 FARNBOR	||FARNBOROUGH&lt;br /&gt;
|-&lt;br /&gt;
|05 WATFORD	||WATFORD&lt;br /&gt;
|-&lt;br /&gt;
|09 YEOVIL	||BRISTOL&lt;br /&gt;
|-&lt;br /&gt;
|10 BIRMING	||BIRMINGHAM&lt;br /&gt;
|-&lt;br /&gt;
|11 MANCHES	||MANCHESTER&lt;br /&gt;
|-&lt;br /&gt;
|12 SHEFFIE	||SHEFFIELD&lt;br /&gt;
|-&lt;br /&gt;
|13 NEWCAST	||NEWCASTLE&lt;br /&gt;
|-&lt;br /&gt;
|14 GLASGOW	||GLASGOW&lt;br /&gt;
|-&lt;br /&gt;
|31 FELIXST	||FELIXSTOWE&lt;br /&gt;
|-&lt;br /&gt;
|32 MAREXPO	||MAREXPORT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=600px heights=350px perrow=1&amp;gt;&lt;br /&gt;
File:FS_344273_Admin_Site1.png|''Site Maintenance''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A new Import Interface configuration will be set up. This is required only for one of the sites, expected to be the first site &amp;quot;03 CHARLTO&amp;quot;:&lt;br /&gt;
*	EPL_XF_CONFIG_ID - &amp;quot;03 CHARLTO&amp;quot;&lt;br /&gt;
*	EPL_DESCRIPTION - As required&lt;br /&gt;
*	EPL_XF_TYPE - &amp;quot;FTP&amp;quot; or &amp;quot;FILE&amp;quot;&lt;br /&gt;
*	EPL_XF_DESTINATION - remote FTP server and path for FTP, local file path for FILE&lt;br /&gt;
*	EPL_XF_ID - &amp;quot;EBB&amp;quot;&lt;br /&gt;
*	EPL_WEB_USER - FTP user for FTP&lt;br /&gt;
*	EPL_WEB_PASSWORD - FTP password for FTP&lt;br /&gt;
*	EPL_DB_CONNECTION  - MSA database connection information e.g. &amp;quot;Data Source=[SERVER];Initial Catalog=[DB_NAME];User Id=[USER];Password=[PASSWORD];&amp;quot;&lt;br /&gt;
*	EPL_XF_DIRECTION - &amp;quot;I&amp;quot; - Import type&lt;br /&gt;
*	EPL_EXPORT_JOB_TYPES - &amp;quot;INV|CAL|RTN&amp;quot; - list of Order Types to be processed, pipe-delimited. Up to 5 allowed&lt;br /&gt;
*	EPL_FILENAME - Filename to match when picking up files. Expected to be &amp;quot;Manifest_*.xml&amp;quot;.&lt;br /&gt;
*	EPL_EMAIL_ERRORS - email address for file processing error notifications&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=600px heights=350px perrow=1&amp;gt;&lt;br /&gt;
File:FS_344273_Admin_XFConfig1.png|''New EBB Import Configuration''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A generic TTM Export configuration will be created (as ID &amp;quot;TTM&amp;quot;), as well as a specific TTM Export configuration for the first site (e.g. &amp;quot;03 CHARLTO&amp;quot;). The configuration of both will be identical apart from the Config ID.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=600px heights=350px perrow=1&amp;gt;&lt;br /&gt;
File:FS_344273_Admin_XFConfig2.png|''TTM Export Sample Configuration''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Interfaces for each site will be set as follows:&lt;br /&gt;
* For Site ID &amp;quot;03 CHARLTO&amp;quot;, set the XF Config ID to &amp;quot;03 CHARLTO&amp;quot;.&lt;br /&gt;
* For all other sites, set to &amp;quot;TTM&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is expected that there will need to be Job Group configurations for the different job types, as they will have different execution processes on the mobile devices.&lt;br /&gt;
&lt;br /&gt;
Job Groups will be created as follows for each site above:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Job Group	!!Description&lt;br /&gt;
|-&lt;br /&gt;
|COL    || Radial Collection&lt;br /&gt;
|-&lt;br /&gt;
|DEL    || Radial Delivery&lt;br /&gt;
|-&lt;br /&gt;
|DESK    || Desk Collections&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=600px heights=350px perrow=1&amp;gt;&lt;br /&gt;
File:FS_344273_Admin_JobGroups1.png|''Job Groups Maintenance''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The set-up of each job group will include the following:&lt;br /&gt;
* Radial Collection/Delivery&lt;br /&gt;
** Customer Signature&lt;br /&gt;
** Unmanned Location Signature enabled&lt;br /&gt;
** Deliver All functionality enabled&lt;br /&gt;
* Desk Collect&lt;br /&gt;
** Customer Signature&lt;br /&gt;
** Unmanned Location Signature will ''not'' be enabled&lt;br /&gt;
** Deliver All functionality enabled&lt;br /&gt;
&lt;br /&gt;
For all jobs groups, it is expected that the following will also be configured:&lt;br /&gt;
* No Job Photo&lt;br /&gt;
* EBB Paper POD format&lt;br /&gt;
* Terms and Conditions is expected to be set to:&lt;br /&gt;
** Please be sure to check every consignment before signing. All sales are subject to Conditions of Sale, a copy of which is at the back of the EBB Price List and on our website http://www.ebbpaper.co.uk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All of the UOMs required by the customer should be configured on the Admin Codes Maintenance screen for all sites. The values known at this time are as follows, with the Conversion settings required for each:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Conversion Type	!! Value	!! Code	!! UOMS&lt;br /&gt;
|-&lt;br /&gt;
|Multiply	|| 1000	||&amp;amp;nbsp;	|| 1000, ENVS, SETS, SHEETS, METRES SQUARED, LINEAR METRES&lt;br /&gt;
|-&lt;br /&gt;
|Round 	|| 1	||&amp;amp;nbsp;	|| 1, BOTTLE, BOX, EACH, MISC, ROLL&lt;br /&gt;
|-&lt;br /&gt;
|Exclude	||&amp;amp;nbsp;	||&amp;amp;nbsp;	|| CHARGE&lt;br /&gt;
|-&lt;br /&gt;
|Multiply 	|| 1000	|| KGS	|| TONNE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=600px heights=350px perrow=1&amp;gt;&lt;br /&gt;
File:FS_344273_Admin_Codes1.png|''Codes Maintenance''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- NEW PAGE --&amp;gt; &lt;br /&gt;
= Functional Description  =&lt;br /&gt;
== Database &amp;amp; Data Access Layer ==&lt;br /&gt;
The following fields will be added to the Job table EPOD_REASON_CODE:&lt;br /&gt;
*   EPL_CONV_TYPE - nvarchar(10)&lt;br /&gt;
*   EPL_CONV_VALUE - float&lt;br /&gt;
*   EPL_CONV_CODE - nvarchar(20)&lt;br /&gt;
&lt;br /&gt;
These fields will be added to all stored procedures in the database that require them.&lt;br /&gt;
&lt;br /&gt;
These fields are ''not'' required on the device.&lt;br /&gt;
&lt;br /&gt;
These fields are ''not'' required to be set on codes imported through the standard XML import (flat file or webservice). &lt;br /&gt;
&lt;br /&gt;
These fields are ''not'' required to be contained within the Export.&lt;br /&gt;
&lt;br /&gt;
These fields are ''not'' required to be used when filtering data for selection.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following fields will be added to the Job table EPOD_XF_CONFIG:&lt;br /&gt;
*   EPL_DB_CONNECTION - nvarchar(255)&lt;br /&gt;
&lt;br /&gt;
This field will be added to all stored procedures in the database that require it.&lt;br /&gt;
&lt;br /&gt;
This field is ''not'' required on the device.&lt;br /&gt;
&lt;br /&gt;
This field is ''not'' required to be used when filtering data for selection.&lt;br /&gt;
&lt;br /&gt;
{{Note}} All DAL objects that link to XF_CONFIG may also require change.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The EPOD_SETUP stored procedure will be modified for the new EPOD_LISTS and EPOD_LIST_ITEMS values.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Admin ==&lt;br /&gt;
=== Codes Maintenance Screen ===&lt;br /&gt;
The Codes Maintenance screen (reason_code.aspx) will be modified to support UOMs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=600px heights=350px perrow=1&amp;gt;&lt;br /&gt;
File:FS_344273_Admin_Codes1.png|''Codes Maintenance''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The '''Find''' criteria will be modified to allow selection of the new &amp;quot;UOM&amp;quot; type. Additionally, a blank &amp;quot;-- Select --&amp;quot; option will also be provided, for when the user wished to see all codes of all types. A new Code Type of &amp;quot;UOM&amp;quot; (description &amp;quot;UOMs&amp;quot;) will be added to the EPOD_LIST_ITEMS for Reason Codes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The results table does ''not'' require modifications.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The pop-up Entry/Edit form will be modified for entry of the new UOM codes.&lt;br /&gt;
&lt;br /&gt;
This is accessed when entering a new code using the '''New''' button, and when editing existing codes by clicking the '''Select''' button against a line in the results table.&lt;br /&gt;
&lt;br /&gt;
The user will be allowed to enter codes of type &amp;quot;UOM&amp;quot;, selected from the drop-down list.  A new Code Type of &amp;quot;UOM&amp;quot; will be added to the EPOD_LIST_ITEMS for Reason Codes.&lt;br /&gt;
&lt;br /&gt;
When editing or adding reason codes of type &amp;quot;UOM&amp;quot; ''only'', new fields will be present on the pop-up form, as shown below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Label	!!Field	!!Pop-up Help&lt;br /&gt;
|-&lt;br /&gt;
|Conversion Type	|| EPL_CONV_TYPE	||USED BY BESPOKE INTERFACES ONLY to determine whether the quantity is modified or the line processed when the UOM against the product line matches this value&lt;br /&gt;
|-&lt;br /&gt;
|Value	|| EPL_CONV_VALUE	||USED BY BESPOKE INTERFACES ONLY. If Conversion Type is &amp;quot;Multiply&amp;quot;, this value is used to multiply the product quantity. If Conversion Type is &amp;quot;Round&amp;quot;, this is used to round the quantity to the nearest value provided here.&lt;br /&gt;
|-&lt;br /&gt;
|XRef Code	|| EPL_CONV_CODE	||USED BY BESPOKE INTERFACES ONLY. If present, the UOM is converted to the value provided here.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These should be laid out as shown in the screenshot in the pop-up form.&lt;br /&gt;
&lt;br /&gt;
The Conversion Type will be added with the following drop-down list items, populated from the EPOD_LISTS and EPOD_LIST_ITEMS tables.&lt;br /&gt;
* &amp;quot;Multiply&amp;quot; - enter numeric value for multiplication.&lt;br /&gt;
* &amp;quot;Round&amp;quot; - enter value to round to (e.g. 1 means integer value, 0.25 is round to nearest 0.25, etc)&lt;br /&gt;
* &amp;quot;Exclude&amp;quot; - lines of this DU type are not added at all - Value field disabled.&lt;br /&gt;
* &amp;quot;As Received&amp;quot; - no calculation - Value field disabled.&lt;br /&gt;
&lt;br /&gt;
The default value for this list will be set by the default value in the EPOD_LIST_ITEMS table, as follows:&lt;br /&gt;
* Defaults to Type &amp;quot;Multiply&amp;quot; for EBB Paper &lt;br /&gt;
* Default to &amp;quot;As Received&amp;quot; for all other customers.&lt;br /&gt;
&lt;br /&gt;
The Value field will be enabled only if the following values are selected in the Conversion Type:&lt;br /&gt;
* Multiply&lt;br /&gt;
* Round&lt;br /&gt;
The Value field will be a numeric text field, allowing decimal entry, defaulting to &amp;quot;1000&amp;quot; if enabled. &lt;br /&gt;
&lt;br /&gt;
The XRef Code will be a drop-down list of all codes of the Code Type being edited/added by this screen, and will be populated on selection of the Code Type. This drop-down list will include a blank default value of &amp;quot;Blank&amp;quot;, and show the Code and Descriptions of all the selected codes. The list will be ordered by the Code, ascending.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When saving, the values will be saved in the appropriate fields on the EPOD_REASON_CODE table, as shown above.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Interface Config Screen ===&lt;br /&gt;
The Import/Export Maintenance screen (xf_config.aspx) will be modified to support configuration of the new EBB Paper interface.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=600px heights=350px perrow=1&amp;gt;&lt;br /&gt;
File:FS_344273_Admin_XFConfig1.png|''Import/Export Configuration Maintenance''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fields required to be displayed when configuring the &amp;quot;EBB&amp;quot; interface:&lt;br /&gt;
*	EPL_XF_CONFIG_ID - Always displayed.&lt;br /&gt;
*	EPL_DESCRIPTION - Always displayed.&lt;br /&gt;
*	EPL_XF_TYPE - Always displayed.&lt;br /&gt;
*	EPL_XF_DESTINATION - Always displayed.&lt;br /&gt;
*	EPL_XF_ID - Always displayed. This drop-down list will be modified to include ID &amp;quot;EBB&amp;quot;.&lt;br /&gt;
*	EPL_XF_DIRECTION - Always displayed.&lt;br /&gt;
*	EPL_WEB_USER - only if FTP or SOAP transfer types are selected.&lt;br /&gt;
*	EPL_WEB_PASSWORD - only if FTP or SOAP type selected&lt;br /&gt;
*	EPL_DB_CONNECTION - This new field will only display if type &amp;quot;EBB&amp;quot; is selected and will include validation that it must be entered. This will be labelled as &amp;quot;Database Connection&amp;quot;. The field will be a wide entry field (at least double the width of a standard field). &lt;br /&gt;
*	EPL_EXPORT_JOB_TYPES - Display if type is &amp;quot;EBB&amp;quot;. The validation on this field will be modified so that pipe-delimited list of anything can be entered, if the type is &amp;quot;EBB&amp;quot;.&lt;br /&gt;
*	EPL_FILENAME - Filename to match when picking up files. Expected to be &amp;quot;Manifest_*.xml&amp;quot;.&lt;br /&gt;
*	EPL_EMAIL_ERRORS - email address for file processing error notifications.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Auto-Import ==&lt;br /&gt;
=== General ===&lt;br /&gt;
The process will update and create all data as required, committing each as they are processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are instances where the failure reason will result in the following processing:&lt;br /&gt;
* Stop processing this file and all further files (Failed Import).&lt;br /&gt;
* Stop processing this file and process subsequent files (Failed File).&lt;br /&gt;
* Stop processing this order and move to the next order (Failed Order).&lt;br /&gt;
&lt;br /&gt;
Failed Import reasons:&lt;br /&gt;
* Unable to connect to MSA&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Failed File reasons:&lt;br /&gt;
* Standing Data not being created:&lt;br /&gt;
** User does not exist&lt;br /&gt;
** Vehicle does not exist&lt;br /&gt;
** Job Group does not exist&lt;br /&gt;
* Non-DESK manifest is on a load that has already been completed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Failed Order reasons:&lt;br /&gt;
* No details of this order in MSA&lt;br /&gt;
* Job for this order already complete&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reasons why a Manifest file will not create Loads and Jobs:&lt;br /&gt;
* Site does not exist&lt;br /&gt;
* Manifest is a trunk.&lt;br /&gt;
* Jobs are of the wrong type.&lt;br /&gt;
* There are no valid products on the job.&lt;br /&gt;
* There are no valid jobs on a Load.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If there are issues processing, the whole file will be rejected and will need to be reprocessed. However, all data saved to that point will be present.&lt;br /&gt;
&lt;br /&gt;
Audit records will be maintained, identifying successfully processed and failed import files, identifying the reason why a file failed to import. &lt;br /&gt;
&lt;br /&gt;
It is possible for a manifest to generate multiple audit reasons when processing a file. All of these codes will be audited. Multiple audit records may be maintained per file, or a single audit record created with all details in it. This will be decided when developed, based on which method is a more generic solution for the C-ePOD product.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rejected files will be emailed (depending on configuration) and will be stored in the standard Failed files location, as the processes do now.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Note}} The process generating the email will be modified to include the auditing of the file. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When a file is reprocessed, this will over-write and update the existing data, as specified in the processing below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The processing of each file will proceed as follows:&lt;br /&gt;
* Retrieve Manifest files.&lt;br /&gt;
* Filter and validate the manifest file.&lt;br /&gt;
* Create User and Vehicle data.&lt;br /&gt;
* Create a new Load or combine to an existing Load.&lt;br /&gt;
* Create or update jobs on the load, through a link to the MSA view.&lt;br /&gt;
* Create or update products on the jobs.&lt;br /&gt;
* Remove any products from the job not contained in the manifest file.&lt;br /&gt;
* Remove any jobs from the load not contained in the manifest file.&lt;br /&gt;
These areas are covered in the following sections&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=== Retrieve Manifest Files ===&lt;br /&gt;
For FILE transfer type, currently all files in the specified destination folder (EPL_XF_DESTINATION) are processed (using Directory.GetFiles). This will be modified so that, if a filename pattern is specified (in EPOD_XF_CONFIG.EPL_FILENAME), the process will only retrieve and process files matching this pattern (by passing a second parameter to the GetFiles method, specifying the pattern from EPOD_XF_CONFIG.EPL_FILENAME).&lt;br /&gt;
&lt;br /&gt;
For FTP transfer type, the same is true, in that all files are retrieved (using ListDirectory in method GetFileList). No facility exists to pattern-match file names. Therefore the method GetFileList will be modified so that, if a filename pattern is specified (to be passed to an overloaded method in a new parameter, passing EPOD_XF_CONFIG.EPL_FILENAME), the process will only add these to the result if the filename returned matches the pattern provided.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Regardless of whether the file was retrieved through FTP or from the filesystem, each file (representing a single manifest) will be passed to a new processing method to validate and process the contents and create jobs and products. The current process bases this on EPL_MSG_TYPE. This will be extended to check the EPL_XF_ID field - should this be &amp;quot;EBB&amp;quot;, the new processing method will be called.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A file failing to process will not stop subsequent files from processing. However, if the MSA view cannot be connected to, processing will stop (see section Create Jobs for details on the MSA View connection).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Validate the Manifest ===&lt;br /&gt;
This process will receive the manifest contents as an XML file. This file will be downloaded before processing to ensure that all characters that should have been URL encoded have been. The file will be pre-parsed to remove any non printable characters.&lt;br /&gt;
&lt;br /&gt;
The '''depot''' tag will be extracted from the '''manifest/header''' tag contents. The site will be retrieved using the EPL_EXT_FLEET field. If a site is not found with a fleet matching the '''depot''' tag, the manifest will not be processed. {{Note}} This is not an error and will not be audited as such - the manifest will be marked as successfully processed.&lt;br /&gt;
&lt;br /&gt;
The site retrieved will be stored by the process in an EPOD_SITE DAL object.&lt;br /&gt;
&lt;br /&gt;
The '''trailer''' tag will be extracted from '''manifest/header''' tag contents. If this tag starts with the text &amp;quot;TRUNK&amp;quot;, then this manifest will not be processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create Vehicles and Users ===&lt;br /&gt;
The '''driver''' tag will be extracted from the '''manifest/header''' tag contents. &lt;br /&gt;
&lt;br /&gt;
If this driver is set to &amp;quot;WAREHOUSE&amp;quot;, the user ID will be created as this value.&lt;br /&gt;
&lt;br /&gt;
If this is a non-zero value that is not explicitly &amp;quot;WAREHOUSE&amp;quot;, C-ePOD will attempt to create the driver ID (if configured to do so) as the first character of the first name, and up to the first 4 characters of the surname, with a 3-digit unique identifier added to them. The case will be converted to uppercase.&lt;br /&gt;
 &lt;br /&gt;
For example:&lt;br /&gt;
*         &amp;quot;David Eastman&amp;quot; will become &amp;quot;DEAST001&amp;quot;&lt;br /&gt;
*         &amp;quot;SMITH JOHN&amp;quot; will become &amp;quot;SJOHN001&amp;quot;&lt;br /&gt;
*         &amp;quot;DEREK MAY&amp;quot; will become &amp;quot;DMAY001&amp;quot;&lt;br /&gt;
*         &amp;quot;TRUNKER M25&amp;quot;. TRUNKER M25 will become &amp;quot;TM25001&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The process will attempt to find this user using the Site ID and the generated User ID above. If a record is found, the process will compare the user name in the XML file to the user name on the database. If different, the 3-digit id will be incremented by 1 and the process repeated until a matching EPOD_USER record is found, or one is not found for this ID.&lt;br /&gt;
&lt;br /&gt;
Check the EPOD_SITE.EPL_IMPORT_CREATE_SD_FLAG. If this is set to &amp;quot;N&amp;quot; and an EPOD_USER record is not found, the file should be rejected. An audit record of &amp;quot;User X Not Found&amp;quot; shall be created.&lt;br /&gt;
&lt;br /&gt;
If one is not found and EPOD_SITE.EPL_IMPORT_CREATE_SD_FLAG is &amp;quot;Y&amp;quot;, the EPOD_USER record will be created and updated as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Field	!!Populated by&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SITE_ID || EPOD_SITE.EPL_SITE_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_USER_ID || either &amp;quot;WAREHOUSE&amp;quot;, or as generated above&lt;br /&gt;
|-&lt;br /&gt;
|EPL_USER_PASSWORD || set to the same value as the user ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_USER_NAME || '''driver'''&lt;br /&gt;
|-&lt;br /&gt;
|EPL_USER_ADMIN || &amp;quot;N&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_USER_ACTIVE || &amp;quot;Y&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_USER_ACTIVITY_DATE || 0&lt;br /&gt;
|-&lt;br /&gt;
|EPL_USER_ACTIVITY_TIME || 0&lt;br /&gt;
|-&lt;br /&gt;
|EPL_PASSWORD_VISIBLE_IND || 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The '''vehiclereg''' tag will be extracted from the '''manifest/header''' tag contents. If this is a non-zero value, C-ePOD will attempt to create the driver ID (if configured to do so).&lt;br /&gt;
&lt;br /&gt;
The process will attempt to find this vehicle using the Site ID and the Vehicle ID as the Vehicle Reg above. If a record is found, this will be stored by the process as EPOD_VEHICLE.&lt;br /&gt;
&lt;br /&gt;
Check the EPOD_SITE.EPL_IMPORT_CREATE_SD_FLAG. If this is set to &amp;quot;N&amp;quot; and an EPOD_VEHICLE record is not found, the file should be rejected. An audit record of &amp;quot;Vehicle X Not Found&amp;quot; shall be created.&lt;br /&gt;
&lt;br /&gt;
If one is not found and EPOD_SITE.EPL_IMPORT_CREATE_SD_FLAG is &amp;quot;Y&amp;quot;, the EPOD_VEHICLE record will be created and updated as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Field	!!Populated by&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SITE_ID || EPOD_SITE.EPL_SITE_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_VEHICLE_ID || '''vehiclereg'''&lt;br /&gt;
|-&lt;br /&gt;
|EPL_VEHICLE_REG || '''vehiclereg'''&lt;br /&gt;
|-&lt;br /&gt;
|EPL_DESCRIPTION || '''vehiclereg'''&lt;br /&gt;
|-&lt;br /&gt;
|EPL_STATUS || &amp;quot;Y&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note}} Data created on these tables will be truncated. Comparisons to this data as described above with be truncated before comparison, in case the data is space-filled in the XML file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a Load ===&lt;br /&gt;
A load will be attempted to be found using the following data, providing that at least a vehicle or user has been provided:&lt;br /&gt;
* EPL_SITE_ID - EPOD_SITE.EPL_SITE_ID&lt;br /&gt;
* EPL_LOAD_START_PLANNED_DATE - '''deliverydate''' tag. Note that this value must be reformatted to YYYYMMDD format from DD-MM-YYYY format.&lt;br /&gt;
* EPL_VEHICLE_ID - EPOD_VEHICLE.EPL_VEHICLE_ID if one is present, otherwise this is not set as an parameter for the selection.&lt;br /&gt;
* EPL_USER_ID - EPOD_USER.EPOD_USER_ID if one is present, otherwise this is not set as an parameter for the selection.&lt;br /&gt;
* EPL_STATUS - Not equal to &amp;quot;C&amp;quot; &amp;quot;X&amp;quot; if the '''driver''' attribute is not explicitly set to &amp;quot;WAREHOUSE&amp;quot;, otherwise this is not set as an parameter for the selection.&lt;br /&gt;
&lt;br /&gt;
If one is not found, a new load will be created on EPOD_LOAD as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Field	!!Populated by&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SITE_ID ||EPOD_SITE.EPL_SITE_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_LOAD_ID || generated by the EPOD system.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_LOAD_START_PLANNED_DATE || extracted from the '''deliverydate''' tag. Note that this value must be reformatted to YYYYMMDD format from DD-MM-YYYY format.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_LOAD_START_PLANNED_TIME || extracted from the '''starttime''' tag. Note that this value must be reformatted (removing the embedded colon character and adding &amp;quot;0000&amp;quot; to the end. Note that if this tag is not present or blank, this field should be set to 6000000.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_LOAD_END_PLANNED_DATE || as the Load Start Planned Date.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_LOAD_END_PLANNED_TIME || 0&lt;br /&gt;
|-&lt;br /&gt;
|EPL_VEHICLE_ID || EPOD_VEHICLE.EPL_VEHICLE_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_USER_ID || EPOD_VEHICLE.EPL_USER_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_STATUS || &amp;quot;P&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_LOAD_INFORMATION || the ''number'' attribute of the '''manifest''' tag concatenated with the '''addinstruct''' tag, delimited by a dash.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If a load is found and the manifest is ''not'' for desk collection (i.e. where the '''driver''' tag value is not explicitly &amp;quot;WAREHOUSE&amp;quot;), the status (EPL_STATUS) should be checked. If this value is not &amp;quot;P&amp;quot; then the file should be rejected. An audit record of &amp;quot;Load X at wrong status&amp;quot; shall be created.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If a load is found, the Load Information field EPL_LOAD_INFORMATION should be checked that it contains the text built from:&lt;br /&gt;
* the ''number'' attribute of the '''manifest''' tag concatenated with the '''addinstruct''' tag, delimited by a dash.&lt;br /&gt;
If it does not contain this, this should be added to the text already in the field, delimited by a newline character.&lt;br /&gt;
&lt;br /&gt;
The load (found or created) should be stored in an EPOD_LOAD object and updated.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create Jobs ===&lt;br /&gt;
The process will find and store the highest sequence of any jobs already attached to the EPOD_LOAD object, by checking the content of the EPOD_JOBS list on the EPOD_LOAD object. &lt;br /&gt;
&lt;br /&gt;
The process will extract the list of allowed order prefixes from the EPOD_XF_CONFIG.EPL_EXPORT_JOB_TYPES field. {{Note}} If this parameter is empty, all orders will be processed.&lt;br /&gt;
&lt;br /&gt;
The process will loop through all instances of the '''order''' tag in the ''manifest/data'' tag. Note that this is separated by a '''customer''' tag.&lt;br /&gt;
&lt;br /&gt;
Each '''order''' tag will be processed to create EPOD_JOB records, which will be added to the EPOD_LOAD.EPOD_JOBS list.&lt;br /&gt;
&lt;br /&gt;
The ''sopnumber'' attribute of the '''order''' tag will be extracted. if the attribute does not exist or has no value, this tag may be skipped. &lt;br /&gt;
&lt;br /&gt;
The trimmed attribute value will be checked to see whether the value begins with any of the allowed order prefixes. If it does not, then then the order will not be processed. &lt;br /&gt;
&lt;br /&gt;
A connection will be made to the MSA database for the order details. This will be achieved by opening a connection using the connection information stored in EPOD_XF_CONFIG.EPL_DB_CONNECTION. The connection should be attempted several times (for example, 3 times). If a connection cannot be made, then the file should be rejected. An audit record of &amp;quot;Order X: Cannot connect to MSA&amp;quot; shall be created. {{Note}} As this is a fundamental requirement of the process, should this fail, processing of this file ''and all others'' should be terminated for this run.&lt;br /&gt;
&lt;br /&gt;
The connection details will be specified in a connection string in EPOD_XF_CONFIG.EPL_DB_CONNECTION.&lt;br /&gt;
&lt;br /&gt;
{{Note}} At this time, the following information has not yet been confirmed. &lt;br /&gt;
* Connection details (IP, user, password, port)&lt;br /&gt;
* Database type&lt;br /&gt;
* View name&lt;br /&gt;
&lt;br /&gt;
{{Note}} This MSA view is used from this point onwards for all details. Should the connection fail when attempting to retrieve subsequent records from the MSA view, the connection should be attempted to be re-established, again retrying several times, to ensure that this process is predominantly uninterrupted. &lt;br /&gt;
&lt;br /&gt;
In the instance where the connection fails, the file need not be rejected and moved to the Failure area - it can be left to be reprocessed immediately on the next run.&lt;br /&gt;
&lt;br /&gt;
When the connection is established, the details of the order will be retrieved from the MSA view using a standard SQL query, querying on the SOP Number.&lt;br /&gt;
&lt;br /&gt;
Should the view return no details, then the order will not be processed. An audit record of &amp;quot;Order X: No details in MSA&amp;quot; shall be created. The process will continue with the next order in the XML file.&lt;br /&gt;
&lt;br /&gt;
The Load will be checked to see whether the order already exists - the process will look for the order in EPOD_LOAD.EPOD_JOBS, where the job code (EPL_JOB_CODE_ is equal to the trimmed value of the '''sopnumber''' tag. If an order is found, an EPOD_JOB object will be created and set to the value of the job in the EPOD_LOAD.EPOD_JOBS EPOD_JOB object by reference.&lt;br /&gt;
&lt;br /&gt;
If the job found is already complete (EPL_STATUS = &amp;quot;C&amp;quot;), then the process will skip updating this order. An audit record of &amp;quot;Order X: already complete&amp;quot; shall be created. The process will continue with the next order in the XML file.&lt;br /&gt;
&lt;br /&gt;
If a job is not found, a new job will be created using the key values:&lt;br /&gt;
*	EPL_SITE_ID - EPOD_LOAD.EPL_SITE_ID.&lt;br /&gt;
*	EPL_LOAD_ID - EPOD_LOAD.EPL_LOAD_ID.&lt;br /&gt;
*	EPL_JOB_TYPE - If the left 3 characters of the '''sopnumber''' tag are &amp;quot;RTN&amp;quot;, set this value to &amp;quot;C&amp;quot;, otherwise set this value to &amp;quot;D&amp;quot;.&lt;br /&gt;
*	EPL_JOB_CODE - the trimmed value of the '''sopnumber''' tag.&lt;br /&gt;
A value in EPL_JOB_ID will be generated for this job at this stage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Job Group should be calculated as follows:&lt;br /&gt;
* If the EPL_JOB_TYPE is &amp;quot;C&amp;quot;, set to &amp;quot;COL&amp;quot;&lt;br /&gt;
* else if EPOD_LOAD.EPL_USER_ID = &amp;quot;WAREHOUSE&amp;quot;, set to &amp;quot;DESK&amp;quot;&lt;br /&gt;
* else set to &amp;quot;DEL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The process will attempt to find this Job Group using:&lt;br /&gt;
*	EPL_SITE_ID - EPOD_LOAD.EPL_SITE_ID.&lt;br /&gt;
*	EPL_JOB_GROUP - as set above.&lt;br /&gt;
If a record is found, this will be stored by the process as an EPOD_JOB_GROUPS DAL object.&lt;br /&gt;
&lt;br /&gt;
Check the EPOD_SITE.EPL_IMPORT_CREATE_SD_FLAG. If this is set to &amp;quot;N&amp;quot; and an EPOD_JOB_GROUPS record is not found, the file should be rejected. An audit record of &amp;quot;Job Group X Not Found&amp;quot; shall be created.&lt;br /&gt;
&lt;br /&gt;
If one is not found and EPOD_SITE.EPL_IMPORT_CREATE_SD_FLAG is &amp;quot;Y&amp;quot;, the EPOD_JOB_GROUPS record will be created as follows:&lt;br /&gt;
*	EPL_SITE_ID - EPOD_SITE.EPL_SITE_ID&lt;br /&gt;
*	EPL_JOB_GROUP - as set above.&lt;br /&gt;
*	EPL_DESCRIPTION:&lt;br /&gt;
** If EPL_JOB_GROUP is &amp;quot;COL&amp;quot;, set to &amp;quot;Collections&amp;quot;.&lt;br /&gt;
** If EPL_JOB_GROUP is &amp;quot;DEL&amp;quot;, set to &amp;quot;Deliveries&amp;quot;.&lt;br /&gt;
** If EPL_JOB_GROUP is &amp;quot;DESK&amp;quot;, set to &amp;quot;Desk Collections&amp;quot;.&lt;br /&gt;
All flags will be set as their default values.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The customer code, invoice address and contact information will be retrieved from the MSA view. The customer code will be checked as to whether it is already created in the system, by checking for an EPOD_CUSTOMER record using the keys:&lt;br /&gt;
*	EPL_SITE_ID - EPOD_SITE.EPL_SITE_ID&lt;br /&gt;
*	EPL_CUSTOMER_CODE - column CUSTNMBR from the MSA view.&lt;br /&gt;
&lt;br /&gt;
If this record does not exist, or a record does exist but the details are different, the record will be updated as follows:&lt;br /&gt;
If one is not found, a new customer will be created on EPOD_CUSTOMER as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Field	!!Populated by&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SITE_ID || EPOD_SITE.EPL_SITE_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_CUSTOMER_CODE || CUSTNMBR&lt;br /&gt;
|-&lt;br /&gt;
|EPL_CUSTOMER_NAME || CUSTNAME&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_1 || InvAdd1&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_2 || InvAdd2&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_3 || InvAdd3&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_4 || InvCity&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_5 || InvState&lt;br /&gt;
|-&lt;br /&gt;
|EPL_POSTCODE || InvZip (Spaces removed and truncated to 8 characters)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Note}} All values above are leading/trailing space trimmed unless otherwise stated.&lt;br /&gt;
&lt;br /&gt;
The delivery address and contact information will then be compared to this Invoice address, comparing the following items:&lt;br /&gt;
*	EPL_CUSTOMER_NAME - DelName&lt;br /&gt;
*	EPL_ADDRESS_1 - DelAdd1&lt;br /&gt;
*	EPL_ADDRESS_2 - DelAdd2&lt;br /&gt;
*	EPL_ADDRESS_3 - DelAdd3&lt;br /&gt;
*	EPL_ADDRESS_4 - DelCity&lt;br /&gt;
*	EPL_ADDRESS_5 - DelState&lt;br /&gt;
*	EPL_POSTCODE - DelZip &lt;br /&gt;
&lt;br /&gt;
If any of the values are different, a Job Address will be created through an EPOD_JOB_ADDRESS DAL object, populated as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Field	!!Populated by&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SITE_ID || EPOD_SITE.EPL_SITE_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_JOB_ID || EPOD_JOB.EPL_JOB_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_JOB_TYPE || EPOD_JOB.EPL_JOB_TYPE&lt;br /&gt;
|-&lt;br /&gt;
|EPL_NAME || DelName&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_1 || DelAdd1&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_2 || DelAdd2&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_3 || DelAdd3&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_4 || DelCity&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_5 || DelState&lt;br /&gt;
|-&lt;br /&gt;
|EPL_POSTCODE || DelZip (Spaces removed and truncated to 8 characters)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note}} All values above are leading/trailing space trimmed unless otherwise stated.&lt;br /&gt;
&lt;br /&gt;
If this is not the first job being processed for the load, the process will check whether the job being created is not the first job being created for the customer code in this manifest. If this is not a subsequent job for this customer code, blank any stored values for the following fields:&lt;br /&gt;
* EPL_SEQUENCE&lt;br /&gt;
* EPL_LINKED_ID&lt;br /&gt;
&lt;br /&gt;
If this is not a subsequent job for this customer code, the process will then loop through existing jobs in EPOD_LOAD.EPOD_JOBS in reverse sequence, looking for any job that matches as follows:&lt;br /&gt;
* EPL_CUSTOMER_CODE is the same&lt;br /&gt;
* EPL_STATUS not &amp;quot;C&amp;quot; or &amp;quot;X&amp;quot;&lt;br /&gt;
* EPL_JOB_TYPE is the same as the job being created.&lt;br /&gt;
* The delivery address is the same as the job being created.&lt;br /&gt;
&lt;br /&gt;
If a match is found, check the value of the field EPL_LINKED_ID. If there is no value, set this to the value in the record's EPL_SEQUENCE field and update the object. The process will then store the values in the following fields:&lt;br /&gt;
* EPL_SEQUENCE - EPL_SEQUENCE of the job found&lt;br /&gt;
* EPL_LINKED_ID - EPL_LINKED_ID of the job found&lt;br /&gt;
&lt;br /&gt;
The EPOD_JOB object will then be updated with the values as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Field	!!Populated by&lt;br /&gt;
|-&lt;br /&gt;
|EPL_JOB_GROUP	|| The calculated Job Group above&lt;br /&gt;
|-&lt;br /&gt;
|EPL_JOB_INSTRUCTION	|| Manifest No (manfest), Order comments (OrdComm) and Delivery Instructions (DelIns) concatenated together with a space separator.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_STATUS	|| &amp;quot;P&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_CUSTOMER_CODE	|| The customer code (CUSTNMBR).&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SEQUENCE	|| Stored value of EPL_SEQUENCE if there is one, or the maximum value of sequences of jobs on this load, plus 1.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_START_PLANNED_DATE	|| ReqShipDate&lt;br /&gt;
|-&lt;br /&gt;
|EPL_START_PLANNED_TIME	|| StartTime if populated, else 06000000 (06:00)&lt;br /&gt;
|-&lt;br /&gt;
|EPL_END_PLANNED_DATE	|| ReqShipDate&lt;br /&gt;
|-&lt;br /&gt;
|EPL_END_PLANNED_TIME	|| DelTime if populated, else FinishTime if populated, else 14000000 (14:00).&lt;br /&gt;
|-&lt;br /&gt;
|EPL_JOB_CODE	|| the trimmed value of the '''sopnumber''' tag.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_CUST_REF	|| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_OFFICE_INSTRUCTION	|| tcsFLST_Route&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SO_NUMBER	|| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ORDER_DATE	|| CREATDDT&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SALES_CONTACT	|| UserID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_OWNER_NAME	|| The sales territory (SALSTERR)&lt;br /&gt;
|-&lt;br /&gt;
|EPL_EXT_REF	|| The manifest (extracted from the ''number'' attribute of the '''manifest''' tag)&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ACCOUNT	|| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_LINKED_ID	|| Stored value of EPL_LINKED_ID if there is one.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_TIMEZONE	|| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_LOAD_LOCATION	|| Originating Depot&lt;br /&gt;
|-&lt;br /&gt;
|EPL_TTM_STOP_NUMBER	|| Set to the value in EPL_SEQUENCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note}} that if updating a job at EPL_STATUS of &amp;quot;X&amp;quot;, any existing products/containers associated with this job will also be reset to pending status.&lt;br /&gt;
&lt;br /&gt;
The process will then store the following:&lt;br /&gt;
* EPL_CUSTOMER_CODE - the Customer code last processed in this manifest file.&lt;br /&gt;
* EPL_SEQUENCE - EPL_SEQUENCE of the job created&lt;br /&gt;
* EPL_LINKED_ID - EPL_LINKED_ID of the job created&lt;br /&gt;
&lt;br /&gt;
The job will be updated and saved at this point.&lt;br /&gt;
&lt;br /&gt;
The Job ID of the job created will be added to a comma-delimited string of jobs processed for this manifest.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create Products ===&lt;br /&gt;
The process will loop through each record from MSA view, in order to create the product lines. {{Note}} All lines in the MSA view detail product information, including the first line.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The value in UOFM field of the MSA view will be looked up against the EPOD_REASON_CODE table matching the following parameters:&lt;br /&gt;
* EPL_SITE_ID - EPOD_JOB.EPL_SITE_ID&lt;br /&gt;
* EPL_REASON_CODE - UOFM&lt;br /&gt;
&lt;br /&gt;
If a record is not found, create an EPOD_PRODUCT DAL object with values set as follows:&lt;br /&gt;
* EPL_SITE_ID - EPOD_JOB.EPL_SITE_ID&lt;br /&gt;
* EPL_REASON_CODE - UOFM&lt;br /&gt;
* EPL_DESCRIPTION - UOFM&lt;br /&gt;
* EPL_CONV_TYPE - &amp;quot;MULTIPLY&amp;quot;&lt;br /&gt;
* EPL_CONV_VALUE - 1000&lt;br /&gt;
* EPL_CONV_CODE - &amp;quot;&amp;quot;&lt;br /&gt;
Update this UOM code.&lt;br /&gt;
&lt;br /&gt;
If the value of EPOD_PRODUCT.EPL_CONV_TYPE is &amp;quot;EXCLUDE&amp;quot;, this product will not be added - the process will move to the next record in the MSA view.&lt;br /&gt;
&lt;br /&gt;
If the value of EPOD_PRODUCT.EPL_CONV_TYPE is &amp;quot;MULTIPLY&amp;quot;, multiply the value in the QUANTITY field of the MSA view by the value stored in EPL_CONV_VALUE and store as the quantity.&lt;br /&gt;
&lt;br /&gt;
If the value of EPOD_PRODUCT.EPL_CONV_TYPE is &amp;quot;ROUND&amp;quot;, round the value in the QUANTITY field of the MSA view by the value stored in EPL_CONV_VALUE and store as the quantity.&lt;br /&gt;
&lt;br /&gt;
If the value of EPOD_PRODUCT.EPL_CONV_TYPE is &amp;quot;DEFAULT&amp;quot;, store the value in the QUANTITY field of the MSA view as the quantity.&lt;br /&gt;
&lt;br /&gt;
If the value of EPOD_PRODUCT.EPL_CONV_CODE has a valid value, store the EPL_CONV_CODE as the UOM.&lt;br /&gt;
&lt;br /&gt;
If the value of EPOD_PRODUCT.EPL_CONV_CODE is blank or null, store the UOFM field from the MSA view as the UOM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The process will check to see if a product already exists on the job by checking the EPOD_JOB.EPOD_PRODUCTS list for an object with the following values:&lt;br /&gt;
* EPL_SITE_ID - EPOD_JOB.EPL_SITE_ID&lt;br /&gt;
* EPL_JOB_ID - EPOD_JOB.EPL_JOB_ID&lt;br /&gt;
* EPL_CONTAINER_ID - &amp;quot;000000000000000&amp;quot; (15 zeroes in a string, denoting a loose product)&lt;br /&gt;
* EPL_PRODUCT_CODE - ITEMNMBR &lt;br /&gt;
* EPL_SEQUENCE - linenumber/16384 (first 4 characters of this if not a whole number)&lt;br /&gt;
&lt;br /&gt;
Note that ITEMNMBR and ITEMDESC may contain control characters not compatible with the EPOD device software. These should be stripped out before saving into the EPOD database.&lt;br /&gt;
&lt;br /&gt;
If one is not found, an EPOD_PRODUCT object will be created and added to the EPOD_JOB.EPOD_PRODUCTS list.&lt;br /&gt;
&lt;br /&gt;
If one is found or created above, an EPOD_PRODUCT object will be pointed to this object by reference.&lt;br /&gt;
&lt;br /&gt;
The EPOD_PRODUCT object (found or created) will have the fields updated as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Field	!!Populated by&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SITE_ID || EPOD_JOB.EPL_SITE_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_JOB_ID || EPOD_JOB.EPL_JOB_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_CONTAINER_ID || &amp;quot;000000000000000&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_PRODUCT_CODE || ITEMNMBR&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SEQUENCE || linenumber/16384 (first 4 characters of this if not a whole number)&lt;br /&gt;
|-&lt;br /&gt;
|EPL_DESCRIPTION || ITEMDESC, truncated to 40 characters&lt;br /&gt;
|-&lt;br /&gt;
|EPL_PRODUCT_QTY_PLANNED || The quantity calculated and stored above&lt;br /&gt;
|-&lt;br /&gt;
|EPL_PRODUCT_QTY_CASE || SellPack if populated and numeric, else 0.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_STATUS || &amp;quot;P&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_PRODUCT_WEIGHT || ITEMSHWT&lt;br /&gt;
|-&lt;br /&gt;
|EPL_CUST_REF || CustordNo&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ITEM_TYPE ||&lt;br /&gt;
|-&lt;br /&gt;
|EPL_UNIT_TYPE || The UOM stored above.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_DESCRIPTION_LONG || ITEMDESC and ebbFLTX_Sales_Comments concatenated with CR/LF characters.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_PRODUCT_QTY_ORDERED || Set to the same value as EPL_PRODUCT_QTY_PLANNED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The product record on EPOD_PRODUCT will then be updated.&lt;br /&gt;
&lt;br /&gt;
The Product Code of the product created will be added to a comma-delimited string of products processed for this job.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Remove Products not on the Job ===&lt;br /&gt;
All subsequent records on the MSA view will be processed in this manner and stored on the job.&lt;br /&gt;
&lt;br /&gt;
When all products are processed, the process will check through all products on the job and compare to the list of products processed on this manifest for this job. Any products on the job but not in the manifest will be deleted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If, after this, there are no products on the job, the job will be deleted. An audit record of &amp;quot;No Products on Order X - order deleted&amp;quot; shall be created.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Remove Jobs not on the Load for that Manifest ===&lt;br /&gt;
All subsequent order tags in the Manifest will be processed in this manner and stored on the load.&lt;br /&gt;
&lt;br /&gt;
When all orders on the manifest are processed, the process will check through all jobs on the load (with that Manifest number, as stored in EPL_EXT_REF) and compare to the list of jobs processed on this manifest. Any jobs for this manifest on the load but not in the manifest will be deleted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If, after this, there are no jobs on the load, the load will be deleted. An audit record of &amp;quot;No Jobs on Load X - load deleted&amp;quot; shall be created.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- MEDIA LANDSCAPE YES --&amp;gt; &lt;br /&gt;
= Appendix A: TEST PLAN  =&lt;br /&gt;
{{TestPlan_Header&lt;br /&gt;
|Title={{#var:Doc_Title}}&lt;br /&gt;
|Log={{#var:Reference}}&lt;br /&gt;
|Description=Testing the new EBB paper interface can be configured and works as expected.&lt;br /&gt;
|MenuAccess=N/A&lt;br /&gt;
|Prerequisites=A system configured as EBB Paper.&lt;br /&gt;
|Objective=To test that: UOMs may be entered with conversion types; the EBB Paper interface may be configured and; the EBB paper interface works as expected.&lt;br /&gt;
}} {{ #vardefine: Cycle | 0 }}{{ #vardefine: SubCycle | 0 }}&lt;br /&gt;
{{TestPlan_CycleHeader&lt;br /&gt;
|Cycle={{ #vardefineecho: Cycle | {{ #expr: {{ #var: Cycle }} + 1 }} }}{{ #vardefine: SubCycle | {{ #var: Cycle }} }}&lt;br /&gt;
|Title=Admin&lt;br /&gt;
|Notes=&amp;amp;nbsp;&lt;br /&gt;
}} &amp;lt;!--INSERT TESTS HERE --&amp;gt; {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a new Interface type as expected for EBB Paper.&lt;br /&gt;
|Result=The new EBB Paper interface can be configured and edited as expected.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a new reason code. Select type &amp;quot;UOM&amp;quot;.&lt;br /&gt;
|Result=Type UOM can be selected from the drop-down list. The Conversion fields are displayed and defaulted as expected.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Select Conversion Type &amp;quot;Round&amp;quot; and &amp;quot;Multiply&amp;quot;.&lt;br /&gt;
|Result=A Value may be entered.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Save the code. Enter another code. Select other Conversion Types.&lt;br /&gt;
|Result=A Value may not be entered.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Save the code. Enter another code with an Xref code and conversion type &amp;quot;As Received&amp;quot;.&lt;br /&gt;
|Result=The XRef code is entered and saved.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Find all UOM codes. &lt;br /&gt;
|Result=UOM can be selected as a filter element. All UOM codes are displayed. &lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Edit UOM codes.&lt;br /&gt;
|Result=The codes are displayed as they were entered. The Conversion fields are displayed as expected.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_CycleFooter}} &lt;br /&gt;
{{TestPlan_CycleHeader&lt;br /&gt;
|Cycle={{ #vardefineecho: Cycle | {{ #expr: {{ #var: Cycle }} + 1 }} }}{{ #vardefine: SubCycle | {{ #var: Cycle }} }}&lt;br /&gt;
|Title=Interface&lt;br /&gt;
|Notes=Set up the site to NOT create standing data. Configure the interface for FTP file transfer. Configure the MSA connection to be incorrect.&lt;br /&gt;
}} &amp;lt;!--INSERT TESTS HERE --&amp;gt; {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create valid manifest files in the configured FTP area, one named &amp;quot;Manifest_test1.xml&amp;quot; and one named &amp;quot;incorrect.xml&amp;quot;. Both should have a user that does not match an existing vehicle. Run the import process.&lt;br /&gt;
|Result=Only the manifest matching the filename is processed. This is rejected for an invalid user. The file is placed in a Failed directory.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Change the interface configuration to FILE transfer type. Create valid manifest files in the configured FILE area, one named &amp;quot;Manifest_test2.xml&amp;quot; and one named &amp;quot;incorrect.xml&amp;quot;. Both should have a vehicle that does not match an existing vehicle, but with a valid user. Run the import process.&lt;br /&gt;
|Result=Only the manifest matching the filename is processed. This is rejected for an invalid vehicle. The file is placed in a Failed directory.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Process a manifest (any transfer method) with a valid user and vehicle, with job groups not created.&lt;br /&gt;
|Result=The file is rejected for invalid job group. The file is placed in a Failed directory.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Configure the system to create standing data. Create two valid (but different) manifests, with a user and vehicle that does not match any existing data. Ensure there is a valid job with at least one valid product.&lt;br /&gt;
|Result=The first file is processed and rejected due to being unable to connect to MSA. The second file is not processed at all.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Configure the interface with the correct MSA view connection details. Process the manifests above again.&lt;br /&gt;
|Result=The files are processed without errors. The Vehicle is created. The Users is created. The Job Group is created. The Customer is created. The Load is created. The Job is created. The products are created. The file is audited as processed successfully. The file is placed in a Success directory.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a manifest almost identical to the last manifest, but with different Load start time, Job Start time, product quantities. Ensure the invoice address is changed. Ensure that there are comments on the Manifest. Process the manifest.&lt;br /&gt;
|Result=The load, job and products are updated. The manifest comments are appended to the Load Instructions. The invoice (customer) address is updated.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a manifest for the same date, vehicle and user, with orders with one valid sopnumber, and all others as invalid SOP numbers. Ensure the valid order is not for the same customer as the prior manifest. Process the manifest.&lt;br /&gt;
|Result=A job is created on the load for the one valid order. All others are not processed. The job is sequenced after all others&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a manifest for the same date, vehicle and user, with an order with a valid INV sopnumber. Ensure the order is for the same customer as the first manifest. Process the manifest.&lt;br /&gt;
|Result=A job is created on the load for the order. The job is sequenced and linked to the matching job from the first manifest.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a manifest for the same date, vehicle and user, with orders with a valid sopnumber with the same customer code as the last manifest. Ensure two are RTN jobs and two are INV jobs. Process the manifest.&lt;br /&gt;
|Result=Jobs are created on the load for the orders. The jobs are correctly identified as Collection and Delivery jobs, with the correct Job Group. The jobs are sequenced after any existing jobs on the load. The RTN jobs will have the same sequence and linked ID. The INV jobs will have the same sequence and linked ID as the existing INV job on the load for this customer.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a manifest for the same date, vehicle and user, with orders with a valid sopnumber with the same customer code as the last manifest. Ensure two are RTN jobs and two are INV jobs. Ensure the delivery address is different to the invoice address. Process the manifest.&lt;br /&gt;
|Result=Jobs are created on the load for the orders. The jobs are correctly identified as Collection and Delivery jobs, with the correct Job Group. The jobs are sequenced after any existing jobs on the load. The RTN jobs will have the same sequence and linked ID. The INV jobs will have the same sequence and linked ID. No jobs will be linked to existing jobs on the manifest. The Job Address is created for these loads.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a manifest for a different date, vehicle and user, with orders with valid sopnumbers, for many customers. Ensure that they have a mix of UOMs configured with Round, Multiply, As Received, Exclude and Xref Code conversions, as well as a product without a configured UOM.&lt;br /&gt;
|Result=The jobs and products are created as expected. The Exclude product is not created. The quantities are set as per the conversion type rules. The unknown UOM is created with default values.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Complete or cancel the load created. Process the same manifest file.&lt;br /&gt;
|Result=The manifest is rejected for invalid load status.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Process a DESK COLLECT manifest with a user of &amp;quot;WAREHOUSE&amp;quot;&lt;br /&gt;
|Result=A load is created. The user is created.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Complete or cancel the load created. Process another DESK COLLECT manifest file.&lt;br /&gt;
|Result=A new load is created. &lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Process a manifest with a job with no valid products.&lt;br /&gt;
|Result=The file is processed successfully. Audit history is recorded as the job having no products, and the load having no jobs.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_CycleFooter}} &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- MEDIA LANDSCAPE NO --&amp;gt; &lt;br /&gt;
{{Doc_Appendix&lt;br /&gt;
|Appendix=B&lt;br /&gt;
|Estimate=Y&lt;br /&gt;
|Glossary=EPOD&lt;br /&gt;
|Ref1=[[REQ 343463 EBB Paper Solution Design]]&lt;br /&gt;
|RefV1=2.0&lt;br /&gt;
|RefDate1=01/08/2017&lt;br /&gt;
|EREQ=0&lt;br /&gt;
|EEST=0&lt;br /&gt;
|EFS=2.5&lt;br /&gt;
|ETS=0&lt;br /&gt;
|EDEV=15.5&lt;br /&gt;
|ESTT=3.50&lt;br /&gt;
|EIMP=1.25&lt;br /&gt;
|EPM=1.5&lt;br /&gt;
|REQ=0&lt;br /&gt;
|EST=0&lt;br /&gt;
|FS=0.0&lt;br /&gt;
|TS=0&lt;br /&gt;
|DEV=5&lt;br /&gt;
|ST=0.0&lt;br /&gt;
|IMP=0.0&lt;br /&gt;
|PM=0.0&lt;br /&gt;
|Client={{#var:Client}}&lt;br /&gt;
|Year={{#var:Year}}&lt;br /&gt;
|FSEST=Y&lt;br /&gt;
|FOC=N&lt;br /&gt;
|Rev1=Matt Turner&lt;br /&gt;
|Rev1Title=OBSL Account Manager&lt;br /&gt;
|Rev2=Rebecca Elliott&lt;br /&gt;
|Rev2Title=EBB Paper Representative&lt;br /&gt;
}}&amp;lt;/div&amp;gt; &lt;br /&gt;
[[Category:{{#var:Client}} FS]]&lt;/div&gt;</summary>
		<author><name>AppaduN</name></author>
	</entry>
	<entry>
		<id>https://calidusassist.adcservices.apteancloud.com/calidus-assist/OBS/index.php?title=FS_344273_SCR-343463-01_EBB_Paper_Bespoke_Import_Interface&amp;diff=5982</id>
		<title>FS 344273 SCR-343463-01 EBB Paper Bespoke Import Interface</title>
		<link rel="alternate" type="text/html" href="https://calidusassist.adcservices.apteancloud.com/calidus-assist/OBS/index.php?title=FS_344273_SCR-343463-01_EBB_Paper_Bespoke_Import_Interface&amp;diff=5982"/>
		<updated>2018-06-05T16:59:55Z</updated>

		<summary type="html">&lt;p&gt;AppaduN: Changes reflecting changes after development&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;noprint&amp;quot;&amp;gt;&lt;br /&gt;
{{#vardefine:Client|EBB}}&lt;br /&gt;
{{#vardefine:ClientName|EBB Paper}}&lt;br /&gt;
{{#vardefine:System|''CALIDUS'' ePOD}}&lt;br /&gt;
{{#vardefine:Doc_Title|Bespoke Import Interface}}&lt;br /&gt;
{{#vardefine:Version|1.0}}&lt;br /&gt;
{{#vardefine:Date|10th August 2017}}&lt;br /&gt;
{{#vardefine:Reference|344273 SCR-343463-01}}&lt;br /&gt;
{{#vardefine:Year|2017}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{Doc_Title&lt;br /&gt;
|Client={{#var:ClientName}}&lt;br /&gt;
|System={{#var:System}}&lt;br /&gt;
|Title={{#var:Doc_Title}}&lt;br /&gt;
|Reference=FS {{#var:Reference}}&lt;br /&gt;
|Version={{#var:Version}}&lt;br /&gt;
|Date={{#var:Date}}&lt;br /&gt;
|Year={{#var:Year}}&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TOC --&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;noprint&amp;quot;&amp;gt;&lt;br /&gt;
= Functional Overview  =&lt;br /&gt;
== Client Requirement  ==&lt;br /&gt;
SCR-343463-01: Bespoke Import Interface&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OBS Logistics have been requested to write the interface in order to speed up the delivery of the project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The loads are interfaced from MSA in a custom XML format in a flat-file, after the routes are planned. A button is pressed when the manifest is finished planning to create this file.&lt;br /&gt;
&lt;br /&gt;
{{Note}} The manifests are used for picking. If additional orders are added to the vehicle (add-ons), the orders are placed on a separate manifest, for the same vehicle on the same day. This is because adding orders to an existing manifest (which is possible) will confuse the pickers and potentially result in double picks. This occurs quite frequently on radial deliveries.&lt;br /&gt;
&lt;br /&gt;
This file does not contain all the information required to create the jobs. Predominantly, address information and product case details are missing from this interface file. The remaining information is to be accessed directly from a view on the ERP system, running a SQL Server database.&lt;br /&gt;
&lt;br /&gt;
== Solution Overview ==&lt;br /&gt;
The interface created will be triggered by the receipt of the TMS XML file. The processing of the jobs on this file will retrieve the information on the orders from a view available in the ERP, through direct connection to this database. &lt;br /&gt;
&lt;br /&gt;
{{Note}} The C-ePOD system will be hosted by OBS, whilst the ERP is hosted by the customer. This interface will need to connect to this ERP to access the view to get the job details. There is a technical requirement to have the two servers connected, which will require action by OBS technical services and the customer in collaboration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A scheduled import process will be created on the system, running at a timed interval.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There will be multiple manifests sent for the same vehicle on the same day. These must be combined into a single manifest on C-ePOD. {{Note}} In order for the interface to successfully combine manifests, it is assumed that there will be one load required per vehicle per depot (Site) per day.&lt;br /&gt;
&lt;br /&gt;
{{Note}} Manifests (that create Loads in C-ePOD) will be allocated to a vehicle and/or driver. This allows the loads to be created and allocated to a driver for completion. Note however that, once created, the {{#var:System}} Admin system (Load or User screens) may be used to change allocation of vehicles and drivers on a load.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The interface will create loads, one per vehicle per depot (Site) per day.&lt;br /&gt;
&lt;br /&gt;
The system will be configured to create standing data from the received import information, such as:&lt;br /&gt;
* Drivers&lt;br /&gt;
* Customers (Invoice Addresses)&lt;br /&gt;
* Vehicles&lt;br /&gt;
As noted above, it is expected that this data will be created at implementation.&lt;br /&gt;
&lt;br /&gt;
When C-ePOD receives an inbound file from the customer, drivers and vehicles will be created as part of this interface, if they do not exist. The driver ID will be created as the first character of the first name, and up to the first 4 characters of the surname, with a 3-digit unique identifier added to them.&lt;br /&gt;
 &lt;br /&gt;
For example:&lt;br /&gt;
*         &amp;quot;DAVID EASTMAN&amp;quot; will become &amp;quot;DEAST001&amp;quot;&lt;br /&gt;
*         &amp;quot;SMITH JOHN&amp;quot; will become &amp;quot;SJOHN001&amp;quot;&lt;br /&gt;
*         &amp;quot;DEREK MAY&amp;quot; will become &amp;quot;DMAY001&amp;quot;&lt;br /&gt;
*         &amp;quot;TRUNKER M25&amp;quot;. TRUNKER M25 will become &amp;quot;TM25001&amp;quot;&lt;br /&gt;
Note that where other drivers have similar names, the generated ID will increment the unique identifier. So:&lt;br /&gt;
*         &amp;quot;DIANE EASTMAN&amp;quot; will become &amp;quot;DEAST002&amp;quot;&lt;br /&gt;
*         &amp;quot;SANDERSON JOHN&amp;quot; will become &amp;quot;SJOHN002&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
The password will be defaulted to the user name.&lt;br /&gt;
&lt;br /&gt;
It is noted that EBB will tidy up the list of drivers before the implementation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sites will be created for each depot, following the encoding within the customer systems:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!GP Site ID	!!GP ADI Site ID	!!Fleet name&lt;br /&gt;
|-&lt;br /&gt;
|03 CHARLTO	||903 ADI	||Thurrock&lt;br /&gt;
|-&lt;br /&gt;
|04 FARNBOR	||904 ADI	||Farnborough&lt;br /&gt;
|-&lt;br /&gt;
|05 WATFORD	||905 ADI	||Watford&lt;br /&gt;
|-&lt;br /&gt;
|09 YEOVIL	||909 ADI	||BRISTOL&lt;br /&gt;
|-&lt;br /&gt;
|10 BIRMING	||910 ADI	||Birmingham&lt;br /&gt;
|-&lt;br /&gt;
|11 MANCHES	||911 ADI	||Manchester&lt;br /&gt;
|-&lt;br /&gt;
|12 SHEFFIE	||912 ADI	||Sheffield&lt;br /&gt;
|-&lt;br /&gt;
|13 NEWCAST	||913 ADI	||Newcastle&lt;br /&gt;
|-&lt;br /&gt;
|14 GLASGOW	||914 ADI	||Glasgow&lt;br /&gt;
|-&lt;br /&gt;
|31 FELIXST	||931 ADI	||Felixstowe&lt;br /&gt;
|-&lt;br /&gt;
|32 MAREXPO	||932 ADI	||Marexport&lt;br /&gt;
|}&lt;br /&gt;
{{Note}} The site is taken from the Originating Depot. The ADI site ID will be considered to be the GP site ID in this interface. Any manifests in the file for sites not in this list will not have loads or jobs created for them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The interface must identify the Site (the executing depot) and the Owner (the originator). &lt;br /&gt;
* The owner is considered the Sales Territory (column SALSTERR in the MSA view) &lt;br /&gt;
* The executing depot is the depot property on the '''manifest''' tag in the XML file.&lt;br /&gt;
&lt;br /&gt;
It is noted that the following will be Owners only and will not be operators:&lt;br /&gt;
* 08 PRINTMT&lt;br /&gt;
* 20 EBBOFFI&lt;br /&gt;
* 30 GLOSSOP&lt;br /&gt;
&lt;br /&gt;
The following columns are also noted from the MSA view:&lt;br /&gt;
*         DefaultSiteID - the final delivery depot&lt;br /&gt;
*         Originating Depot - the depot from which the product is sourced. {{Note}} The ''depot'' attribute of the '''order''' tag in the TMS XML file also identifies the originating depot. For example, if this contains &amp;quot;\03&amp;quot; this identifies &amp;quot;03 CHARLTON&amp;quot; as the depot (and THURROCK as the fleet).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest on which a job is received will be stored against the job in C-ePOD, as well as any of the other customer references. This will be used by the interface to determine if the manifest has been received before. If this is the case, and the manifest has been modified (i.e. orders or products removed or added), this will be used by the system to determine whether jobs are to be added to the created load for this vehicle and day, or whether the jobs will be removed (deleted). Products not on the jobs updated will be removed, and new products added.&lt;br /&gt;
&lt;br /&gt;
The jobs will be placed on the Load in the order in which they are received in the manifest file. If a further manifest is received for this vehicle, the jobs will be added to the end of the manifest. A hard sequence will be generated for the jobs on the manifest.&lt;br /&gt;
&lt;br /&gt;
In the interface, orders for the same customer code will be linked together and consolidated on the device, ensuring that only one delivery instruction is present, although both orders will be maintained.&lt;br /&gt;
&lt;br /&gt;
The interface will consolidate jobs together if:&lt;br /&gt;
*         The manifest on which the job is received is determined to be on the same Load as other jobs.&lt;br /&gt;
*         The job has the same customer and delivery address as another job on the load.&lt;br /&gt;
*         The other jobs are not completed or cancelled.&lt;br /&gt;
*         They are the same type i.e. deliveries can consolidate with deliveries and collections with collections only.&lt;br /&gt;
Note that the consolidation process will not use the delivery time of the orders when determining whether to consolidate jobs.&lt;br /&gt;
&lt;br /&gt;
Note also that the driver will have the ability to manually consolidate and deconsolidate jobs on the device when executing the load.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are many different types of orders. The type is identified through the alpha prefix against the order. The main types are below:&lt;br /&gt;
* INV - Delivery order&lt;br /&gt;
* CAL - Call-off. Considered to be the same as an INV order.&lt;br /&gt;
* RTN - Collection from customer.&lt;br /&gt;
&lt;br /&gt;
{{Note}} Only these order types will be uploaded to the C-ePOD system as jobs. All other types will be excluded when processing the files. &lt;br /&gt;
&lt;br /&gt;
{{Note}} Any manifests marked as TRUNK (in the '''trailer''' tag of the TMS XML file) will also not be processed.&lt;br /&gt;
&lt;br /&gt;
Desk collections will be interfaced to C-ePOD on a separate manifest per depot, but with a driver of &amp;quot;WAREHOUSE&amp;quot;. {{Note}} The view MSA contains a column that identifies whether this is a customer collection (column CustColl), but this is unreliable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Job Instructions should be populated with Order comments (OrdComm) and Delivery Instructions (DelIns) concatenated together.&lt;br /&gt;
&lt;br /&gt;
When receiving jobs through the interface, the invoice (customer) address will be updated, if this has changed. EBB Paper have confirmed that the Invoice address changing is as expected. It has been confirmed that any previous jobs with this invoice (customer) address will from that point show the new invoice address, and this is acceptable to EBB Paper.&lt;br /&gt;
&lt;br /&gt;
Planned delivery times will be maintained on each job created. &lt;br /&gt;
&lt;br /&gt;
There are essentially 2 types of order:&lt;br /&gt;
* A non-timed delivery will have a cut off of 14:00&lt;br /&gt;
* Timed Delivery&lt;br /&gt;
&lt;br /&gt;
{{Note}} Development work is required with GP to allow the EBB Paper sales team to maintain times on the order. This will be an EBB Paper task to complete.&lt;br /&gt;
&lt;br /&gt;
The start and end planned dates and times will be populated from the values in the following MSA view columns:&lt;br /&gt;
*	Start Planned Date - ReqShipDate&lt;br /&gt;
*	Start Planned Time - StartTime if populated, else 0600&lt;br /&gt;
*	End Planned Date - ReqShipDate&lt;br /&gt;
*	End Planned Time - DelTime if populated, else FinishTime if populated, else 1400.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All jobs will be set with a configuration element known as Job Group - this will define the process to be followed against each job, such as:&lt;br /&gt;
* Driver Signature.&lt;br /&gt;
* POC/POD document format.&lt;br /&gt;
* POC/POD business address and logo.&lt;br /&gt;
* Terms and Conditions displayed.&lt;br /&gt;
&lt;br /&gt;
It is expected that there will need to be Job Group configurations for the different job types, as they will have different execution processes on the mobile devices:&lt;br /&gt;
* Radial Collection/Delivery&lt;br /&gt;
** Customer Signature&lt;br /&gt;
** Unmanned Location Signature enabled&lt;br /&gt;
** Deliver All functionality enabled&lt;br /&gt;
* Desk Collect&lt;br /&gt;
** Customer Signature&lt;br /&gt;
** Unmanned Location Signature will ''not'' be enabled&lt;br /&gt;
** Deliver All functionality enabled&lt;br /&gt;
For all jobs groups, it is expected that the following will also be configured:&lt;br /&gt;
* No Job Photo&lt;br /&gt;
* EBB Paper POD format&lt;br /&gt;
* Terms and Conditions is expected to be set to:&lt;br /&gt;
** Please be sure to check every consignment before signing. All sales are subject to Conditions of Sale, a copy of which is at the back of the EBB Price List and on our website http://www.ebbpaper.co.uk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The products will be created on each job created with the details taken from the ERP. The details expected to be received are:&lt;br /&gt;
* Product Code&lt;br /&gt;
* Product Description - stored as a truncated value&lt;br /&gt;
* FSC number (optional) - stored with the full product description in the long description field.&lt;br /&gt;
* Pack Size&lt;br /&gt;
* UOM&lt;br /&gt;
* Weight&lt;br /&gt;
* Quantity&lt;br /&gt;
&lt;br /&gt;
The pack size of the product will be taken from the ERP view in the interface. This will come from Sell Pack in the interface. It is noted that there is also a Purch Pack field, and it is confirmed that C-ePOD has no place to store this information.&lt;br /&gt;
&lt;br /&gt;
UOFM is the defined unit of measure of the product being delivered. There are multiple products UOMs that require the quantity to be decimal (for example, Weight (TONNES), Length (LINEAR METRES), Area (METRES SQUARED). In order for this to be achieved, the C-ePOD import interface for this system will multiply the quantities by a factor (for example, SHEETS UOM is in 1000's, so quantity 1.4 is actually 1400 sheets). &lt;br /&gt;
&lt;br /&gt;
The following is a list of the UOFMs known at this time and the proposals to handle them:&lt;br /&gt;
*	1 - always 1 - accepted as such, but rounded up if decimal.&lt;br /&gt;
*	1000 - quantity will be multiplied by 1000.&lt;br /&gt;
*	BOTTLE - always integer value - accepted as such, but rounded up if decimal.&lt;br /&gt;
*	BOX - always integer value - accepted as such, but rounded up if decimal.&lt;br /&gt;
*	CHARGE - Excluded - this is a delivery charge. No line will be created.&lt;br /&gt;
*	EACH - always integer value - accepted as such, but rounded up if decimal.&lt;br /&gt;
*	ENVS - Envelopes. Quantity will be multiplied by 1000. &lt;br /&gt;
*	MISC - always integer value - accepted as such, but rounded up if decimal.&lt;br /&gt;
*	ROLL - always integer value - accepted as such, but rounded up if decimal.&lt;br /&gt;
*	SETS - Multi-part paper. Quantity will be multiplied by 1000.&lt;br /&gt;
*	SHEETS - quantity will be multiplied by 1000&lt;br /&gt;
*	TONNE - quantity will be multiplied by 1000 and the UOM set to &amp;quot;KGS&amp;quot;.&lt;br /&gt;
*	METRES SQUARED - quantity will be multiplied by 1000.&lt;br /&gt;
*	LINEAR METRES - quantity will be multiplied by 1000.&lt;br /&gt;
&lt;br /&gt;
There are then essentially 4 rules:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!RULE	!!UOMS&lt;br /&gt;
|-&lt;br /&gt;
|Multiply by 1000 	||1000, ENVS, SETS, SHEETS, METRES SQUARED, LINEAR METRES&lt;br /&gt;
|-&lt;br /&gt;
|Round up to nearest integer value	||1, BOTTLE, BOX, EACH, MISC, ROLL&lt;br /&gt;
|-&lt;br /&gt;
|Exclude	||CHARGE&lt;br /&gt;
|-&lt;br /&gt;
|Multiply by 1000 and change to KGS	||TONNE&lt;br /&gt;
|}&lt;br /&gt;
Any not on the list would follow the first rule (i.e. multiply quantity by 1000).&lt;br /&gt;
&lt;br /&gt;
Note that the above method has been confirmed by the customer. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This process will create jobs as part of loads on the interface. It is possible that additional information may need to be communicated to the driver whilst out in the field. In this case, the WEBFLEET messaging function will be used by the operation. Furthermore, it is noted that additional jobs may be created in C-ePOD Admin for ad-hoc collections. For example, adding a job at the end of the shift (load) to go to a customer and pick up some empty pallets. {{Note}} This job will exist solely in C-ePOD, as the jobs are not being interfaced back to GP when complete. EBB Paper must take care when adding jobs of this type, ensuring that any subsequent actions required for these jobs is handled (for example, invoicing).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
This change will be applied to system version 3.X.&lt;br /&gt;
&lt;br /&gt;
This change includes up to 2 days relating to the external MSA view, for set-up and testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- NEW PAGE --&amp;gt; &lt;br /&gt;
= Set-up  =&lt;br /&gt;
== Pre-requisites  ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Menu Structure  ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Data  ==&lt;br /&gt;
A new Interface ID of &amp;quot;EBB&amp;quot;, description &amp;quot;EBB&amp;quot;, will be added to the EPOD_LIST_ITEMS for XF Interface IDs.&lt;br /&gt;
&lt;br /&gt;
A new Code Type of &amp;quot;UOM&amp;quot;, description &amp;quot;UOMs&amp;quot;, will be added to the EPOD_LIST_ITEMS for Reason Codes.&lt;br /&gt;
&lt;br /&gt;
A new EPOD_LISTS ID must be configured for Code Conversion Types, with the following List Items on EPOD_LIST_ITEMS, with Description and Value set as follows:&lt;br /&gt;
*   Value &amp;quot;MULTIPLY&amp;quot;, Description &amp;quot;Multiply&amp;quot;. This is the default value for EBB Paper.&lt;br /&gt;
*   Value &amp;quot;ROUND&amp;quot;, description &amp;quot;Round&amp;quot;.&lt;br /&gt;
*   Value &amp;quot;EXCLUDE&amp;quot;, description &amp;quot;Exclude&amp;quot;.&lt;br /&gt;
*   Value &amp;quot;DEFAULT&amp;quot;, description &amp;quot;As Received&amp;quot;. This is the default value for all other customers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sites for each depot will be configured. Each site will be set up with EPL_EXT_FLEET set to the fleet name, as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Site ID	!!Fleet&lt;br /&gt;
|-&lt;br /&gt;
|03 CHARLTO	||THURROCK&lt;br /&gt;
|-&lt;br /&gt;
|04 FARNBOR	||FARNBOROUGH&lt;br /&gt;
|-&lt;br /&gt;
|05 WATFORD	||WATFORD&lt;br /&gt;
|-&lt;br /&gt;
|09 YEOVIL	||BRISTOL&lt;br /&gt;
|-&lt;br /&gt;
|10 BIRMING	||BIRMINGHAM&lt;br /&gt;
|-&lt;br /&gt;
|11 MANCHES	||MANCHESTER&lt;br /&gt;
|-&lt;br /&gt;
|12 SHEFFIE	||SHEFFIELD&lt;br /&gt;
|-&lt;br /&gt;
|13 NEWCAST	||NEWCASTLE&lt;br /&gt;
|-&lt;br /&gt;
|14 GLASGOW	||GLASGOW&lt;br /&gt;
|-&lt;br /&gt;
|31 FELIXST	||FELIXSTOWE&lt;br /&gt;
|-&lt;br /&gt;
|32 MAREXPO	||MAREXPORT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=600px heights=350px perrow=1&amp;gt;&lt;br /&gt;
File:FS_344273_Admin_Site1.png|''Site Maintenance''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A new Import Interface configuration will be set up. This is required only for one of the sites, expected to be the first site &amp;quot;03 CHARLTO&amp;quot;:&lt;br /&gt;
*	EPL_XF_CONFIG_ID - &amp;quot;03 CHARLTO&amp;quot;&lt;br /&gt;
*	EPL_DESCRIPTION - As required&lt;br /&gt;
*	EPL_XF_TYPE - &amp;quot;FTP&amp;quot; or &amp;quot;FILE&amp;quot;&lt;br /&gt;
*	EPL_XF_DESTINATION - remote FTP server and path for FTP, local file path for FILE&lt;br /&gt;
*	EPL_XF_ID - &amp;quot;EBB&amp;quot;&lt;br /&gt;
*	EPL_WEB_USER - FTP user for FTP&lt;br /&gt;
*	EPL_WEB_PASSWORD - FTP password for FTP&lt;br /&gt;
*	EPL_DB_CONNECTION  - MSA database connection information e.g. &amp;quot;Data Source=[SERVER];Initial Catalog=[DB_NAME];User Id=[USER];Password=[PASSWORD];&amp;quot;&lt;br /&gt;
*	EPL_XF_DIRECTION - &amp;quot;I&amp;quot; - Import type&lt;br /&gt;
*	EPL_EXPORT_JOB_TYPES - &amp;quot;INV|CAL|RTN&amp;quot; - list of Order Types to be processed, pipe-delimited. Up to 5 allowed&lt;br /&gt;
*	EPL_FILENAME - Filename to match when picking up files. Expected to be &amp;quot;Manifest_*.xml&amp;quot;.&lt;br /&gt;
*	EPL_EMAIL_ERRORS - email address for file processing error notifications&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=600px heights=350px perrow=1&amp;gt;&lt;br /&gt;
File:FS_344273_Admin_XFConfig1.png|''New EBB Import Configuration''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A generic TTM Export configuration will be created (as ID &amp;quot;TTM&amp;quot;), as well as a specific TTM Export configuration for the first site (e.g. &amp;quot;03 CHARLTO&amp;quot;). The configuration of both will be identical apart from the Config ID.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=600px heights=350px perrow=1&amp;gt;&lt;br /&gt;
File:FS_344273_Admin_XFConfig2.png|''TTM Export Sample Configuration''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Interfaces for each site will be set as follows:&lt;br /&gt;
* For Site ID &amp;quot;03 CHARLTO&amp;quot;, set the XF Config ID to &amp;quot;03 CHARLTO&amp;quot;.&lt;br /&gt;
* For all other sites, set to &amp;quot;TTM&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is expected that there will need to be Job Group configurations for the different job types, as they will have different execution processes on the mobile devices.&lt;br /&gt;
&lt;br /&gt;
Job Groups will be created as follows for each site above:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Job Group	!!Description&lt;br /&gt;
|-&lt;br /&gt;
|COL    || Radial Collection&lt;br /&gt;
|-&lt;br /&gt;
|DEL    || Radial Delivery&lt;br /&gt;
|-&lt;br /&gt;
|DESK    || Desk Collections&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=600px heights=350px perrow=1&amp;gt;&lt;br /&gt;
File:FS_344273_Admin_JobGroups1.png|''Job Groups Maintenance''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The set-up of each job group will include the following:&lt;br /&gt;
* Radial Collection/Delivery&lt;br /&gt;
** Customer Signature&lt;br /&gt;
** Unmanned Location Signature enabled&lt;br /&gt;
** Deliver All functionality enabled&lt;br /&gt;
* Desk Collect&lt;br /&gt;
** Customer Signature&lt;br /&gt;
** Unmanned Location Signature will ''not'' be enabled&lt;br /&gt;
** Deliver All functionality enabled&lt;br /&gt;
&lt;br /&gt;
For all jobs groups, it is expected that the following will also be configured:&lt;br /&gt;
* No Job Photo&lt;br /&gt;
* EBB Paper POD format&lt;br /&gt;
* Terms and Conditions is expected to be set to:&lt;br /&gt;
** Please be sure to check every consignment before signing. All sales are subject to Conditions of Sale, a copy of which is at the back of the EBB Price List and on our website http://www.ebbpaper.co.uk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All of the UOMs required by the customer should be configured on the Admin Codes Maintenance screen for all sites. The values known at this time are as follows, with the Conversion settings required for each:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Conversion Type	!! Value	!! Code	!! UOMS&lt;br /&gt;
|-&lt;br /&gt;
|Multiply	|| 1000	||&amp;amp;nbsp;	|| 1000, ENVS, SETS, SHEETS, METRES SQUARED, LINEAR METRES&lt;br /&gt;
|-&lt;br /&gt;
|Round 	|| 1	||&amp;amp;nbsp;	|| 1, BOTTLE, BOX, EACH, MISC, ROLL&lt;br /&gt;
|-&lt;br /&gt;
|Exclude	||&amp;amp;nbsp;	||&amp;amp;nbsp;	|| CHARGE&lt;br /&gt;
|-&lt;br /&gt;
|Multiply 	|| 1000	|| KGS	|| TONNE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=600px heights=350px perrow=1&amp;gt;&lt;br /&gt;
File:FS_344273_Admin_Codes1.png|''Codes Maintenance''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- NEW PAGE --&amp;gt; &lt;br /&gt;
= Functional Description  =&lt;br /&gt;
== Database &amp;amp; Data Access Layer ==&lt;br /&gt;
The following fields will be added to the Job table EPOD_REASON_CODE:&lt;br /&gt;
*   EPL_CONV_TYPE - nvarchar(10)&lt;br /&gt;
*   EPL_CONV_VALUE - float&lt;br /&gt;
*   EPL_CONV_CODE - nvarchar(20)&lt;br /&gt;
&lt;br /&gt;
These fields will be added to all stored procedures in the database that require them.&lt;br /&gt;
&lt;br /&gt;
These fields are ''not'' required on the device.&lt;br /&gt;
&lt;br /&gt;
These fields are ''not'' required to be set on codes imported through the standard XML import (flat file or webservice). &lt;br /&gt;
&lt;br /&gt;
These fields are ''not'' required to be contained within the Export.&lt;br /&gt;
&lt;br /&gt;
These fields are ''not'' required to be used when filtering data for selection.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following fields will be added to the Job table EPOD_XF_CONFIG:&lt;br /&gt;
*   EPL_DB_CONNECTION - nvarchar(255)&lt;br /&gt;
&lt;br /&gt;
This field will be added to all stored procedures in the database that require it.&lt;br /&gt;
&lt;br /&gt;
This field is ''not'' required on the device.&lt;br /&gt;
&lt;br /&gt;
This field is ''not'' required to be used when filtering data for selection.&lt;br /&gt;
&lt;br /&gt;
{{Note}} All DAL objects that link to XF_CONFIG may also require change.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The EPOD_SETUP stored procedure will be modified for the new EPOD_LISTS and EPOD_LIST_ITEMS values.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Admin ==&lt;br /&gt;
=== Codes Maintenance Screen ===&lt;br /&gt;
The Codes Maintenance screen (reason_code.aspx) will be modified to support UOMs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=600px heights=350px perrow=1&amp;gt;&lt;br /&gt;
File:FS_344273_Admin_Codes1.png|''Codes Maintenance''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The '''Find''' criteria will be modified to allow selection of the new &amp;quot;UOM&amp;quot; type. Additionally, a blank &amp;quot;-- Select --&amp;quot; option will also be provided, for when the user wished to see all codes of all types. A new Code Type of &amp;quot;UOM&amp;quot; (description &amp;quot;UOMs&amp;quot;) will be added to the EPOD_LIST_ITEMS for Reason Codes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The results table does ''not'' require modifications.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The pop-up Entry/Edit form will be modified for entry of the new UOM codes.&lt;br /&gt;
&lt;br /&gt;
This is accessed when entering a new code using the '''New''' button, and when editing existing codes by clicking the '''Select''' button against a line in the results table.&lt;br /&gt;
&lt;br /&gt;
The user will be allowed to enter codes of type &amp;quot;UOM&amp;quot;, selected from the drop-down list.  A new Code Type of &amp;quot;UOM&amp;quot; will be added to the EPOD_LIST_ITEMS for Reason Codes.&lt;br /&gt;
&lt;br /&gt;
When editing or adding reason codes of type &amp;quot;UOM&amp;quot; ''only'', new fields will be present on the pop-up form, as shown below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Label	!!Field	!!Pop-up Help&lt;br /&gt;
|-&lt;br /&gt;
|Conversion Type	|| EPL_CONV_TYPE	||USED BY BESPOKE INTERFACES ONLY to determine whether the quantity is modified or the line processed when the UOM against the product line matches this value&lt;br /&gt;
|-&lt;br /&gt;
|Value	|| EPL_CONV_VALUE	||USED BY BESPOKE INTERFACES ONLY. If Conversion Type is &amp;quot;Multiply&amp;quot;, this value is used to multiply the product quantity. If Conversion Type is &amp;quot;Round&amp;quot;, this is used to round the quantity to the nearest value provided here.&lt;br /&gt;
|-&lt;br /&gt;
|XRef Code	|| EPL_CONV_CODE	||USED BY BESPOKE INTERFACES ONLY. If present, the UOM is converted to the value provided here.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These should be laid out as shown in the screenshot in the pop-up form.&lt;br /&gt;
&lt;br /&gt;
The Conversion Type will be added with the following drop-down list items, populated from the EPOD_LISTS and EPOD_LIST_ITEMS tables.&lt;br /&gt;
* &amp;quot;Multiply&amp;quot; - enter numeric value for multiplication.&lt;br /&gt;
* &amp;quot;Round&amp;quot; - enter value to round to (e.g. 1 means integer value, 0.25 is round to nearest 0.25, etc)&lt;br /&gt;
* &amp;quot;Exclude&amp;quot; - lines of this DU type are not added at all - Value field disabled.&lt;br /&gt;
* &amp;quot;As Received&amp;quot; - no calculation - Value field disabled.&lt;br /&gt;
&lt;br /&gt;
The default value for this list will be set by the default value in the EPOD_LIST_ITEMS table, as follows:&lt;br /&gt;
* Defaults to Type &amp;quot;Multiply&amp;quot; for EBB Paper &lt;br /&gt;
* Default to &amp;quot;As Received&amp;quot; for all other customers.&lt;br /&gt;
&lt;br /&gt;
The Value field will be enabled only if the following values are selected in the Conversion Type:&lt;br /&gt;
* Multiply&lt;br /&gt;
* Round&lt;br /&gt;
The Value field will be a numeric text field, allowing decimal entry, defaulting to &amp;quot;1000&amp;quot; if enabled. &lt;br /&gt;
&lt;br /&gt;
The XRef Code will be a drop-down list of all codes of the Code Type being edited/added by this screen, and will be populated on selection of the Code Type. This drop-down list will include a blank default value of &amp;quot;Blank&amp;quot;, and show the Code and Descriptions of all the selected codes. The list will be ordered by the Code, ascending.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When saving, the values will be saved in the appropriate fields on the EPOD_REASON_CODE table, as shown above.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Interface Config Screen ===&lt;br /&gt;
The Import/Export Maintenance screen (xf_config.aspx) will be modified to support configuration of the new EBB Paper interface.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=600px heights=350px perrow=1&amp;gt;&lt;br /&gt;
File:FS_344273_Admin_XFConfig1.png|''Import/Export Configuration Maintenance''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fields required to be displayed when configuring the &amp;quot;EBB&amp;quot; interface:&lt;br /&gt;
*	EPL_XF_CONFIG_ID - Always displayed.&lt;br /&gt;
*	EPL_DESCRIPTION - Always displayed.&lt;br /&gt;
*	EPL_XF_TYPE - Always displayed.&lt;br /&gt;
*	EPL_XF_DESTINATION - Always displayed.&lt;br /&gt;
*	EPL_XF_ID - Always displayed. This drop-down list will be modified to include ID &amp;quot;EBB&amp;quot;.&lt;br /&gt;
*	EPL_XF_DIRECTION - Always displayed.&lt;br /&gt;
*	EPL_WEB_USER - only if FTP or SOAP transfer types are selected.&lt;br /&gt;
*	EPL_WEB_PASSWORD - only if FTP or SOAP type selected&lt;br /&gt;
*	EPL_DB_CONNECTION - This new field will only display if type &amp;quot;EBB&amp;quot; is selected and will include validation that it must be entered. This will be labelled as &amp;quot;Database Connection&amp;quot;. The field will be a wide entry field (at least double the width of a standard field). &lt;br /&gt;
*	EPL_EXPORT_JOB_TYPES - Display if type is &amp;quot;EBB&amp;quot;. The validation on this field will be modified so that pipe-delimited list of anything can be entered, if the type is &amp;quot;EBB&amp;quot;.&lt;br /&gt;
*	EPL_FILENAME - Filename to match when picking up files. Expected to be &amp;quot;Manifest_*.xml&amp;quot;.&lt;br /&gt;
*	EPL_EMAIL_ERRORS - email address for file processing error notifications.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Auto-Import ==&lt;br /&gt;
=== General ===&lt;br /&gt;
The process will update and create all data as required, committing each as they are processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are instances where the failure reason will result in the following processing:&lt;br /&gt;
* Stop processing this file and all further files (Failed Import).&lt;br /&gt;
* Stop processing this file and process subsequent files (Failed File).&lt;br /&gt;
* Stop processing this order and move to the next order (Failed Order).&lt;br /&gt;
&lt;br /&gt;
Failed Import reasons:&lt;br /&gt;
* Unable to connect to MSA&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Failed File reasons:&lt;br /&gt;
* Standing Data not being created:&lt;br /&gt;
** User does not exist&lt;br /&gt;
** Vehicle does not exist&lt;br /&gt;
** Job Group does not exist&lt;br /&gt;
* Non-DESK manifest is on a load that has already been completed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Failed Order reasons:&lt;br /&gt;
* No details of this order in MSA&lt;br /&gt;
* Job for this order already complete&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reasons why a Manifest file will not create Loads and Jobs:&lt;br /&gt;
* Site does not exist&lt;br /&gt;
* Manifest is a trunk.&lt;br /&gt;
* Jobs are of the wrong type.&lt;br /&gt;
* There are no valid products on the job.&lt;br /&gt;
* There are no valid jobs on a Load.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If there are issues processing, the whole file will be rejected and will need to be reprocessed. However, all data saved to that point will be present.&lt;br /&gt;
&lt;br /&gt;
Audit records will be maintained, identifying successfully processed and failed import files, identifying the reason why a file failed to import. &lt;br /&gt;
&lt;br /&gt;
It is possible for a manifest to generate multiple audit reasons when processing a file. All of these codes will be audited. Multiple audit records may be maintained per file, or a single audit record created with all details in it. This will be decided when developed, based on which method is a more generic solution for the C-ePOD product.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rejected files will be emailed (depending on configuration) and will be stored in the standard Failed files location, as the processes do now.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Note}} The process generating the email will be modified to include the auditing of the file. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When a file is reprocessed, this will over-write and update the existing data, as specified in the processing below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The processing of each file will proceed as follows:&lt;br /&gt;
* Retrieve Manifest files.&lt;br /&gt;
* Filter and validate the manifest file.&lt;br /&gt;
* Create User and Vehicle data.&lt;br /&gt;
* Create a new Load or combine to an existing Load.&lt;br /&gt;
* Create or update jobs on the load, through a link to the MSA view.&lt;br /&gt;
* Create or update products on the jobs.&lt;br /&gt;
* Remove any products from the job not contained in the manifest file.&lt;br /&gt;
* Remove any jobs from the load not contained in the manifest file.&lt;br /&gt;
These areas are covered in the following sections&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=== Retrieve Manifest Files ===&lt;br /&gt;
For FILE transfer type, currently all files in the specified destination folder (EPL_XF_DESTINATION) are processed (using Directory.GetFiles). This will be modified so that, if a filename pattern is specified (in EPOD_XF_CONFIG.EPL_FILENAME), the process will only retrieve and process files matching this pattern (by passing a second parameter to the GetFiles method, specifying the pattern from EPOD_XF_CONFIG.EPL_FILENAME).&lt;br /&gt;
&lt;br /&gt;
For FTP transfer type, the same is true, in that all files are retrieved (using ListDirectory in method GetFileList). No facility exists to pattern-match file names. Therefore the method GetFileList will be modified so that, if a filename pattern is specified (to be passed to an overloaded method in a new parameter, passing EPOD_XF_CONFIG.EPL_FILENAME), the process will only add these to the result if the filename returned matches the pattern provided.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Regardless of whether the file was retrieved through FTP or from the filesystem, each file (representing a single manifest) will be passed to a new processing method to validate and process the contents and create jobs and products. The current process bases this on EPL_MSG_TYPE. This will be extended to check the EPL_XF_ID field - should this be &amp;quot;EBB&amp;quot;, the new processing method will be called.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A file failing to process will not stop subsequent files from processing. However, if the MSA view cannot be connected to, processing will stop (see section Create Jobs for details on the MSA View connection).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Validate the Manifest ===&lt;br /&gt;
This process will receive the manifest contents as an XML file. This file will be downloaded before processing to ensure that all characters that should have been URL encoded have been. The file will be pre-parsed to remove any non printable characters.&lt;br /&gt;
&lt;br /&gt;
The '''depot''' tag will be extracted from the '''manifest/header''' tag contents. The site will be retrieved using the EPL_EXT_FLEET field. If a site is not found with a fleet matching the '''depot''' tag, the manifest will not be processed. {{Note}} This is not an error and will not be audited as such - the manifest will be marked as successfully processed.&lt;br /&gt;
&lt;br /&gt;
The site retrieved will be stored by the process in an EPOD_SITE DAL object.&lt;br /&gt;
&lt;br /&gt;
The '''trailer''' tag will be extracted from '''manifest/header''' tag contents. If this tag starts with the text &amp;quot;TRUNK&amp;quot;, then this manifest will not be processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create Vehicles and Users ===&lt;br /&gt;
The '''driver''' tag will be extracted from the '''manifest/header''' tag contents. &lt;br /&gt;
&lt;br /&gt;
If this driver is set to &amp;quot;WAREHOUSE&amp;quot;, the user ID will be created as this value.&lt;br /&gt;
&lt;br /&gt;
If this is a non-zero value that is not explicitly &amp;quot;WAREHOUSE&amp;quot;, C-ePOD will attempt to create the driver ID (if configured to do so) as the first character of the first name, and up to the first 4 characters of the surname, with a 3-digit unique identifier added to them. The case will be converted to uppercase.&lt;br /&gt;
 &lt;br /&gt;
For example:&lt;br /&gt;
*         &amp;quot;David Eastman&amp;quot; will become &amp;quot;DEAST001&amp;quot;&lt;br /&gt;
*         &amp;quot;SMITH JOHN&amp;quot; will become &amp;quot;SJOHN001&amp;quot;&lt;br /&gt;
*         &amp;quot;DEREK MAY&amp;quot; will become &amp;quot;DMAY001&amp;quot;&lt;br /&gt;
*         &amp;quot;TRUNKER M25&amp;quot;. TRUNKER M25 will become &amp;quot;TM25001&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The process will attempt to find this user using the Site ID and the generated User ID above. If a record is found, the process will compare the user name in the XML file to the user name on the database. If different, the 3-digit id will be incremented by 1 and the process repeated until a matching EPOD_USER record is found, or one is not found for this ID.&lt;br /&gt;
&lt;br /&gt;
Check the EPOD_SITE.EPL_IMPORT_CREATE_SD_FLAG. If this is set to &amp;quot;N&amp;quot; and an EPOD_USER record is not found, the file should be rejected. An audit record of &amp;quot;User X Not Found&amp;quot; shall be created.&lt;br /&gt;
&lt;br /&gt;
If one is not found and EPOD_SITE.EPL_IMPORT_CREATE_SD_FLAG is &amp;quot;Y&amp;quot;, the EPOD_USER record will be created and updated as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Field	!!Populated by&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SITE_ID || EPOD_SITE.EPL_SITE_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_USER_ID || either &amp;quot;WAREHOUSE&amp;quot;, or as generated above&lt;br /&gt;
|-&lt;br /&gt;
|EPL_USER_PASSWORD || set to the same value as the user ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_USER_NAME || '''driver'''&lt;br /&gt;
|-&lt;br /&gt;
|EPL_USER_ADMIN || &amp;quot;N&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_USER_ACTIVE || &amp;quot;Y&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_USER_ACTIVITY_DATE || 0&lt;br /&gt;
|-&lt;br /&gt;
|EPL_USER_ACTIVITY_TIME || 0&lt;br /&gt;
|-&lt;br /&gt;
|EPL_PASSWORD_VISIBLE_IND || 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The '''vehiclereg''' tag will be extracted from the '''manifest/header''' tag contents. If this is a non-zero value, C-ePOD will attempt to create the driver ID (if configured to do so).&lt;br /&gt;
&lt;br /&gt;
The process will attempt to find this vehicle using the Site ID and the Vehicle ID as the Vehicle Reg above. If a record is found, this will be stored by the process as EPOD_VEHICLE.&lt;br /&gt;
&lt;br /&gt;
Check the EPOD_SITE.EPL_IMPORT_CREATE_SD_FLAG. If this is set to &amp;quot;N&amp;quot; and an EPOD_VEHICLE record is not found, the file should be rejected. An audit record of &amp;quot;Vehicle X Not Found&amp;quot; shall be created.&lt;br /&gt;
&lt;br /&gt;
If one is not found and EPOD_SITE.EPL_IMPORT_CREATE_SD_FLAG is &amp;quot;Y&amp;quot;, the EPOD_VEHICLE record will be created and updated as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Field	!!Populated by&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SITE_ID || EPOD_SITE.EPL_SITE_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_VEHICLE_ID || '''vehiclereg'''&lt;br /&gt;
|-&lt;br /&gt;
|EPL_VEHICLE_REG || '''vehiclereg'''&lt;br /&gt;
|-&lt;br /&gt;
|EPL_DESCRIPTION || '''vehiclereg'''&lt;br /&gt;
|-&lt;br /&gt;
|EPL_STATUS || &amp;quot;Y&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note}} Data created on these tables will be truncated. Comparisons to this data as described above with be truncated before comparison, in case the data is space-filled in the XML file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create a Load ===&lt;br /&gt;
A load will be attempted to be found using the following data, providing that at least a vehicle or user has been provided:&lt;br /&gt;
* EPL_SITE_ID - EPOD_SITE.EPL_SITE_ID&lt;br /&gt;
* EPL_LOAD_START_PLANNED_DATE - '''deliverydate''' tag. Note that this value must be reformatted to YYYYMMDD format from DD-MM-YYYY format.&lt;br /&gt;
* EPL_VEHICLE_ID - EPOD_VEHICLE.EPL_VEHICLE_ID if one is present, otherwise this is not set as an parameter for the selection.&lt;br /&gt;
* EPL_USER_ID - EPOD_USER.EPOD_USER_ID if one is present, otherwise this is not set as an parameter for the selection.&lt;br /&gt;
* EPL_STATUS - Not equal to &amp;quot;C&amp;quot; &amp;quot;X&amp;quot; if the '''driver''' attribute is not explicitly set to &amp;quot;WAREHOUSE&amp;quot;, otherwise this is not set as an parameter for the selection.&lt;br /&gt;
&lt;br /&gt;
If one is not found, a new load will be created on EPOD_LOAD as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Field	!!Populated by&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SITE_ID ||EPOD_SITE.EPL_SITE_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_LOAD_ID || generated by the EPOD system.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_LOAD_START_PLANNED_DATE || extracted from the '''deliverydate''' tag. Note that this value must be reformatted to YYYYMMDD format from DD-MM-YYYY format.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_LOAD_START_PLANNED_TIME || extracted from the '''starttime''' tag. Note that this value must be reformatted (removing the embedded colon character and adding &amp;quot;0000&amp;quot; to the end. Note that if this tag is not present or blank, this field should be set to 6000000.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_LOAD_END_PLANNED_DATE || as the Load Start Planned Date.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_LOAD_END_PLANNED_TIME || 0&lt;br /&gt;
|-&lt;br /&gt;
|EPL_VEHICLE_ID || EPOD_VEHICLE.EPL_VEHICLE_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_USER_ID || EPOD_VEHICLE.EPL_USER_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_STATUS || &amp;quot;P&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_LOAD_INFORMATION || the ''number'' attribute of the '''manifest''' tag concatenated with the '''addinstruct''' tag, delimited by a dash.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If a load is found and the manifest is ''not'' for desk collection (i.e. where the '''driver''' tag value is not explicitly &amp;quot;WAREHOUSE&amp;quot;), the status (EPL_STATUS) should be checked. If this value is not &amp;quot;P&amp;quot; then the file should be rejected. An audit record of &amp;quot;Load X at wrong status&amp;quot; shall be created.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If a load is found, the Load Information field EPL_LOAD_INFORMATION should be checked that it contains the text built from:&lt;br /&gt;
* the ''number'' attribute of the '''manifest''' tag concatenated with the '''addinstruct''' tag, delimited by a dash.&lt;br /&gt;
If it does not contain this, this should be added to the text already in the field, delimited by a newline character.&lt;br /&gt;
&lt;br /&gt;
The load (found or created) should be stored in an EPOD_LOAD object and updated.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create Jobs ===&lt;br /&gt;
The process will find and store the highest sequence of any jobs already attached to the EPOD_LOAD object, by checking the content of the EPOD_JOBS list on the EPOD_LOAD object. &lt;br /&gt;
&lt;br /&gt;
The process will extract the list of allowed order prefixes from the EPOD_XF_CONFIG.EPL_EXPORT_JOB_TYPES field. {{Note}} If this parameter is empty, all orders will be processed.&lt;br /&gt;
&lt;br /&gt;
The process will loop through all instances of the '''order''' tag in the ''manifest/data'' tag. Note that this is separated by a '''customer''' tag.&lt;br /&gt;
&lt;br /&gt;
Each '''order''' tag will be processed to create EPOD_JOB records, which will be added to the EPOD_LOAD.EPOD_JOBS list.&lt;br /&gt;
&lt;br /&gt;
The ''sopnumber'' attribute of the '''order''' tag will be extracted. if the attribute does not exist or has no value, this tag may be skipped. &lt;br /&gt;
&lt;br /&gt;
The trimmed attribute value will be checked to see whether the value begins with any of the allowed order prefixes. If it does not, then then the order will not be processed. &lt;br /&gt;
&lt;br /&gt;
A connection will be made to the MSA database for the order details. This will be achieved by opening a connection using the connection information stored in EPOD_XF_CONFIG.EPL_DB_CONNECTION. The connection should be attempted several times (for example, 3 times). If a connection cannot be made, then the file should be rejected. An audit record of &amp;quot;Order X: Cannot connect to MSA&amp;quot; shall be created. {{Note}} As this is a fundamental requirement of the process, should this fail, processing of this file ''and all others'' should be terminated for this run.&lt;br /&gt;
&lt;br /&gt;
The connection details will be specified in a connection string in EPOD_XF_CONFIG.EPL_DB_CONNECTION.&lt;br /&gt;
&lt;br /&gt;
{{Note}} At this time, the following information has not yet been confirmed. &lt;br /&gt;
* Connection details (IP, user, password, port)&lt;br /&gt;
* Database type&lt;br /&gt;
* View name&lt;br /&gt;
&lt;br /&gt;
{{Note}} This MSA view is used from this point onwards for all details. Should the connection fail when attempting to retrieve subsequent records from the MSA view, the connection should be attempted to be re-established, again retrying several times, to ensure that this process is predominantly uninterrupted. &lt;br /&gt;
&lt;br /&gt;
In the instance where the connection fails, the file need not be rejected and moved to the Failure area - it can be left to be reprocessed immediately on the next run.&lt;br /&gt;
&lt;br /&gt;
When the connection is established, the details of the order will be retrieved from the MSA view using a standard SQL query, querying on the SOP Number.&lt;br /&gt;
&lt;br /&gt;
Should the view return no details, then the order will not be processed. An audit record of &amp;quot;Order X: No details in MSA&amp;quot; shall be created. The process will continue with the next order in the XML file.&lt;br /&gt;
&lt;br /&gt;
The Load will be checked to see whether the order already exists - the process will look for the order in EPOD_LOAD.EPOD_JOBS, where the job code (EPL_JOB_CODE_ is equal to the trimmed value of the '''sopnumber''' tag. If an order is found, an EPOD_JOB object will be created and set to the value of the job in the EPOD_LOAD.EPOD_JOBS EPOD_JOB object by reference.&lt;br /&gt;
&lt;br /&gt;
If the job found is already complete (EPL_STATUS = &amp;quot;C&amp;quot;), then the process will skip updating this order. An audit record of &amp;quot;Order X: already complete&amp;quot; shall be created. The process will continue with the next order in the XML file.&lt;br /&gt;
&lt;br /&gt;
If a job is not found, a new job will be created using the key values:&lt;br /&gt;
*	EPL_SITE_ID - EPOD_LOAD.EPL_SITE_ID.&lt;br /&gt;
*	EPL_LOAD_ID - EPOD_LOAD.EPL_LOAD_ID.&lt;br /&gt;
*	EPL_JOB_TYPE - If the left 3 characters of the '''sopnumber''' tag are &amp;quot;RTN&amp;quot;, set this value to &amp;quot;C&amp;quot;, otherwise set this value to &amp;quot;D&amp;quot;.&lt;br /&gt;
*	EPL_JOB_CODE - the trimmed value of the '''sopnumber''' tag.&lt;br /&gt;
A value in EPL_JOB_ID will be generated for this job at this stage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Job Group should be calculated as follows:&lt;br /&gt;
* If the EPL_JOB_TYPE is &amp;quot;C&amp;quot;, set to &amp;quot;COL&amp;quot;&lt;br /&gt;
* else if EPOD_LOAD.EPL_USER_ID = &amp;quot;WAREHOUSE&amp;quot;, set to &amp;quot;DESK&amp;quot;&lt;br /&gt;
* else set to &amp;quot;DEL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The process will attempt to find this Job Group using:&lt;br /&gt;
*	EPL_SITE_ID - EPOD_LOAD.EPL_SITE_ID.&lt;br /&gt;
*	EPL_JOB_GROUP - as set above.&lt;br /&gt;
If a record is found, this will be stored by the process as an EPOD_JOB_GROUPS DAL object.&lt;br /&gt;
&lt;br /&gt;
Check the EPOD_SITE.EPL_IMPORT_CREATE_SD_FLAG. If this is set to &amp;quot;N&amp;quot; and an EPOD_JOB_GROUPS record is not found, the file should be rejected. An audit record of &amp;quot;Job Group X Not Found&amp;quot; shall be created.&lt;br /&gt;
&lt;br /&gt;
If one is not found and EPOD_SITE.EPL_IMPORT_CREATE_SD_FLAG is &amp;quot;Y&amp;quot;, the EPOD_JOB_GROUPS record will be created as follows:&lt;br /&gt;
*	EPL_SITE_ID - EPOD_SITE.EPL_SITE_ID&lt;br /&gt;
*	EPL_JOB_GROUP - as set above.&lt;br /&gt;
*	EPL_DESCRIPTION:&lt;br /&gt;
** If EPL_JOB_GROUP is &amp;quot;COL&amp;quot;, set to &amp;quot;Collections&amp;quot;.&lt;br /&gt;
** If EPL_JOB_GROUP is &amp;quot;DEL&amp;quot;, set to &amp;quot;Deliveries&amp;quot;.&lt;br /&gt;
** If EPL_JOB_GROUP is &amp;quot;DESK&amp;quot;, set to &amp;quot;Desk Collections&amp;quot;.&lt;br /&gt;
All flags will be set as their default values.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The customer code, invoice address and contact information will be retrieved from the MSA view. The customer code will be checked as to whether it is already created in the system, by checking for an EPOD_CUSTOMER record using the keys:&lt;br /&gt;
*	EPL_SITE_ID - EPOD_SITE.EPL_SITE_ID&lt;br /&gt;
*	EPL_CUSTOMER_CODE - column CUSTNMBR from the MSA view.&lt;br /&gt;
&lt;br /&gt;
If this record does not exist, or a record does exist but the details are different, the record will be updated as follows:&lt;br /&gt;
If one is not found, a new customer will be created on EPOD_CUSTOMER as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Field	!!Populated by&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SITE_ID || EPOD_SITE.EPL_SITE_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_CUSTOMER_CODE || CUSTNMBR&lt;br /&gt;
|-&lt;br /&gt;
|EPL_CUSTOMER_NAME || CUSTNAME&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_1 || InvAdd1&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_2 || InvAdd2&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_3 || InvAdd3&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_4 || InvCity&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_5 || InvState&lt;br /&gt;
|-&lt;br /&gt;
|EPL_POSTCODE || InvZip (Spaces removed and truncated to 8 characters)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Note}} All values above are leading/trailing space trimmed unless otherwise stated.&lt;br /&gt;
&lt;br /&gt;
The delivery address and contact information will then be compared to this Invoice address, comparing the following items:&lt;br /&gt;
*	EPL_CUSTOMER_NAME - DelName&lt;br /&gt;
*	EPL_ADDRESS_1 - DelAdd1&lt;br /&gt;
*	EPL_ADDRESS_2 - DelAdd2&lt;br /&gt;
*	EPL_ADDRESS_3 - DelAdd3&lt;br /&gt;
*	EPL_ADDRESS_4 - DelCity&lt;br /&gt;
*	EPL_ADDRESS_5 - DelState&lt;br /&gt;
*	EPL_POSTCODE - DelZip &lt;br /&gt;
&lt;br /&gt;
If any of the values are different, a Job Address will be created through an EPOD_JOB_ADDRESS DAL object, populated as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Field	!!Populated by&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SITE_ID || EPOD_SITE.EPL_SITE_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_JOB_ID || EPOD_JOB.EPL_JOB_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_JOB_TYPE || EPOD_JOB.EPL_JOB_TYPE&lt;br /&gt;
|-&lt;br /&gt;
|EPL_NAME || DelName&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_1 || DelAdd1&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_2 || DelAdd2&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_3 || DelAdd3&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_4 || DelCity&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ADDRESS_5 || DelState&lt;br /&gt;
|-&lt;br /&gt;
|EPL_POSTCODE || DelZip (Spaces removed and truncated to 8 characters)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note}} All values above are leading/trailing space trimmed unless otherwise stated.&lt;br /&gt;
&lt;br /&gt;
If this is not the first job being processed for the load, the process will check whether the job being created is not the first job being created for the customer code in this manifest. If this is not a subsequent job for this customer code, blank any stored values for the following fields:&lt;br /&gt;
* EPL_SEQUENCE&lt;br /&gt;
* EPL_LINKED_ID&lt;br /&gt;
&lt;br /&gt;
If this is not a subsequent job for this customer code, the process will then loop through existing jobs in EPOD_LOAD.EPOD_JOBS in reverse sequence, looking for any job that matches as follows:&lt;br /&gt;
* EPL_CUSTOMER_CODE is the same&lt;br /&gt;
* EPL_STATUS not &amp;quot;C&amp;quot; or &amp;quot;X&amp;quot;&lt;br /&gt;
* EPL_JOB_TYPE is the same as the job being created.&lt;br /&gt;
* The delivery address is the same as the job being created.&lt;br /&gt;
&lt;br /&gt;
If a match is found, check the value of the field EPL_LINKED_ID. If there is no value, set this to the value in the record's EPL_SEQUENCE field and update the object. The process will then store the values in the following fields:&lt;br /&gt;
* EPL_SEQUENCE - EPL_SEQUENCE of the job found&lt;br /&gt;
* EPL_LINKED_ID - EPL_LINKED_ID of the job found&lt;br /&gt;
&lt;br /&gt;
The EPOD_JOB object will then be updated with the values as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Field	!!Populated by&lt;br /&gt;
|-&lt;br /&gt;
|EPL_JOB_GROUP	|| The calculated Job Group above&lt;br /&gt;
|-&lt;br /&gt;
|EPL_JOB_INSTRUCTION	|| Manifest No (manfest), Order comments (OrdComm) and Delivery Instructions (DelIns) concatenated together with a space separator.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_STATUS	|| &amp;quot;P&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_CUSTOMER_CODE	|| The customer code (CUSTNMBR).&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SEQUENCE	|| Stored value of EPL_SEQUENCE if there is one, or the maximum value of sequences of jobs on this load, plus 1.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_START_PLANNED_DATE	|| ReqShipDate&lt;br /&gt;
|-&lt;br /&gt;
|EPL_START_PLANNED_TIME	|| StartTime if populated, else 06000000 (06:00)&lt;br /&gt;
|-&lt;br /&gt;
|EPL_END_PLANNED_DATE	|| ReqShipDate&lt;br /&gt;
|-&lt;br /&gt;
|EPL_END_PLANNED_TIME	|| DelTime if populated, else FinishTime if populated, else 14000000 (14:00).&lt;br /&gt;
|-&lt;br /&gt;
|EPL_JOB_CODE	|| the trimmed value of the '''sopnumber''' tag.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_CUST_REF	|| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_OFFICE_INSTRUCTION	|| tcsFLST_Route&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SO_NUMBER	|| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ORDER_DATE	|| CREATDDT&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SALES_CONTACT	|| UserID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_OWNER_NAME	|| The sales territory (SALSTERR)&lt;br /&gt;
|-&lt;br /&gt;
|EPL_EXT_REF	|| The manifest (extracted from the ''number'' attribute of the '''manifest''' tag)&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ACCOUNT	|| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_LINKED_ID	|| Stored value of EPL_LINKED_ID if there is one.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_TIMEZONE	|| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_LOAD_LOCATION	|| Originating Depot&lt;br /&gt;
|-&lt;br /&gt;
|EPL_TTM_STOP_NUMBER	|| Set to the value in EPL_SEQUENCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note}} that if updating a job at EPL_STATUS of &amp;quot;X&amp;quot;, any existing products/containers associated with this job will also be reset to pending status.&lt;br /&gt;
&lt;br /&gt;
The process will then store the following:&lt;br /&gt;
* EPL_CUSTOMER_CODE - the Customer code last processed in this manifest file.&lt;br /&gt;
* EPL_SEQUENCE - EPL_SEQUENCE of the job created&lt;br /&gt;
* EPL_LINKED_ID - EPL_LINKED_ID of the job created&lt;br /&gt;
&lt;br /&gt;
The job will be updated and saved at this point.&lt;br /&gt;
&lt;br /&gt;
The Job ID of the job created will be added to a comma-delimited string of jobs processed for this manifest.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create Products ===&lt;br /&gt;
The process will loop through each record from MSA view, in order to create the product lines. {{Note}} All lines in the MSA view detail product information, including the first line.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The value in UOFM field of the MSA view will be looked up against the EPOD_REASON_CODE table matching the following parameters:&lt;br /&gt;
* EPL_SITE_ID - EPOD_JOB.EPL_SITE_ID&lt;br /&gt;
* EPL_REASON_CODE - UOFM&lt;br /&gt;
&lt;br /&gt;
If a record is not found, create an EPOD_PRODUCT DAL object with values set as follows:&lt;br /&gt;
* EPL_SITE_ID - EPOD_JOB.EPL_SITE_ID&lt;br /&gt;
* EPL_REASON_CODE - UOFM&lt;br /&gt;
* EPL_DESCRIPTION - UOFM&lt;br /&gt;
* EPL_CONV_TYPE - &amp;quot;MULTIPLY&amp;quot;&lt;br /&gt;
* EPL_CONV_VALUE - 1000&lt;br /&gt;
* EPL_CONV_CODE - &amp;quot;&amp;quot;&lt;br /&gt;
Update this UOM code.&lt;br /&gt;
&lt;br /&gt;
If the value of EPOD_PRODUCT.EPL_CONV_TYPE is &amp;quot;EXCLUDE&amp;quot;, this product will not be added - the process will move to the next record in the MSA view.&lt;br /&gt;
&lt;br /&gt;
If the value of EPOD_PRODUCT.EPL_CONV_TYPE is &amp;quot;MULTIPLY&amp;quot;, multiply the value in the QUANTITY field of the MSA view by the value stored in EPL_CONV_VALUE and store as the quantity.&lt;br /&gt;
&lt;br /&gt;
If the value of EPOD_PRODUCT.EPL_CONV_TYPE is &amp;quot;ROUND&amp;quot;, round the value in the QUANTITY field of the MSA view by the value stored in EPL_CONV_VALUE and store as the quantity.&lt;br /&gt;
&lt;br /&gt;
If the value of EPOD_PRODUCT.EPL_CONV_TYPE is &amp;quot;DEFAULT&amp;quot;, store the value in the QUANTITY field of the MSA view as the quantity.&lt;br /&gt;
&lt;br /&gt;
If the value of EPOD_PRODUCT.EPL_CONV_CODE has a valid value, store the EPL_CONV_CODE as the UOM.&lt;br /&gt;
&lt;br /&gt;
If the value of EPOD_PRODUCT.EPL_CONV_CODE is blank or null, store the UOFM field from the MSA view as the UOM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The process will check to see if a product already exists on the job by checking the EPOD_JOB.EPOD_PRODUCTS list for an object with the following values:&lt;br /&gt;
* EPL_SITE_ID - EPOD_JOB.EPL_SITE_ID&lt;br /&gt;
* EPL_JOB_ID - EPOD_JOB.EPL_JOB_ID&lt;br /&gt;
* EPL_CONTAINER_ID - &amp;quot;000000000000000&amp;quot; (15 zeroes in a string, denoting a loose product)&lt;br /&gt;
* EPL_PRODUCT_CODE - ITEMNMBR &lt;br /&gt;
* EPL_SEQUENCE - linenumber/16384 (first 4 characters of this if not a whole number)&lt;br /&gt;
&lt;br /&gt;
Note that ITEMNMBR and ITEMDESC may contain control characters not compatible with the EPOD device software. These should be stripped out before saving into the EPOD database.&lt;br /&gt;
&lt;br /&gt;
If one is not found, an EPOD_PRODUCT object will be created and added to the EPOD_JOB.EPOD_PRODUCTS list.&lt;br /&gt;
&lt;br /&gt;
If one is found or created above, an EPOD_PRODUCT object will be pointed to this object by reference.&lt;br /&gt;
&lt;br /&gt;
The EPOD_PRODUCT object (found or created) will have the fields updated as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;silver&amp;quot;&lt;br /&gt;
!Field	!!Populated by&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SITE_ID || EPOD_JOB.EPL_SITE_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_JOB_ID || EPOD_JOB.EPL_JOB_ID&lt;br /&gt;
|-&lt;br /&gt;
|EPL_CONTAINER_ID || &amp;quot;000000000000000&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_PRODUCT_CODE || ITEMNMBR&lt;br /&gt;
|-&lt;br /&gt;
|EPL_SEQUENCE || linenumber/16384 (first 4 characters of this if not a whole number)&lt;br /&gt;
|-&lt;br /&gt;
|EPL_DESCRIPTION || ITEMDESC, truncated to 40 characters&lt;br /&gt;
|-&lt;br /&gt;
|EPL_PRODUCT_QTY_PLANNED || The quantity calculated and stored above&lt;br /&gt;
|-&lt;br /&gt;
|EPL_PRODUCT_QTY_CASE || SellPack if populated and numeric, else 0.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_STATUS || &amp;quot;P&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|EPL_PRODUCT_WEIGHT || ITEMSHWT&lt;br /&gt;
|-&lt;br /&gt;
|EPL_CUST_REF || CustordNo&lt;br /&gt;
|-&lt;br /&gt;
|EPL_ITEM_TYPE ||&lt;br /&gt;
|-&lt;br /&gt;
|EPL_UNIT_TYPE || The UOM stored above.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_DESCRIPTION_LONG || ITEMDESC and ebbFLTX_Sales_Comments concatenated with CR/LF characters.&lt;br /&gt;
|-&lt;br /&gt;
|EPL_PRODUCT_QTY_ORDERED || Set to the same value as EPL_PRODUCT_QTY_PLANNED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The product record on EPOD_PRODUCT will then be updated.&lt;br /&gt;
&lt;br /&gt;
The Product Code of the product created will be added to a comma-delimited string of products processed for this job.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Remove Products not on the Job ===&lt;br /&gt;
All subsequent records on the MSA view will be processed in this manner and stored on the job.&lt;br /&gt;
&lt;br /&gt;
When all products are processed, the process will check through all products on the job and compare to the list of products processed on this manifest for this job. Any products on the job but not in the manifest will be deleted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If, after this, there are no products on the job, the job will be deleted. An audit record of &amp;quot;No Products on Order X - order deleted&amp;quot; shall be created.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Remove Jobs not on the Load for that Manifest ===&lt;br /&gt;
All subsequent order tags in the Manifest will be processed in this manner and stored on the load.&lt;br /&gt;
&lt;br /&gt;
When all orders on the manifest are processed, the process will check through all jobs on the load (with that Manifest number, as stored in EPL_EXT_REF) and compare to the list of jobs processed on this manifest. Any jobs for this manifest on the load but not in the manifest will be deleted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If, after this, there are no jobs on the load, the load will be deleted. An audit record of &amp;quot;No Jobs on Load X - load deleted&amp;quot; shall be created.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- MEDIA LANDSCAPE YES --&amp;gt; &lt;br /&gt;
= Appendix A: TEST PLAN  =&lt;br /&gt;
{{TestPlan_Header&lt;br /&gt;
|Title={{#var:Doc_Title}}&lt;br /&gt;
|Log={{#var:Reference}}&lt;br /&gt;
|Description=Testing the new EBB paper interface can be configured and works as expected.&lt;br /&gt;
|MenuAccess=N/A&lt;br /&gt;
|Prerequisites=A system configured as EBB Paper.&lt;br /&gt;
|Objective=To test that: UOMs may be entered with conversion types; the EBB Paper interface may be configured and; the EBB paper interface works as expected.&lt;br /&gt;
}} {{ #vardefine: Cycle | 0 }}{{ #vardefine: SubCycle | 0 }}&lt;br /&gt;
{{TestPlan_CycleHeader&lt;br /&gt;
|Cycle={{ #vardefineecho: Cycle | {{ #expr: {{ #var: Cycle }} + 1 }} }}{{ #vardefine: SubCycle | {{ #var: Cycle }} }}&lt;br /&gt;
|Title=Admin&lt;br /&gt;
|Notes=&amp;amp;nbsp;&lt;br /&gt;
}} &amp;lt;!--INSERT TESTS HERE --&amp;gt; {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a new Interface type as expected for EBB Paper.&lt;br /&gt;
|Result=The new EBB Paper interface can be configured and edited as expected.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a new reason code. Select type &amp;quot;UOM&amp;quot;.&lt;br /&gt;
|Result=Type UOM can be selected from the drop-down list. The Conversion fields are displayed and defaulted as expected.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Select Conversion Type &amp;quot;Round&amp;quot; and &amp;quot;Multiply&amp;quot;.&lt;br /&gt;
|Result=A Value may be entered.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Save the code. Enter another code. Select other Conversion Types.&lt;br /&gt;
|Result=A Value may not be entered.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Save the code. Enter another code with an Xref code and conversion type &amp;quot;As Received&amp;quot;.&lt;br /&gt;
|Result=The XRef code is entered and saved.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Find all UOM codes. &lt;br /&gt;
|Result=UOM can be selected as a filter element. All UOM codes are displayed. &lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Edit UOM codes.&lt;br /&gt;
|Result=The codes are displayed as they were entered. The Conversion fields are displayed as expected.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_CycleFooter}} &lt;br /&gt;
{{TestPlan_CycleHeader&lt;br /&gt;
|Cycle={{ #vardefineecho: Cycle | {{ #expr: {{ #var: Cycle }} + 1 }} }}{{ #vardefine: SubCycle | {{ #var: Cycle }} }}&lt;br /&gt;
|Title=Interface&lt;br /&gt;
|Notes=Set up the site to NOT create standing data. Configure the interface for FTP file transfer. Configure the MSA connection to be incorrect.&lt;br /&gt;
}} &amp;lt;!--INSERT TESTS HERE --&amp;gt; {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create valid manifest files in the configured FTP area, one named &amp;quot;Manifest_test1.xml&amp;quot; and one named &amp;quot;incorrect.xml&amp;quot;. Both should have a user that does not match an existing vehicle. Run the import process.&lt;br /&gt;
|Result=Only the manifest matching the filename is processed. This is rejected for an invalid user. The file is placed in a Failed directory.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Change the interface configuration to FILE transfer type. Create valid manifest files in the configured FILE area, one named &amp;quot;Manifest_test2.xml&amp;quot; and one named &amp;quot;incorrect.xml&amp;quot;. Both should have a vehicle that does not match an existing vehicle, but with a valid user. Run the import process.&lt;br /&gt;
|Result=Only the manifest matching the filename is processed. This is rejected for an invalid vehicle. The file is placed in a Failed directory.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Process a manifest (any transfer method) with a valid user and vehicle, with job groups not created.&lt;br /&gt;
|Result=The file is rejected for invalid job group. The file is placed in a Failed directory.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Configure the system to create standing data. Create two valid (but different) manifests, with a user and vehicle that does not match any existing data. Ensure there is a valid job with at least one valid product.&lt;br /&gt;
|Result=The first file is processed and rejected due to being unable to connect to MSA. The second file is not processed at all.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Configure the interface with the correct MSA view connection details. Process the manifests above again.&lt;br /&gt;
|Result=The files are processed without errors. The Vehicle is created. The Users is created. The Job Group is created. The Customer is created. The Load is created. The Job is created. The products are created. The file is audited as processed successfully. The file is placed in a Success directory.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a manifest almost identical to the last manifest, but with different Load start time, Job Start time, product quantities. Ensure the invoice address is changed. Ensure that there are comments on the Manifest. Process the manifest.&lt;br /&gt;
|Result=The load, job and products are updated. The manifest comments are appended to the Load Instructions. The invoice (customer) address is updated.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a manifest for the same date, vehicle and user, with orders with one valid sopnumber, and all others as invalid SOP numbers. Ensure the valid order is not for the same customer as the prior manifest. Process the manifest.&lt;br /&gt;
|Result=A job is created on the load for the one valid order. All others are not processed. The job is sequenced after all others&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a manifest for the same date, vehicle and user, with an order with a valid INV sopnumber. Ensure the order is for the same customer as the first manifest. Process the manifest.&lt;br /&gt;
|Result=A job is created on the load for the order. The job is sequenced and linked to the matching job from the first manifest.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a manifest for the same date, vehicle and user, with orders with a valid sopnumber with the same customer code as the last manifest. Ensure two are RTN jobs and two are INV jobs. Process the manifest.&lt;br /&gt;
|Result=Jobs are created on the load for the orders. The jobs are correctly identified as Collection and Delivery jobs, with the correct Job Group. The jobs are sequenced after any existing jobs on the load. The RTN jobs will have the same sequence and linked ID. The INV jobs will have the same sequence and linked ID as the existing INV job on the load for this customer.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a manifest for the same date, vehicle and user, with orders with a valid sopnumber with the same customer code as the last manifest. Ensure two are RTN jobs and two are INV jobs. Ensure the delivery address is different to the invoice address. Process the manifest.&lt;br /&gt;
|Result=Jobs are created on the load for the orders. The jobs are correctly identified as Collection and Delivery jobs, with the correct Job Group. The jobs are sequenced after any existing jobs on the load. The RTN jobs will have the same sequence and linked ID. The INV jobs will have the same sequence and linked ID. No jobs will be linked to existing jobs on the manifest. The Job Address is created for these loads.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a manifest for a different date, vehicle and user, with orders with valid sopnumbers, for many customers. Ensure that they have a mix of UOMs configured with Round, Multiply, As Received, Exclude and Xref Code conversions, as well as a product without a configured UOM.&lt;br /&gt;
|Result=The jobs and products are created as expected. The Exclude product is not created. The quantities are set as per the conversion type rules. The unknown UOM is created with default values.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Complete or cancel the load created. Process the same manifest file.&lt;br /&gt;
|Result=The manifest is rejected for invalid load status.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Process a DESK COLLECT manifest with a user of &amp;quot;WAREHOUSE&amp;quot;&lt;br /&gt;
|Result=A load is created. The user is created.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Complete or cancel the load created. Process another DESK COLLECT manifest file.&lt;br /&gt;
|Result=A new load is created. &lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Process a manifest with a job with no valid products.&lt;br /&gt;
|Result=The file is processed successfully. Audit history is recorded as the job having no products, and the load having no jobs.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}}{{TestPlan_CycleFooter}} &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- MEDIA LANDSCAPE NO --&amp;gt; &lt;br /&gt;
{{Doc_Appendix&lt;br /&gt;
|Appendix=B&lt;br /&gt;
|Estimate=Y&lt;br /&gt;
|Glossary=EPOD&lt;br /&gt;
|Ref1=[[REQ 343463 EBB Paper Solution Design]]&lt;br /&gt;
|RefV1=2.0&lt;br /&gt;
|RefDate1=01/08/2017&lt;br /&gt;
|EREQ=0&lt;br /&gt;
|EEST=0&lt;br /&gt;
|EFS=2.5&lt;br /&gt;
|ETS=0&lt;br /&gt;
|EDEV=15.5&lt;br /&gt;
|ESTT=3.50&lt;br /&gt;
|EIMP=1.25&lt;br /&gt;
|EPM=1.5&lt;br /&gt;
|REQ=0&lt;br /&gt;
|EST=0&lt;br /&gt;
|FS=0.0&lt;br /&gt;
|TS=0&lt;br /&gt;
|DEV=5&lt;br /&gt;
|ST=0.0&lt;br /&gt;
|IMP=0.0&lt;br /&gt;
|PM=0.0&lt;br /&gt;
|Client={{#var:Client}}&lt;br /&gt;
|Year={{#var:Year}}&lt;br /&gt;
|FSEST=Y&lt;br /&gt;
|FOC=N&lt;br /&gt;
|Rev1=Matt Turner&lt;br /&gt;
|Rev1Title=OBSL Account Manager&lt;br /&gt;
|Rev2=Rebecca Elliott&lt;br /&gt;
|Rev2Title=EBB Paper Representative&lt;br /&gt;
}}&amp;lt;/div&amp;gt; &lt;br /&gt;
[[Category:{{#var:Client}} FS]]&lt;/div&gt;</summary>
		<author><name>AppaduN</name></author>
	</entry>
	<entry>
		<id>https://calidusassist.adcservices.apteancloud.com/calidus-assist/OBS/index.php?title=FS_318517_SCR22_NHSBT_C-EPOD_Hospital_Own_Transport&amp;diff=1597</id>
		<title>FS 318517 SCR22 NHSBT C-EPOD Hospital Own Transport</title>
		<link rel="alternate" type="text/html" href="https://calidusassist.adcservices.apteancloud.com/calidus-assist/OBS/index.php?title=FS_318517_SCR22_NHSBT_C-EPOD_Hospital_Own_Transport&amp;diff=1597"/>
		<updated>2014-09-22T11:36:43Z</updated>

		<summary type="html">&lt;p&gt;AppaduN: Minor corrections&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;noprint&amp;quot;&amp;gt;&lt;br /&gt;
{{#vardefine:Client|NHS}}&lt;br /&gt;
{{#vardefine:ClientName|NHSBT}}&lt;br /&gt;
{{#vardefine:System|''CALIDUS'' ePOD}}&lt;br /&gt;
{{#vardefine:Doc_Title|Hospital Own Transport}}&lt;br /&gt;
{{#vardefine:Version|0.5}}&lt;br /&gt;
{{#vardefine:Date|22nd July 2014}}&lt;br /&gt;
{{#vardefine:Reference|318517 SCR22}}&lt;br /&gt;
{{#vardefine:Year|2014}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{Doc_Title&lt;br /&gt;
|Client={{#var:ClientName}}&lt;br /&gt;
|System={{#var:System}}&lt;br /&gt;
|Title={{#var:Doc_Title}}&lt;br /&gt;
|Reference=FS {{#var:Reference}}&lt;br /&gt;
|Version={{#var:Version}}&lt;br /&gt;
|Date={{#var:Date}}&lt;br /&gt;
|Year={{#var:Year}}&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TOC --&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;noprint&amp;quot;&amp;gt;&lt;br /&gt;
= Functional Overview  =&lt;br /&gt;
== Client Requirement  ==&lt;br /&gt;
&lt;br /&gt;
The following changes from the Solution Design document are included in this specification:&lt;br /&gt;
* '''SCR-316403-05''' - Hospital Own Transport&lt;br /&gt;
: EPOD Scanning at handover at Depot and delivery into depot from 3rd-party carriers and Hospital Own Transport - Configured via CTMS. This needs to include empties and samples collected from hospitals and all items collected from sessions by TNT. EPOD application development&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Solution Overview ==&lt;br /&gt;
In detail, the following C-EPOD execution functionality was requested:&lt;br /&gt;
&lt;br /&gt;
The process for Hospital Own Transport deliveries is as follows:&lt;br /&gt;
*	Hospital Services will scan all tags to Assets, as normal.&lt;br /&gt;
*	These jobs will be planned onto a Trip assigned to a hospital-related user (i.e. one per hospital or depot), for the carrier &amp;quot;Hospital Own Transport&amp;quot;. The Resource Allocation functionality will assist in choosing an available &amp;quot;driver&amp;quot;. The trip will be allocated a vehicle (it is suggested only one vehicle is created and this same one is used for all trips for this carrier) and set to Accepted.&lt;br /&gt;
*	When giving the jobs to Hospital Own Transport, Hospital Services will log on to the C-EPOD device and select the Job that the user is picking up. C-EPOD will be configured to allow users to select any job out of sequence.&lt;br /&gt;
*	Hospital Services will scan to complete this collection, via the Asset tags. If there are any Buff Tags that have not been scanned to Assets, the device will make this known at this time.&lt;br /&gt;
*	Once all items have been scanned, Hospital Services will obtain the driver's name and Signature on the device, to confirm change of ownership.&lt;br /&gt;
*	C-TMS will automatically complete this job.&lt;br /&gt;
*	No scanning or user entry is required for the delivery job - this will be automatically completed with the collection job.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hospital Own Transport will be bringing samples and/or empty Assets into the network themselves. It was requested that the C-EPOD device prompt the user at the end of the collection if there is anything additional to collect from Hospital Own Transport. This is an Ad Hoc Delivery and is currently unsupported by C-EPOD. This should be completed via the manual Debrief screen in C-TMS.&lt;br /&gt;
&lt;br /&gt;
Assets may be manually marked as in the depot by:&lt;br /&gt;
*	Manually adding an order and adding the assets or samples to the order before confirming the job completed.&lt;br /&gt;
*	Using the Asset Maintenance screen&lt;br /&gt;
*	Waiting until they are scanned again for Tag to Asset (for deliveries) or Ad Hoc Collection later.&lt;br /&gt;
&lt;br /&gt;
To complete this manually (i.e. without C-EPOD), the following steps would be taken:&lt;br /&gt;
*	If offered and accepted, C-TMS should be used to create a planned, empty collection from the hospital back to the depot, and assign this to the trip on which the Delivery is being completed. &lt;br /&gt;
*	When the carrier returns with assets or samples, these can then be actioned as with Hospital Own Transport above.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The process for 3rd-party Carrier deliveries is as follows:&lt;br /&gt;
*	Hospital Services will scan all tags to Assets, as normal.&lt;br /&gt;
*	These jobs will be planned as per the normal process (i.e. sent through the DPS interface or manually planned) onto a Trip and then assigned to a driver code (using resource allocation), for the specific 3rd-party Carrier. Default driver codes may be created, for example, &amp;quot;TNT1&amp;quot;, &amp;quot;TNT2&amp;quot;, etc. The Resource Allocation functionality will assist in choosing an available &amp;quot;driver&amp;quot;. The trip will be allocated a vehicle (it is suggested only one vehicle is created and this same one is used for all trips for this carrier) and set to Accepted.&lt;br /&gt;
*	When giving the items for the jobs to the carrier, Hospital Services will log on to the C-EPOD device with the correct user (the driver code) and select the Job that the carrier is picking up. C-EPOD will be configured to allow users to select any job out of sequence.&lt;br /&gt;
*	Hospital Services will scan to complete this collection, via the Asset tags. If there are any Buff Tags that have not been scanned to Assets, the device will make this known at this time.&lt;br /&gt;
*	Once all items have been scanned, Hospital Services will obtain the driver's name and signature on the device, to confirm change of ownership.&lt;br /&gt;
*	C-TMS will automatically complete this job.&lt;br /&gt;
*	No scanning is required for the delivery job - the debrief will be manually completed when the 3rd-party carrier returns the completed POD documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3rd-party Carriers may be offered the option of a return leg to the depot, to bring back any planned (e.g. sample) or unplanned items (e.g. empty assets). 3rd-party Carriers are also regularly used for Session collections. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The process for 3rd-party Carrier returns to depot is as follows:&lt;br /&gt;
*	The return order (the order to collect at the hospital and return items to the depot) will be created and planned on the trip above, which will have been allocated to the TNT 'driver' above.&lt;br /&gt;
*	When the TNT driver returns to the depot with the collected goods, a user (transport or hospital services) will obtain the paperwork, retrieve the trip that the driver is completing and find out the TNT user. This can be through many different methods, the easiest being:&lt;br /&gt;
**	Through the C-TMS Waterfall screen, if the user has access to C-TMS.&lt;br /&gt;
**	Through the C-EPOD Admin Loads or Users screen, if the user has access to C-EPOD.&lt;br /&gt;
**	Through the C-Portal Arrive/Depart (Airport) screen, if the user has access to C-Portal, or the C-Portal Airport screen is displayed in transport and/or hospital services.&lt;br /&gt;
*	The user will log in to the C-EPOD device using this TNT driver and select the order from the list.&lt;br /&gt;
*	The user will scan any preadvised items for delivery (e.g. Samples) and use a new &amp;quot;Ad Hoc Delivery&amp;quot; process to scan any other items brought in by the TNT driver (e.g. unplanned samples, returned assets, etc). If the TNT driver was planned to collect from multiple hospitals, the process will request the user to enter the hospital from which the items were collected. If single trip are scanned, the process will request the user to identify the asset type.&lt;br /&gt;
*	Once all items have been scanned, Hospital Services will obtain the driver's name and signature on the device, to confirm change of ownership.&lt;br /&gt;
*	C-TMS will automatically complete this job.&lt;br /&gt;
*	The TNT paperwork will then be used to manually debrief the collection from the various hospitals.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The process for 3rd-party Carrier Session collections is as follows:&lt;br /&gt;
*	For sessions, these will already have an order and will be planned on a trip. This will have been set to TNT carrier, resourced (allocated to a TNT driver code and vehicle) and set to status Accepted.&lt;br /&gt;
*	When the TNT driver returns to the depot with the collected goods, a user will obtain the paperwork, retrieve the trip (as above) and find out the TNT driver code assigned to the trip.&lt;br /&gt;
*	The user will log in to the C-EPOD device using this TNT driver code and select the order from the list.&lt;br /&gt;
*	The user will use a new &amp;quot;Ad Hoc Delivery&amp;quot; process to scan any items brought in by the TNT driver (e.g. polar bags of blood, document packs, returned assets, etc). If the TNT driver was planned to collect from multiple sessions, the process will request the user to enter the session location from which the items were collected. If single trip labels are scanned, the process will request the user to identify the asset type.&lt;br /&gt;
*	Once all items have been scanned, the user  will obtain the driver's name and signature on the device, to confirm change of ownership.&lt;br /&gt;
*	C-TMS will automatically complete this job.&lt;br /&gt;
*	The TNT paperwork will then be used to manually debrief the collection from the various sessions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
{{Note|This functionality will be developed in the Android application only and will not be available in the Windows Mobile application.}}&lt;br /&gt;
{{Note|This functionality is dependent on FS 317761 SCR15 C-EPOD Collection Changes.}}&lt;br /&gt;
{{Note|This functionality informs on and is informed by FS 317907 SCR01 C-TMS-C-EPOD Interface.}}&lt;br /&gt;
{{Note|Although it is possible with this solution to combine several trips together onto one trip, for ease of use on the C-EPOD device, rather than planning accurately as described above, this is not recommended for the following reasons:&lt;br /&gt;
* Individual PO cost will not be able to be calculated per trip, only for the trip as planned (i.e. all combined)&lt;br /&gt;
* Consolidation of jobs together at the depot (to provide a single loading task) may compromise the use of the C-EPOD application, if several distinct jobs are to be collected by different TNT drivers within the same collection or delivery timeframe, as these will be consolidated together.&lt;br /&gt;
* Mitigation of the above (i.e. turning off consolidation) would be impractical, as this would result in instructions to load assets multiple times (once for each job with contents in the asset), as the system has been instructed not to consolidate.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- NEW PAGE --&amp;gt; &lt;br /&gt;
= Set-up  =&lt;br /&gt;
&lt;br /&gt;
== Pre-requisites  ==&lt;br /&gt;
* A working {{#var:System}} system.&lt;br /&gt;
&lt;br /&gt;
=== C-TMS Interface Changes ===&lt;br /&gt;
* C-EPOD Configuration per Carrier, at certain location types. Broadly, this would be configured to send tasks to C-EPOD at depots, not at customer locations (hospitals), specifying a different job group.&lt;br /&gt;
* For HOT, Delivery jobs out to the hospital will not be sent to C-EPOD. The collections (loading) at the depot will, however.&lt;br /&gt;
* For 3PC, Delivery and Collection jobs at the hospital will not be sent to C-EPOD. Collections (loading) and Deliveries (unloading) at the depot will, however. &lt;br /&gt;
* These unloading jobs at the depot will include the 'from' address information.&lt;br /&gt;
* A configuration flag will be held against the carrier type, to indicate this sending of information. &lt;br /&gt;
* Configuration flags will also be created and held against the carrier, to control whether the paired jobs are automatically completed (i.e. HOT deliveries to hospital) or not (i.e. TNT deliveries that will be manually debriefed later from the paperwork returned).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Menu Structure  ==&lt;br /&gt;
None&lt;br /&gt;
&lt;br /&gt;
== Data  ==&lt;br /&gt;
* A site record will be created for each 3rd-party carrier or for a single hospital own transport carrier.&lt;br /&gt;
* The standard Job Groups will &lt;br /&gt;
* Only one vehicle per site will be created.&lt;br /&gt;
* No vehicle checks are required.&lt;br /&gt;
* Multiple drivers will be created for the 3rd-party Carrier, to allow multiple trips to be actioned per day.&lt;br /&gt;
* Multiple drivers will be created for the Hospital Own Transport, one per hospital or depot.&lt;br /&gt;
* The jobs group created for other carriers will also be created for these sites and be configured similarly, except for:&lt;br /&gt;
** allow drivers to select any incoming job from the job list.&lt;br /&gt;
** prompt for signature on collections and deliveries.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- NEW PAGE --&amp;gt; &lt;br /&gt;
= Functional Description  =&lt;br /&gt;
== Database/DAL changes ==&lt;br /&gt;
* New flag Ad Hoc Delivery&lt;br /&gt;
Table EPOD_SITE requires the following modifications:&lt;br /&gt;
* EPL_AD_HOC_DELIVERY - nvarchar(1), NOT NULL DEFAULT 'N', values 'Y' or 'N'.&lt;br /&gt;
&lt;br /&gt;
Existing packages will be modified to allow the creating, editing and selecting of the new flag, including but not limited to:&lt;br /&gt;
*EPOD_SITE_INSERT&lt;br /&gt;
*EPOD_SITE_SELECT&lt;br /&gt;
*EPOD_SITE_SELECT_UPDATED_DATA&lt;br /&gt;
*EPOD_SITE_UPDATE&lt;br /&gt;
The existing EPOD_SITE DAL object will be changed to:&lt;br /&gt;
* Read the new flag&lt;br /&gt;
{{Note}} It is not necessary to add this flag as a search-able item. However, if allowing this keeps the packages and DAL objects standard in design, then this can also be done, within the DAL and the packages.&lt;br /&gt;
&lt;br /&gt;
The XML Export of EPOD_SITE records will look as follows: &lt;br /&gt;
  &amp;lt;EPOD_SITE&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SITE_ID&amp;gt;&amp;lt;/EPL_SITE_ID&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_DESCRIPTION&amp;gt;&amp;lt;/EPL_DESCRIPTION&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SERVICE_POD_FORMAT&amp;gt;&amp;lt;/EPL_SERVICE_POD_FORMAT&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_DELIVERY_POD_FORMAT&amp;gt;&amp;lt;/EPL_DELIVERY_POD_FORMAT&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_COLLECTION_POD_FORMAT&amp;gt;&amp;lt;/EPL_COLLECTION_POD_FORMAT&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SERVICE_ACTIVITIES&amp;gt;&amp;lt;/EPL_SERVICE_ACTIVITIES&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SERVICE_PREWORK&amp;gt;&amp;lt;/EPL_SERVICE_PREWORK&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SERVICE_INFO&amp;gt;&amp;lt;/EPL_SERVICE_INFO&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SERVICE_PRODUCTS&amp;gt;&amp;lt;/EPL_SERVICE_PRODUCTS&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SERVICE_MC_REF&amp;gt;&amp;lt;/EPL_SERVICE_MC_REF&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SERVICE_DIAGNOSIS&amp;gt;&amp;lt;/EPL_SERVICE_DIAGNOSIS&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SERVICE_POSTWORK&amp;gt;&amp;lt;/EPL_SERVICE_POSTWORK&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_AUTO_COMPLETE_EMAIL&amp;gt;&amp;lt;/EPL_AUTO_COMPLETE_EMAIL&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_AD_HOC_COLLECTION&amp;gt;&amp;lt;/EPL_AD_HOC_COLLECTION&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_DEL_DRIVER_SIGN&amp;gt;&amp;lt;/EPL_DEL_DRIVER_SIGN&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_COL_DRIVER_SIGN&amp;gt;&amp;lt;/EPL_COL_DRIVER_SIGN&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_DELIVERY_PAYMENT&amp;gt;&amp;lt;/EPL_DELIVERY_PAYMENT&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_DOCUMENT_PHOTO&amp;gt;&amp;lt;/EPL_DOCUMENT_PHOTO&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_CONTAINER_ONLY&amp;gt;&amp;lt;/EPL_CONTAINER_ONLY&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_PDA_DIS_JOB_CODE&amp;gt;&amp;lt;/EPL_PDA_DIS_JOB_CODE&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_LINKED_C_D&amp;gt;&amp;lt;/EPL_LINKED_C_D&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_METRICS_ENTRY&amp;gt;&amp;lt;/EPL_METRICS_ENTRY&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_NOTES&amp;gt;&amp;lt;/EPL_NOTES&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_FORCED_ENTRY&amp;gt;&amp;lt;/EPL_FORCED_ENTRY&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SYSTEM_TYPE&amp;gt;&amp;lt;/EPL_SYSTEM_TYPE&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_UPDATE_FUNCTIONS&amp;gt;&amp;lt;/EPL_UPDATE_FUNCTIONS&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_VEHICLE_CHECK_CONFIG&amp;gt;&amp;lt;/EPL_VEHICLE_CHECK_CONFIG&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_JOB_LIST_CFG&amp;gt;&amp;lt;/EPL_JOB_LIST_CFG&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_ARRIVAL_FLAG&amp;gt;&amp;lt;/EPL_ARRIVAL_FLAG&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SCAN_ERROR_FLAG&amp;gt;&amp;lt;/EPL_SCAN_ERROR_FLAG&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_LAST_CHANGED_DATE&amp;gt;&amp;lt;/EPL_LAST_CHANGED_DATE&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_LAST_CHANGED_TIME&amp;gt;&amp;lt;/EPL_LAST_CHANGED_TIME&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_RESEQUENCE&amp;gt;&amp;lt;/EPL_RESEQUENCE&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_CLAUSE_DELIVERY&amp;gt;&amp;lt;/EPL_CLAUSE_DELIVERY&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_JOB_STATUS&amp;gt;&amp;lt;/EPL_JOB_STATUS&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_CONSOLIDATION&amp;gt;&amp;lt;/EPL_CONSOLIDATION&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_VEHICLE_STOCK_FLAG&amp;gt;&amp;lt;/EPL_VEHICLE_STOCK_FLAG&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SCAN_AT_VEHICLE&amp;gt;&amp;lt;/EPL_SCAN_AT_VEHICLE&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_PDA_FULL_ADDRESSES&amp;gt;&amp;lt;/EPL_PDA_FULL_ADDRESSES&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_JOB_TRANSFER&amp;gt;&amp;lt;/EPL_JOB_TRANSFER&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_NEXT_JOB_FLAG&amp;gt;&amp;lt;/EPL_NEXT_JOB_FLAG&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_RETURNS_DEPOT_FLAG&amp;gt;&amp;lt;/EPL_RETURNS_DEPOT_FLAG&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SCANNING_FLAG&amp;gt;&amp;lt;/EPL_SCANNING_FLAG&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_AUTOLOGIN_FLAG&amp;gt;&amp;lt;/EPL_AUTOLOGIN_FLAG&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_ADHOC_ANYTIME_CONFIG&amp;gt;&amp;lt;/EPL_ADHOC_ANYTIME_CONFIG&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_AUDIT_LOGIN_FLAG&amp;gt;&amp;lt;/EPL_AUDIT_LOGIN_FLAG&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_TRAILER_VEHICLE_FLAG&amp;gt;&amp;lt;/EPL_TRAILER_VEHICLE_FLAG&amp;gt;&lt;br /&gt;
    ''&amp;lt;EPL_AD_HOC_DELIVERY&amp;gt;&amp;lt;/EPL_AD_HOC_DELIVERY&amp;gt;''&lt;br /&gt;
  &amp;lt;/EPOD_SITE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
Table EPOD_JOB_GROUP requires the following modification:&lt;br /&gt;
*    EPL_AD_HOC_DELIVERY - nvarchar(1), NOT NULL DEFAULT 'N', values 'Y' or 'N'. &lt;br /&gt;
&lt;br /&gt;
Existing packages will be modified to allow the creating, editing and selecting of the new flag, including but not limited to:&lt;br /&gt;
*    EPOD_JOB_GROUP_INSERT&lt;br /&gt;
*    EPOD_JOB_GROUP_SEARCH&lt;br /&gt;
*    EPOD_JOB_GROUP_SELECT&lt;br /&gt;
*    EPOD_JOB_GROUP_SELECT_UPDATED_DATA&lt;br /&gt;
*    EPOD_JOB_GROUP_UPDATE &lt;br /&gt;
&lt;br /&gt;
The existing EPOD_JOB_GROUP DAL object will be changed to:&lt;br /&gt;
*    Export the new flag in XML requests&lt;br /&gt;
*    Read the new flag &lt;br /&gt;
&lt;br /&gt;
{{Note}} It is not necessary to add this flag as a searchable item. However, if allowing this keeps the packages and DAL objects standard in design, then this can also be done, within the DAL and the packages.&lt;br /&gt;
&lt;br /&gt;
Example: The XML Export of EPOD_JOB_GROUP records will now look as follows:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;EPOD_JOB_GROUP&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_SITE_ID&amp;gt;&amp;lt;/EPL_SITE_ID&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_JOB_GROUP&amp;gt;&amp;lt;/EPL_JOB_GROUP&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_DESCRIPTION&amp;gt;&amp;lt;/EPL_DESCRIPTION&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_SERVICE_POD_FORMAT&amp;gt;&amp;lt;/EPL_SERVICE_POD_FORMAT&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_DELIVERY_POD_FORMAT&amp;gt;&amp;lt;/EPL_DELIVERY_POD_FORMAT&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_COLLECTION_POD_FORMAT&amp;gt;&amp;lt;/EPL_COLLECTION_POD_FORMAT&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_SERVICE_ACTIVITIES&amp;gt;&amp;lt;/EPL_SERVICE_ACTIVITIES&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_SERVICE_PREWORK&amp;gt;&amp;lt;/EPL_SERVICE_PREWORK&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_SERVICE_INFO&amp;gt;&amp;lt;/EPL_SERVICE_INFO&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_SERVICE_PRODUCTS&amp;gt;&amp;lt;/EPL_SERVICE_PRODUCTS&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_SERVICE_MC_REF&amp;gt;&amp;lt;/EPL_SERVICE_MC_REF&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_SERVICE_DIAGNOSIS&amp;gt;&amp;lt;/EPL_SERVICE_DIAGNOSIS&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_SERVICE_POSTWORK&amp;gt;&amp;lt;/EPL_SERVICE_POSTWORK&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_AUTO_COMPLETE_EMAIL&amp;gt;&amp;lt;/EPL_AUTO_COMPLETE_EMAIL&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_AD_HOC_COLLECTION&amp;gt;&amp;lt;/EPL_AD_HOC_COLLECTION&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_DEL_DRIVER_SIGN&amp;gt;&amp;lt;/EPL_DEL_DRIVER_SIGN&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_COL_DRIVER_SIGN&amp;gt;&amp;lt;/EPL_COL_DRIVER_SIGN&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_DEL_CUST_SIGN&amp;gt;&amp;lt;/EPL_DEL_CUST_SIGN&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_COL_CUST_SIGN&amp;gt;&amp;lt;/EPL_COL_CUST_SIGN&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_SIGN_CHECK_LBL&amp;gt;&amp;lt;/EPL_SIGN_CHECK_LBL&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_DELIVERY_PAYMENT&amp;gt;&amp;lt;/EPL_DELIVERY_PAYMENT&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_DOCUMENT_PHOTO&amp;gt;&amp;lt;/EPL_DOCUMENT_PHOTO&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_CONTAINER_ONLY&amp;gt;&amp;lt;/EPL_CONTAINER_ONLY&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_METRICS_ENTRY&amp;gt;&amp;lt;/EPL_METRICS_ENTRY&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_NOTES&amp;gt;&amp;lt;/EPL_NOTES&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_TNCS&amp;gt;&amp;lt;/EPL_TNCS&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_LAST_CHANGED_DATE&amp;gt;&amp;lt;/EPL_LAST_CHANGED_DATE&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_LAST_CHANGED_TIME&amp;gt;&amp;lt;/EPL_LAST_CHANGED_TIME&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_JOB_STATUS&amp;gt;&amp;lt;/EPL_JOB_STATUS&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_CONSOLIDATION&amp;gt;&amp;lt;/EPL_CONSOLIDATION&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_SCAN_AT_VEHICLE&amp;gt;&amp;lt;/EPL_SCAN_AT_VEHICLE&amp;gt;&lt;br /&gt;
   ''&amp;lt;EPL_AD_HOC_DELIVERY&amp;gt;&amp;lt;/EPL_AD_HOC_DELIVERY&amp;gt;''&lt;br /&gt;
 &amp;lt;/EPOD_JOB_GROUP&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The existing database package EPOD_SETUP will be modified to ensure that the new flags are defaulted appropriately.&lt;br /&gt;
&lt;br /&gt;
== Import/Export Messages ==&lt;br /&gt;
The PDA web request server (Calidus_ePOD.asmx, both the XML and JSON versions) will be modified to include the new Site and Job Group flags in the LOGON_REQUEST message processor (through the LOGON_RESPONSE message).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Admin Changes ==&lt;br /&gt;
The Job Group and Site maintenance screens (job_group.aspx and site_header.aspx respectively) will be modified to allow the system to be configured for:&lt;br /&gt;
*  EPL_AD_HOC_DELIVERY, a checkbox, labelled as &amp;quot;AD Hoc Delivery&amp;quot;, defaulting to 'N' (Disabled). &lt;br /&gt;
This configuration field will be added to the PDA tab of these screens.&lt;br /&gt;
&lt;br /&gt;
{{Note}} Ensure that the new check-boxes line up with the existing fields. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== PDA Changes ==&lt;br /&gt;
=== Database/DAL changes ===&lt;br /&gt;
A new column will be added to the EPOD_SITE and EPOD_JOB_GROUP tables:&lt;br /&gt;
*    EPL_AD_HOC_DELIVERY - This will be a one character field with of Values 'Y' and 'N'. The default value is 'N'. &lt;br /&gt;
This new field should be added to every procedure as part of the PDA_SITE and PDA_JOB_GROUP DAL objects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Login ===&lt;br /&gt;
{{Note}} No changes are required to the Login process - this section described how the process will work when configured as described.&lt;br /&gt;
&lt;br /&gt;
The device will be configured for the Carrier (i.e. TNT or the hospital) as the site.&lt;br /&gt;
&lt;br /&gt;
The transport user will log on using the carrier driver assigned to the trip (either found through C-TMS or preset to a single default value), select the default vehicle and enter the password.&lt;br /&gt;
&lt;br /&gt;
This will retrieve the list of jobs on the load assigned to that user and display them on the job list.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Job List ===&lt;br /&gt;
{{Note}} No changes are required to the Job List process - this section described how the process will work when configured as described.&lt;br /&gt;
&lt;br /&gt;
Only the jobs on the current trip will be shown. The Job List will be configured to allow the user to select any of the jobs on that load, and also to show all jobs singly (i.e. not consolidated together).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Delivery Process ===&lt;br /&gt;
When a Delivery job (i.e. in this case, a depot unloading task) is selected from the Job List and started from the Job Details form, the Delivery screen will show.&lt;br /&gt;
&lt;br /&gt;
This will be modified to display the ''Ad Hoc'' tab in a similar way to the &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Note}} The existing ''Items'' tab is there to show all preadvised items - unplanned delivery of items will be shown on a different tab (described later). The Items (Container) tab will only be shown if there are items preadvised for the jobs. If there are none, this tab will not be present.&lt;br /&gt;
&lt;br /&gt;
{{Note}} The '''Complete''' button should only appear on the ''Job Details'' tab if any of the following conditions are true:&lt;br /&gt;
&lt;br /&gt;
*    There are no preadvised items to deliver.&lt;br /&gt;
*    The application is configured for Ad Hoc Delivery (new Job Group flag EPL_AD_HOC_DELIVERY is enabled). &lt;br /&gt;
&lt;br /&gt;
When all preadvised items have been scanned as delivered (or marked as cancelled), the application currently recognises this and automatically moves on to the Job Completion stage. This will not occur if this is a delivery job, and the application has been configured for Ad Hoc Delivery (EPL_AD_HOC_DELIVERY is enabled). In this case, the device will simply display the empty items list (as there are no more items to scan) and wait, as there may be unplanned items to scan as part of the Ad Hoc Delivery process (in the next section). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ad Hoc Delivery Tab ===&lt;br /&gt;
This tab will have functionality extremely similar to the Ad Hoc Collection tab - this functionality is re-stated here, with any exceptions noted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Ad Hoc Delivery process allows the driver to specify the items delivered, at the point of Delivery, without the specific items for those Deliveries being planned in advance. This appears as a separate tab on the PDA within the Delivery process, labelled as &amp;quot;Ad Hoc&amp;quot; when this feature is enabled (through the flag EPL_ADHOC_DELIVERY for Delivery-type jobs only). This tab will be to the right of the existing ''Containers'' and ''Products'' tabs, but before the ''Notes'' tab.&lt;br /&gt;
&lt;br /&gt;
The layout of the tab will be almost identical to the existing ''Items (Containers)'' tab. The following are sample screen layouts for the features of the tab. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=260px heights=400px perrow=2 caption=&amp;quot;Ad Hoc Delivery Prototype Screen-shots&amp;quot;&amp;gt;&lt;br /&gt;
File:FS_317761_AdHoc1.PNG|''Unplanned item details''&lt;br /&gt;
File:FS_317761_AdHoc2.PNG|''Ad Hoc item list''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note}} These are the Ad Hoc Collection prototype screenshots.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The tab will allow items to be entered in exactly the same way as the ''Items (Containers)'' tab:&lt;br /&gt;
* Through a &amp;quot;Scan Container&amp;quot; text box and '''Deliver''' button.&lt;br /&gt;
* Through the use of the built in Camera Scanner feature, through the '''Scan''' button.&lt;br /&gt;
Note that there is no method of entry through the table (i.e. pressing or long-pressing on the table row will show no ''Deliver'' option).&lt;br /&gt;
&lt;br /&gt;
This table of items on the screen will start empty - as items are scanned, these will be added to the table. {{Note}} Developer Note: The table should be built to the same scrolling view mechanism as the Items (Container) table on that tab.&lt;br /&gt;
&lt;br /&gt;
Like the ''Items (Containers)'' tab, this tab will only allow asset formats to be scanned in the formats detailed in the Scanning section - any invalid formats will be discarded with a transient message displayed on the screen. &lt;br /&gt;
&lt;br /&gt;
The tab will check whether the scanned item is an item that has been preadvised for the job. If so, and the item has already been confirmed as received, a transient message will inform the driver &amp;quot;This item already scanned&amp;quot;. If this preadvised item has not yet been scanned for Delivery, the tab will interrupt the scanning (if continuous scanning is enabled) and will display an alert &amp;quot;Ad Hoc Delivery&amp;quot;/&amp;quot;Preadvised items must be scanned on the Items tab&amp;quot;. If this preadvised item has been marked as cancelled on the preadvised list, the tab will interrupt the scanning (if continuous scanning is enabled) and will display an alert &amp;quot;Ad Hoc Delivery&amp;quot;/&amp;quot;Preadvised item has been cancelled and cannot be delivered.&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
The tab will check whether the scanned item has already been scanned by the Ad Hoc Delivery process. If so, a transient message will inform the driver &amp;quot;This item already scanned&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The different types of Asset will be dealt with differently: &lt;br /&gt;
*	Fixed (Permanent) Assets IDs will always be associated with a particular Asset Type in C-TMS, so the application will not require the driver to confirm the Asset Type for a Fixed Asset. These will simply be added directly to the table.&lt;br /&gt;
*	Single Trip Assets must have an asset type entered.&lt;br /&gt;
Additionally, the application will check to see if this collection is part of a consolidation (multiple delivery jobs) with multiple collection destinations. Note that this is completed differently to the Ad Hoc Collection screen, in that the device will check for the address from the Alternate address sent to the device from the server, rather than from a linked job (that will not have been sent to C-EPOD from C-TMS). If the addresses found are different, then the driver must be prompted to enter a destination location. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After these checks are made on a scanned Item ID, and further entry is required, the application will stop the scanning process (if continuous scanning is in use) and display a pop-up data entry screen. This will have the following fields:&lt;br /&gt;
* Header label, showing the scanned Item ID.&lt;br /&gt;
* Location label and drop-down list. These will only be shown if there are multiple collection locations. If this is the case, the location names will be listed in a drop-down list, forcing the driver to select one. The default entry on the drop-down list will be &amp;quot;Select a Location&amp;quot;. &lt;br /&gt;
* Type label and drop-down list. These will only be shown if the item scanned is a single-trip format Item ID. If this is the case, all DUs (Asset Types) will be displayed in a drop-down list, forcing the driver to select one. The default entry on the drop-down list will be &amp;quot;Select a Type&amp;quot;. The list will be built from all DU-type codes on the Reason Codes table (EPL_DESCRIPTION from EPOD_REASON_CODE where EPL_REASON_TYPE = &amp;quot;DU&amp;quot;).&lt;br /&gt;
* A '''Cancel''' button. When pressed, this closes the pop-up data entry screen. The scanned ID will be discarded and not added to the Ad Hoc Items list.&lt;br /&gt;
* A '''Save''' button. When pressed, this button will validate that all required data is entered. If not, the screen will display a pop-up alert showing the item that has not been entered (&amp;quot;Ad Hoc Additional Details&amp;quot;/&amp;quot;You must select a (Field)&amp;quot;, where (Field) is replaced with the data type that has not been entered, i.e. &amp;quot;Type&amp;quot; or &amp;quot;Location&amp;quot;). When this alert is cleared, the user will be returned to the pop-up entry screen. If there are no errors found when clicking the '''Save''' button, the pop-up data entry screen will be closed and the item will be added to the Ad Hoc Items list.&lt;br /&gt;
&lt;br /&gt;
If items have been scanned and need to be added to the list, they will be added as a new row on the EPOD_CONTAINER table, as follows:&lt;br /&gt;
* EPL_JOB_ID - This will be from the job being scanned. If there are consolidated jobs with the same (or linked) destinations, this will be the Job ID of the first job. If there are consolidated jobs with different destinations, this will be the Job ID of the job with the destination as selected by the driver in the pop-up details entry screen&lt;br /&gt;
* EPL_CONTAINER_ID - As scanned, minus the leading barcode application identifiers (&amp;quot;00&amp;quot; or &amp;quot;8004&amp;quot;)&lt;br /&gt;
* EPL_CONTAINER_PACKAGE_CODE - If this is a permanent Asset barcode (&amp;quot;8004&amp;quot;), this will be left blank. If not, this will be the code of the asset type selected by the driver in the pop-up details entry screen (EPL_REASON_CODE).&lt;br /&gt;
* EPL_CONTAINER_PACKAGE_DESC - If this is a permanent Asset barcode (&amp;quot;8004&amp;quot;), this will be left blank. If not, this will be the description of the asset type selected by the driver in the pop-up details entry screen (EPL_DESCRIPTION).&lt;br /&gt;
* EPL_STATUS - &amp;quot;C&amp;quot;&lt;br /&gt;
* EPL_TYPE - &amp;quot;A&amp;quot;, to indicate that this is an Ad Hoc Delivery&lt;br /&gt;
* EPL_SEQUENCE - Set as 3-digit numeric counting from 001, incrementing with each item added to this screen.&lt;br /&gt;
All other items will be blank or added as normal.&lt;br /&gt;
&lt;br /&gt;
These records will be added as a new row at the top of the list, by retrieving all records in reverse sequence order (through the PDA_CONTAINER DAL function SelectAllContainersForJob with parameter p_blnAdHoc set to true). This will return only scanned Ad Hoc items, in reverse sequence. The details displayed will differ, depending on the information delivered:&lt;br /&gt;
* Item ID - EPL_CONTAINER_ID&lt;br /&gt;
* Type - EPL_CONTAINER_PACKAGE_DESC&lt;br /&gt;
* Location - EPL_CUSTOMER_NAME of EPOD_JOB &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pressing or long-pressing on an item in this Ad Hoc table will allow the driver to remove an item from the Delivery. The application will display a pop-up alert &amp;quot;Ad Hoc Delivery&amp;quot;/&amp;quot;Do you want to remove this item?&amp;quot; with options &amp;quot;Yes&amp;quot; and &amp;quot;No&amp;quot;. Choosing &amp;quot;No&amp;quot; will leave the item on the list. Choosing &amp;quot;Yes&amp;quot; will delete the item from the scanned containers and refresh the list without this item.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A '''Complete''' button should be available on the ''Job Details'' tab, to allow the users to manually indicate that all items have now been delivered. Clicking this will instigate the Job Completion stage. If at this time no items have been scanned as part of the Ad Hoc Scanning tab for this Delivery (and Ad Hoc Delivery is enabled), a pop-up alert will be displayed, showing &amp;quot;Unplanned Items&amp;quot;/&amp;quot;Please confirm that there are no unplanned items to scan&amp;quot;, with options &amp;quot;Confirm&amp;quot; and &amp;quot;Cancel&amp;quot;. Choosing &amp;quot;Confirm&amp;quot; will move on to Job Completion, whereas &amp;quot;Cancel&amp;quot; will return to the Delivery process and activate the ''Ad Hoc'' scanning tab.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- MEDIA LANDSCAPE YES --&amp;gt;&lt;br /&gt;
= Appendix A: TEST PLAN  =&lt;br /&gt;
&lt;br /&gt;
{{TestPlan_Header&lt;br /&gt;
|Title={{#var:Doc_Title}}&lt;br /&gt;
|Log={{#var:Reference}}&lt;br /&gt;
|Description=Test the C-EPOD changes made for NHSBT.&lt;br /&gt;
|MenuAccess=None&lt;br /&gt;
|Prerequisites=Data set up as per Data Setup section; Note that individual setup information is provided for each test area.&lt;br /&gt;
|Objective=To test that: Admin can view and maintain configuration for the changes; the EPOD Client application can perform Ad Hoc Deliveries.&lt;br /&gt;
}} &lt;br /&gt;
{{ #vardefine: Cycle | 0 }}{{ #vardefine: SubCycle | 0 }}&lt;br /&gt;
{{TestPlan_CycleHeader&lt;br /&gt;
|Cycle={{ #vardefineecho: Cycle | {{ #expr: {{ #var: Cycle }} + 1 }} }}{{ #vardefine: SubCycle | {{ #var: Cycle }} }}&lt;br /&gt;
|Title=Admin Tests&lt;br /&gt;
|Notes=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Enter the Site Maintenance screen. Ensure the new fields are present and can be set and maintained.&lt;br /&gt;
|Result=New fields can be set, changed and saved:&lt;br /&gt;
* New checkbox &amp;quot;Ad Hoc Delivery&amp;quot;&lt;br /&gt;
The tabs are well organised, making good use of space.	 	 &lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Enter the Job Group Maintenance screen. Ensure the new fields are present and can be set and maintained.&lt;br /&gt;
|Result=New fields can be set, changed and saved:&lt;br /&gt;
* New checkbox &amp;quot;Ad Hoc Delivery&amp;quot;&lt;br /&gt;
The tabs are well organised, making good use of space.	 	 &lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_CycleFooter}}&lt;br /&gt;
&lt;br /&gt;
{{TestPlan_CycleHeader&lt;br /&gt;
|Cycle={{ #vardefineecho: Cycle | {{ #expr: {{ #var: Cycle }} + 1 }} }}{{ #vardefine: SubCycle | {{ #var: Cycle }} }}&lt;br /&gt;
|Title=PDA Ad Hoc Delivery.&lt;br /&gt;
|Notes=Create a load with several deliveries from hospitals and deliveries to the depot and assign to the carrier, user and vehicle. Ensure that there are planned items on some deliveries and deliveries.&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Log in to the application and pick up the load.&lt;br /&gt;
|Result=The ''''Job List'''' is displayed:&lt;br /&gt;
* No deliveries at the hospitals should be shown.&lt;br /&gt;
* Deliveries to the depot should not be consolidated, and labelled as Unloading jobs.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Select the second unloading job and start it at the Job Details page.&lt;br /&gt;
|Result=No error will be displayed; the job may be started and the delivery screen shown.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Click '''Start Job'''.&lt;br /&gt;
|Result=The device checks for any changes to the jobs. When checked, the ''''Delivery'''' screen is displayed:&lt;br /&gt;
* There is a '''Complete''' button.&lt;br /&gt;
* There are 3 tabs: ''Job Details''; ''Items''; ''Ad Hoc''.&lt;br /&gt;
* The jobs are shown as &amp;quot;In Progress&amp;quot; in Admin.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Click the '''Complete''' button.&lt;br /&gt;
|Result=An error should be displayed showing that there are still items awaiting scanning.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Switch to the ''Items'' tab. Cancel one of the items and confirm the exception with a reason code.&lt;br /&gt;
|Result=The Items list is displayed with only one item on it.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Switch to the ''Ad Hoc'' tab&lt;br /&gt;
|Result=The Items list is displayed (with nothing in it). The screen is laid out as expected.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Using the provided text box, enter &amp;quot;invalid&amp;quot;. Click ''Deliver''.&lt;br /&gt;
|Result=A transient error should be displayed, showing that the format is invalid.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Enter &amp;quot;8004invalid&amp;quot;. Click ''Deliver''.&lt;br /&gt;
|Result=A transient error should be displayed, showing that the format is invalid.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Enter &amp;quot;00invalidlength&amp;quot;. Click '''Deliver'''.&lt;br /&gt;
|Result=A transient error should be displayed, showing that the format is invalid.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Enter &amp;quot;00invalidformat00000&amp;quot;. Click '''Deliver'''.&lt;br /&gt;
|Result=A transient error should be displayed, showing that the format is invalid.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Enter a valid temporary Asset ID. Click ''Deliver''.&lt;br /&gt;
|Result=The pop-up ''''Details'''' window should be shown, prompting for Type only. The type list should show all valid Asset types.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Click '''Cancel'''&lt;br /&gt;
|Result=The ''Ad Hoc'' tab should be shown. The item should not be added to the list.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Enter a valid temporary Asset ID. Click ''Deliver''. Click '''Save''' in the pop-up up ''''Details'''' window.&lt;br /&gt;
|Result=An error should be displayed, asking for Type details.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Select a type. Click '''Save'''&lt;br /&gt;
|Result=The item should be added to the list, showing the selected type. The format of the list row should be as expected.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Press the '''Scan''' button.&lt;br /&gt;
|Result=A Scan reticule should be displayed, allowing barcodes to be scanned.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Repeat the item tests for invalid formats and items above (&amp;quot;invalid&amp;quot;, &amp;quot;8004invalid&amp;quot;, &amp;quot;00invalidlength&amp;quot;, &amp;quot;00invalidformat00000&amp;quot;)&lt;br /&gt;
|Result=Each time these items are scanned, a transient error should display, as previously. The Scan reticule should stay open.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Scan an invalid barcode type (for example, a CODE 39 or EAN-8 or EAN-13 barcode).&lt;br /&gt;
|Result=A transient error should display, showing that the format is invalid. The Scan reticule should stay open.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Scan the cancelled item from the planned items list.&lt;br /&gt;
|Result=The Scan reticule should be closed and the ''Ad Hoc'' tab be displayed, showing a pop-up error, saying that the item must not be Delivered, as it has already been cancelled.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Press the '''Scan''' button. Scan the remaining planned item from the planned items list.&lt;br /&gt;
|Result=The Scan reticule should be closed and the ''Ad Hoc'' tab be displayed, showing a pop-up error, saying that the item must be Delivered through the Items tab.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Switch to the ''Items'' tab and scan the item. &lt;br /&gt;
|Result=A transient message should be displayed, showing that the item has been Delivered. The Scan reticule should be closed and the ''Items'' tab be displayed, with no items on the Items list.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Switch to the ''Ad Hoc'' tab and scan the same item. &lt;br /&gt;
|Result=A transient message should be displayed, showing that the item has already been Delivered. The Scan reticule should stay open.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Scan an item that is already on the ''Ad Hoc'' items list.&lt;br /&gt;
|Result=A transient message should be displayed, showing that the item has already been Delivered. The Scan reticule should stay open.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Close the Scan reticule.&lt;br /&gt;
|Result=The ''Ad Hoc'' tab and Items list should be displayed, showing the items scanned, with the latest at the top.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Click on the top item.&lt;br /&gt;
|Result=An alert should ask whether the item should be removed.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Click '''No'''.&lt;br /&gt;
|Result=The ''Ad Hoc'' tab and Items list should be displayed again, with item selected still on the list.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Click on the top item. When prompted, click '''Yes'''.&lt;br /&gt;
|Result=The Items list should be displayed again. The item selected should be removed from the list.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Move to the ''Job Details'' tab and press the '''Complete''' button.&lt;br /&gt;
|Result=The signature should be prompted for.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Complete the signature.&lt;br /&gt;
|Result=A transient message should display that the job is complete. &lt;br /&gt;
The jobs will be completed in Admin.&lt;br /&gt;
The Job list should be redisplayed.&lt;br /&gt;
The Unloading task will be removed from the Job List. &lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a trip with consolidated deliveries back to the depot, from different collection locations. Log in to the C-EPOD device, start the job and move to the ''Ad Hoc Items'' tab. Enter a valid permanent Asset ID. Click ''Deliver''.&lt;br /&gt;
|Result=The pop-up ''''Details'''' window should be shown, prompting for Location only. The Location list should show a list of all unique collection locations for the orders.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Click '''Cancel'''&lt;br /&gt;
|Result=The ''Ad Hoc'' tab should be shown. The item should not be added to the list.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Enter a valid permanent Asset ID. Click ''Deliver''. Click '''Save''' in the pop-up up ''''Details'''' window.&lt;br /&gt;
|Result=An error should be displayed, asking for Location details.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Select a Location. Click '''Save'''&lt;br /&gt;
|Result=The item should be added to the list, showing the selected location. The format of the list row should be as expected.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Enter a valid single trip Asset ID. Click ''Deliver''.&lt;br /&gt;
|Result=The pop-up ''''Details'''' window should be shown, prompting for Type and Location. The type list should show all valid Asset types. The Location list should show a list of all unique collection locations for the orders.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Click '''Cancel'''&lt;br /&gt;
|Result=The ''Ad Hoc'' tab should be shown. The item should not be added to the list.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Enter a valid temporary Asset ID. Click ''Deliver''. Click '''Save''' in the pop-up up ''''Details'''' window.&lt;br /&gt;
|Result=An error should be displayed, asking for Type and Location details.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Select a type. Click '''Save'''&lt;br /&gt;
|Result=An error should be displayed, asking for Location details.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Select a Location. Click '''Save'''&lt;br /&gt;
|Result=The item should be added to the list, showing the selected type and location. The format of the list row should be as expected.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_CycleFooter}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- MEDIA LANDSCAPE NO --&amp;gt; &lt;br /&gt;
{{Doc_Appendix&lt;br /&gt;
|Appendix=B&lt;br /&gt;
|Estimate=Y&lt;br /&gt;
|Glossary=EPOD&lt;br /&gt;
|Ref1=NHSBT High Level Solution Design v2.0.doc&lt;br /&gt;
|RefV1=2.0&lt;br /&gt;
|RefDate1=21/05/2014&lt;br /&gt;
|Ref2=FS 317907 SCR01 EPOD-TMS Interface &lt;br /&gt;
|RefV2=&amp;amp;nbsp;&lt;br /&gt;
|RefDate2=&amp;amp;nbsp;&lt;br /&gt;
|Ref3=FS 317761 SCR15 NHSBT C-EPOD Collection Changes &lt;br /&gt;
|RefV3=0.4&lt;br /&gt;
|RefDate3=04/06/2014&lt;br /&gt;
|REQ=0&lt;br /&gt;
|EST=0&lt;br /&gt;
|FS=0.75&lt;br /&gt;
|TS=0&lt;br /&gt;
|DEV=3&lt;br /&gt;
|ST=0.5&lt;br /&gt;
|IMP=0&lt;br /&gt;
|EREQ=0&lt;br /&gt;
|EEST=0&lt;br /&gt;
|EFS=0.75&lt;br /&gt;
|ETS=0&lt;br /&gt;
|EDEV=3&lt;br /&gt;
|ESTT=0.5&lt;br /&gt;
|EIMP=0&lt;br /&gt;
|Client={{#var:Client}}&lt;br /&gt;
|Year={{#var:Year}}&lt;br /&gt;
|FSEST=Y&lt;br /&gt;
|FOC=N&lt;br /&gt;
|Rev1=Julie Scott&lt;br /&gt;
|Rev1Title=Project Manager&lt;br /&gt;
|Rev2=Ed Bond&lt;br /&gt;
|Rev2Title=Client Representative&lt;br /&gt;
}}&amp;lt;/div&amp;gt; &lt;br /&gt;
[[Category:{{#var:Client}} FS]]&lt;/div&gt;</summary>
		<author><name>AppaduN</name></author>
	</entry>
	<entry>
		<id>https://calidusassist.adcservices.apteancloud.com/calidus-assist/OBS/index.php?title=FS_318517_SCR22_NHSBT_C-EPOD_Hospital_Own_Transport&amp;diff=1596</id>
		<title>FS 318517 SCR22 NHSBT C-EPOD Hospital Own Transport</title>
		<link rel="alternate" type="text/html" href="https://calidusassist.adcservices.apteancloud.com/calidus-assist/OBS/index.php?title=FS_318517_SCR22_NHSBT_C-EPOD_Hospital_Own_Transport&amp;diff=1596"/>
		<updated>2014-09-22T11:33:47Z</updated>

		<summary type="html">&lt;p&gt;AppaduN: Undo revision 1595 by AppaduN (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;noprint&amp;quot;&amp;gt;&lt;br /&gt;
{{#vardefine:Client|NHS}}&lt;br /&gt;
{{#vardefine:ClientName|NHSBT}}&lt;br /&gt;
{{#vardefine:System|''CALIDUS'' ePOD}}&lt;br /&gt;
{{#vardefine:Doc_Title|Hospital Own Transport}}&lt;br /&gt;
{{#vardefine:Version|0.5}}&lt;br /&gt;
{{#vardefine:Date|22nd July 2014}}&lt;br /&gt;
{{#vardefine:Reference|318517 SCR22}}&lt;br /&gt;
{{#vardefine:Year|2014}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{Doc_Title&lt;br /&gt;
|Client={{#var:ClientName}}&lt;br /&gt;
|System={{#var:System}}&lt;br /&gt;
|Title={{#var:Doc_Title}}&lt;br /&gt;
|Reference=FS {{#var:Reference}}&lt;br /&gt;
|Version={{#var:Version}}&lt;br /&gt;
|Date={{#var:Date}}&lt;br /&gt;
|Year={{#var:Year}}&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TOC --&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;noprint&amp;quot;&amp;gt;&lt;br /&gt;
= Functional Overview  =&lt;br /&gt;
== Client Requirement  ==&lt;br /&gt;
&lt;br /&gt;
The following changes from the Solution Design document are included in this specification:&lt;br /&gt;
* '''SCR-316403-05''' - Hospital Own Transport&lt;br /&gt;
: EPOD Scanning at handover at Depot and delivery into depot from 3rd-party carriers and Hospital Own Transport - Configured via CTMS. This needs to include empties and samples collected from hospitals and all items collected from sessions by TNT. EPOD application development&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Solution Overview ==&lt;br /&gt;
In detail, the following C-EPOD execution functionality was requested:&lt;br /&gt;
&lt;br /&gt;
The process for Hospital Own Transport deliveries is as follows:&lt;br /&gt;
*	Hospital Services will scan all tags to Assets, as normal.&lt;br /&gt;
*	These jobs will be planned onto a Trip assigned to a hospital-related user (i.e. one per hospital or depot), for the carrier &amp;quot;Hospital Own Transport&amp;quot;. The Resource Allocation functionality will assist in choosing an available &amp;quot;driver&amp;quot;. The trip will be allocated a vehicle (it is suggested only one vehicle is created and this same one is used for all trips for this carrier) and set to Accepted.&lt;br /&gt;
*	When giving the jobs to Hospital Own Transport, Hospital Services will log on to the C-EPOD device and select the Job that the user is picking up. C-EPOD will be configured to allow users to select any job out of sequence.&lt;br /&gt;
*	Hospital Services will scan to complete this collection, via the Asset tags. If there are any Buff Tags that have not been scanned to Assets, the device will make this known at this time.&lt;br /&gt;
*	Once all items have been scanned, Hospital Services will obtain the driver's name and Signature on the device, to confirm change of ownership.&lt;br /&gt;
*	C-TMS will automatically complete this job.&lt;br /&gt;
*	No scanning or user entry is required for the delivery job - this will be automatically completed with the collection job.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hospital Own Transport will be bringing samples and/or empty Assets into the network themselves. It was requested that the C-EPOD device prompt the user at the end of the collection if there is anything additional to collect from Hospital Own Transport. This is an Ad Hoc Delivery and is currently unsupported by C-EPOD. This should be completed via the manual Debrief screen in C-TMS.&lt;br /&gt;
&lt;br /&gt;
Assets may be manually marked as in the depot by:&lt;br /&gt;
*	Manually adding an order and adding the assets or samples to the order before confirming the job completed.&lt;br /&gt;
*	Using the Asset Maintenance screen&lt;br /&gt;
*	Waiting until they are scanned again for Tag to Asset (for deliveries) or Ad Hoc Collection later.&lt;br /&gt;
&lt;br /&gt;
To complete this manually (i.e. without C-EPOD), the following steps would be taken:&lt;br /&gt;
*	If offered and accepted, C-TMS should be used to create a planned, empty collection from the hospital back to the depot, and assign this to the trip on which the Delivery is being completed. &lt;br /&gt;
*	When the carrier returns with assets or samples, these can then be actioned as with Hospital Own Transport above.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The process for 3rd-party Carrier deliveries is as follows:&lt;br /&gt;
*	Hospital Services will scan all tags to Assets, as normal.&lt;br /&gt;
*	These jobs will be planned as per the normal process (i.e. sent through the DPS interface or manually planned) onto a Trip and then assigned to a driver code (using resource allocation), for the specific 3rd-party Carrier. Default driver codes may be created, for example, &amp;quot;TNT1&amp;quot;, &amp;quot;TNT2&amp;quot;, etc. The Resource Allocation functionality will assist in choosing an available &amp;quot;driver&amp;quot;. The trip will be allocated a vehicle (it is suggested only one vehicle is created and this same one is used for all trips for this carrier) and set to Accepted.&lt;br /&gt;
*	When giving the items for the jobs to the carrier, Hospital Services will log on to the C-EPOD device with the correct user (the driver code) and select the Job that the carrier is picking up. C-EPOD will be configured to allow users to select any job out of sequence.&lt;br /&gt;
*	Hospital Services will scan to complete this collection, via the Asset tags. If there are any Buff Tags that have not been scanned to Assets, the device will make this known at this time.&lt;br /&gt;
*	Once all items have been scanned, Hospital Services will obtain the driver's name and signature on the device, to confirm change of ownership.&lt;br /&gt;
*	C-TMS will automatically complete this job.&lt;br /&gt;
*	No scanning is required for the delivery job - the debrief will be manually completed when the 3rd-party carrier returns the completed POD documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3rd-party Carriers may be offered the option of a return leg to the depot, to bring back any planned (e.g. sample) or unplanned items (e.g. empty assets). 3rd-party Carriers are also regularly used for Session collections. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The process for 3rd-party Carrier returns to depot is as follows:&lt;br /&gt;
*	The return order (the order to collect at the hospital and return items to the depot) will be created and planned on the trip above, which will have been allocated to the TNT 'driver' above.&lt;br /&gt;
*	When the TNT driver returns to the depot with the collected goods, a user (transport or hospital services) will obtain the paperwork, retrieve the trip that the driver is completing and find out the TNT user. This can be through many different methods, the easiest being:&lt;br /&gt;
**	Through the C-TMS Waterfall screen, if the user has access to C-TMS.&lt;br /&gt;
**	Through the C-EPOD Admin Loads or Users screen, if the user has access to C-EPOD.&lt;br /&gt;
**	Through the C-Portal Arrive/Depart (Airport) screen, if the user has access to C-Portal, or the C-Portal Airport screen is displayed in transport and/or hospital services.&lt;br /&gt;
*	The user will log in to the C-EPOD device using this TNT driver and select the order from the list.&lt;br /&gt;
*	The user will scan any preadvised items for delivery (e.g. Samples) and use a new &amp;quot;Ad Hoc Delivery&amp;quot; process to scan any other items brought in by the TNT driver (e.g. unplanned samples, returned assets, etc). If the TNT driver was planned to collect from multiple hospitals, the process will request the user to enter the hospital from which the items were collected. If single trip are scanned, the process will request the user to identify the asset type.&lt;br /&gt;
*	Once all items have been scanned, Hospital Services will obtain the driver's name and signature on the device, to confirm change of ownership.&lt;br /&gt;
*	C-TMS will automatically complete this job.&lt;br /&gt;
*	The TNT paperwork will then be used to manually debrief the collection from the various hospitals.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The process for 3rd-party Carrier Session collections is as follows:&lt;br /&gt;
*	For sessions, these will already have an order and will be planned on a trip. This will have been set to TNT carrier, resourced (allocated to a TNT driver code and vehicle) and set to status Accepted.&lt;br /&gt;
*	When the TNT driver returns to the depot with the collected goods, a user will obtain the paperwork, retrieve the trip (as above) and find out the TNT driver code assigned to the trip.&lt;br /&gt;
*	The user will log in to the C-EPOD device using this TNT driver code and select the order from the list.&lt;br /&gt;
*	The user will use a new &amp;quot;Ad Hoc Delivery&amp;quot; process to scan any items brought in by the TNT driver (e.g. polar bags of blood, document packs, returned assets, etc). If the TNT driver was planned to collect from multiple sessions, the process will request the user to enter the session location from which the items were collected. If single trip labels are scanned, the process will request the user to identify the asset type.&lt;br /&gt;
*	Once all items have been scanned, the user  will obtain the driver's name and signature on the device, to confirm change of ownership.&lt;br /&gt;
*	C-TMS will automatically complete this job.&lt;br /&gt;
*	The TNT paperwork will then be used to manually debrief the collection from the various sessions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
{{Note|This functionality will be developed in the Android application only and will not be available in the Windows Mobile application.}}&lt;br /&gt;
{{Note|This functionality is dependent on FS 317761 SCR15 C-EPOD Collection Changes.}}&lt;br /&gt;
{{Note|This functionality informs on and is informed by FS 317907 SCR01 C-TMS-C-EPOD Interface.}}&lt;br /&gt;
{{Note|Although it is possible with this solution to combine several trips together onto one trip, for ease of use on the C-EPOD device, rather than planning accurately as described above, this is not recommended for the following reasons:&lt;br /&gt;
* Individual PO cost will not be able to be calculated per trip, only for the trip as planned (i.e. all combined)&lt;br /&gt;
* Consolidation of jobs together at the depot (to provide a single loading task) may compromise the use of the C-EPOD application, if several distinct jobs are to be collected by different TNT drivers within the same collection or delivery timeframe, as these will be consolidated together.&lt;br /&gt;
* Mitigation of the above (i.e. turning off consolidation) would be impractical, as this would result in instructions to load assets multiple times (once for each job with contents in the asset), as the system has been instructed not to consolidate.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- NEW PAGE --&amp;gt; &lt;br /&gt;
= Set-up  =&lt;br /&gt;
&lt;br /&gt;
== Pre-requisites  ==&lt;br /&gt;
* A working {{#var:System}} system.&lt;br /&gt;
&lt;br /&gt;
=== C-TMS Interface Changes ===&lt;br /&gt;
* C-EPOD Configuration per Carrier, at certain location types. Broadly, this would be configured to send tasks to C-EPOD at depots, not at customer locations (hospitals), specifying a different job group.&lt;br /&gt;
* For HOT, Delivery jobs out to the hospital will not be sent to C-EPOD. The collections (loading) at the depot will, however.&lt;br /&gt;
* For 3PC, Delivery and Collection jobs at the hospital will not be sent to C-EPOD. Collections (loading) and Deliveries (unloading) at the depot will, however. &lt;br /&gt;
* These unloading jobs at the depot will include the 'from' address information.&lt;br /&gt;
* A configuration flag will be held against the carrier type, to indicate this sending of information. &lt;br /&gt;
* Configuration flags will also be created and held against the carrier, to control whether the paired jobs are automatically completed (i.e. HOT deliveries to hospital) or not (i.e. TNT deliveries that will be manually debriefed later from the paperwork returned).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Menu Structure  ==&lt;br /&gt;
None&lt;br /&gt;
&lt;br /&gt;
== Data  ==&lt;br /&gt;
* A site record will be created for each 3rd-party carrier or for a single hospital own transport carrier.&lt;br /&gt;
* The standard Job Groups will &lt;br /&gt;
* Only one vehicle per site will be created.&lt;br /&gt;
* No vehicle checks are required.&lt;br /&gt;
* Multiple drivers will be created for the 3rd-party Carrier, to allow multiple trips to be actioned per day.&lt;br /&gt;
* Multiple drivers will be created for the Hospital Own Transport, one per hospital or depot.&lt;br /&gt;
* The jobs group created for other carriers will also be created for these sites and be configured similarly, except for:&lt;br /&gt;
** allow drivers to select any incoming job from the job list.&lt;br /&gt;
** prompt for signature on collections and deliveries.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- NEW PAGE --&amp;gt; &lt;br /&gt;
= Functional Description  =&lt;br /&gt;
== Database/DAL changes ==&lt;br /&gt;
* New flag Ad Hoc Delivery&lt;br /&gt;
Table EPOD_SITE requires the following modifications:&lt;br /&gt;
* EPL_AD_HOC_DELIVERY - nvarchar(1), NOT NULL DEFAULT 'N', values 'Y' or 'N'.&lt;br /&gt;
&lt;br /&gt;
Existing packages will be modified to allow the creating, editing and selecting of the new flag, including but not limited to:&lt;br /&gt;
*EPOD_SITE_INSERT&lt;br /&gt;
*EPOD_SITE_SELECT&lt;br /&gt;
*EPOD_SITE_SELECT_UPDATED_DATA&lt;br /&gt;
*EPOD_SITE_UPDATE&lt;br /&gt;
The existing EPOD_SITE DAL object will be changed to:&lt;br /&gt;
* Read the new flag&lt;br /&gt;
{{Note}} It is not necessary to add this flag as a search-able item. However, if allowing this keeps the packages and DAL objects standard in design, then this can also be done, within the DAL and the packages.&lt;br /&gt;
&lt;br /&gt;
The XML Export of EPOD_SITE records will look as follows: &lt;br /&gt;
  &amp;lt;EPOD_SITE&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SITE_ID&amp;gt;&amp;lt;/EPL_SITE_ID&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_DESCRIPTION&amp;gt;&amp;lt;/EPL_DESCRIPTION&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SERVICE_POD_FORMAT&amp;gt;&amp;lt;/EPL_SERVICE_POD_FORMAT&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_DELIVERY_POD_FORMAT&amp;gt;&amp;lt;/EPL_DELIVERY_POD_FORMAT&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_COLLECTION_POD_FORMAT&amp;gt;&amp;lt;/EPL_COLLECTION_POD_FORMAT&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SERVICE_ACTIVITIES&amp;gt;&amp;lt;/EPL_SERVICE_ACTIVITIES&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SERVICE_PREWORK&amp;gt;&amp;lt;/EPL_SERVICE_PREWORK&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SERVICE_INFO&amp;gt;&amp;lt;/EPL_SERVICE_INFO&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SERVICE_PRODUCTS&amp;gt;&amp;lt;/EPL_SERVICE_PRODUCTS&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SERVICE_MC_REF&amp;gt;&amp;lt;/EPL_SERVICE_MC_REF&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SERVICE_DIAGNOSIS&amp;gt;&amp;lt;/EPL_SERVICE_DIAGNOSIS&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SERVICE_POSTWORK&amp;gt;&amp;lt;/EPL_SERVICE_POSTWORK&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_AUTO_COMPLETE_EMAIL&amp;gt;&amp;lt;/EPL_AUTO_COMPLETE_EMAIL&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_AD_HOC_COLLECTION&amp;gt;&amp;lt;/EPL_AD_HOC_COLLECTION&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_DEL_DRIVER_SIGN&amp;gt;&amp;lt;/EPL_DEL_DRIVER_SIGN&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_COL_DRIVER_SIGN&amp;gt;&amp;lt;/EPL_COL_DRIVER_SIGN&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_DELIVERY_PAYMENT&amp;gt;&amp;lt;/EPL_DELIVERY_PAYMENT&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_DOCUMENT_PHOTO&amp;gt;&amp;lt;/EPL_DOCUMENT_PHOTO&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_CONTAINER_ONLY&amp;gt;&amp;lt;/EPL_CONTAINER_ONLY&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_PDA_DIS_JOB_CODE&amp;gt;&amp;lt;/EPL_PDA_DIS_JOB_CODE&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_LINKED_C_D&amp;gt;&amp;lt;/EPL_LINKED_C_D&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_METRICS_ENTRY&amp;gt;&amp;lt;/EPL_METRICS_ENTRY&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_NOTES&amp;gt;&amp;lt;/EPL_NOTES&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_FORCED_ENTRY&amp;gt;&amp;lt;/EPL_FORCED_ENTRY&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SYSTEM_TYPE&amp;gt;&amp;lt;/EPL_SYSTEM_TYPE&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_UPDATE_FUNCTIONS&amp;gt;&amp;lt;/EPL_UPDATE_FUNCTIONS&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_VEHICLE_CHECK_CONFIG&amp;gt;&amp;lt;/EPL_VEHICLE_CHECK_CONFIG&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_JOB_LIST_CFG&amp;gt;&amp;lt;/EPL_JOB_LIST_CFG&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_ARRIVAL_FLAG&amp;gt;&amp;lt;/EPL_ARRIVAL_FLAG&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SCAN_ERROR_FLAG&amp;gt;&amp;lt;/EPL_SCAN_ERROR_FLAG&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_LAST_CHANGED_DATE&amp;gt;&amp;lt;/EPL_LAST_CHANGED_DATE&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_LAST_CHANGED_TIME&amp;gt;&amp;lt;/EPL_LAST_CHANGED_TIME&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_RESEQUENCE&amp;gt;&amp;lt;/EPL_RESEQUENCE&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_CLAUSE_DELIVERY&amp;gt;&amp;lt;/EPL_CLAUSE_DELIVERY&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_JOB_STATUS&amp;gt;&amp;lt;/EPL_JOB_STATUS&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_CONSOLIDATION&amp;gt;&amp;lt;/EPL_CONSOLIDATION&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_VEHICLE_STOCK_FLAG&amp;gt;&amp;lt;/EPL_VEHICLE_STOCK_FLAG&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SCAN_AT_VEHICLE&amp;gt;&amp;lt;/EPL_SCAN_AT_VEHICLE&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_PDA_FULL_ADDRESSES&amp;gt;&amp;lt;/EPL_PDA_FULL_ADDRESSES&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_JOB_TRANSFER&amp;gt;&amp;lt;/EPL_JOB_TRANSFER&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_NEXT_JOB_FLAG&amp;gt;&amp;lt;/EPL_NEXT_JOB_FLAG&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_RETURNS_DEPOT_FLAG&amp;gt;&amp;lt;/EPL_RETURNS_DEPOT_FLAG&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SCANNING_FLAG&amp;gt;&amp;lt;/EPL_SCANNING_FLAG&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_AUTOLOGIN_FLAG&amp;gt;&amp;lt;/EPL_AUTOLOGIN_FLAG&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_ADHOC_ANYTIME_CONFIG&amp;gt;&amp;lt;/EPL_ADHOC_ANYTIME_CONFIG&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_AUDIT_LOGIN_FLAG&amp;gt;&amp;lt;/EPL_AUDIT_LOGIN_FLAG&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_TRAILER_VEHICLE_FLAG&amp;gt;&amp;lt;/EPL_TRAILER_VEHICLE_FLAG&amp;gt;&lt;br /&gt;
    ''&amp;lt;EPL_AD_HOC_DELIVERY&amp;gt;&amp;lt;/EPL_AD_HOC_DELIVERY&amp;gt;''&lt;br /&gt;
  &amp;lt;/EPOD_SITE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
Table EPOD_JOB_GROUP requires the following modification:&lt;br /&gt;
*    EPL_SCAN_AT_VEHICLE - nvarchar(1), NOT NULL DEFAULT 'N', values 'Y' or 'N'. &lt;br /&gt;
&lt;br /&gt;
Existing packages will be modified to allow the creating, editing and selecting of the new flag, including but not limited to:&lt;br /&gt;
*    EPOD_JOB_GROUP_INSERT&lt;br /&gt;
*    EPOD_JOB_GROUP_SEARCH&lt;br /&gt;
*    EPOD_JOB_GROUP_SELECT&lt;br /&gt;
*    EPOD_JOB_GROUP_SELECT_UPDATED_DATA&lt;br /&gt;
*    EPOD_JOB_GROUP_UPDATE &lt;br /&gt;
&lt;br /&gt;
The existing EPOD_JOB_GROUP DAL object will be changed to:&lt;br /&gt;
*    Export the new flag in XML requests&lt;br /&gt;
*    Read the new flag &lt;br /&gt;
&lt;br /&gt;
{{Note}} It is not necessary to add this flag as a searchable item. However, if allowing this keeps the packages and DAL objects standard in design, then this can also be done, within the DAL and the packages.&lt;br /&gt;
&lt;br /&gt;
Example: The XML Export of EPOD_JOB_GROUP records will now look as follows:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;EPOD_JOB_GROUP&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_SITE_ID&amp;gt;&amp;lt;/EPL_SITE_ID&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_JOB_GROUP&amp;gt;&amp;lt;/EPL_JOB_GROUP&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_DESCRIPTION&amp;gt;&amp;lt;/EPL_DESCRIPTION&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_SERVICE_POD_FORMAT&amp;gt;&amp;lt;/EPL_SERVICE_POD_FORMAT&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_DELIVERY_POD_FORMAT&amp;gt;&amp;lt;/EPL_DELIVERY_POD_FORMAT&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_COLLECTION_POD_FORMAT&amp;gt;&amp;lt;/EPL_COLLECTION_POD_FORMAT&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_SERVICE_ACTIVITIES&amp;gt;&amp;lt;/EPL_SERVICE_ACTIVITIES&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_SERVICE_PREWORK&amp;gt;&amp;lt;/EPL_SERVICE_PREWORK&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_SERVICE_INFO&amp;gt;&amp;lt;/EPL_SERVICE_INFO&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_SERVICE_PRODUCTS&amp;gt;&amp;lt;/EPL_SERVICE_PRODUCTS&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_SERVICE_MC_REF&amp;gt;&amp;lt;/EPL_SERVICE_MC_REF&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_SERVICE_DIAGNOSIS&amp;gt;&amp;lt;/EPL_SERVICE_DIAGNOSIS&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_SERVICE_POSTWORK&amp;gt;&amp;lt;/EPL_SERVICE_POSTWORK&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_AUTO_COMPLETE_EMAIL&amp;gt;&amp;lt;/EPL_AUTO_COMPLETE_EMAIL&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_AD_HOC_COLLECTION&amp;gt;&amp;lt;/EPL_AD_HOC_COLLECTION&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_DEL_DRIVER_SIGN&amp;gt;&amp;lt;/EPL_DEL_DRIVER_SIGN&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_COL_DRIVER_SIGN&amp;gt;&amp;lt;/EPL_COL_DRIVER_SIGN&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_DEL_CUST_SIGN&amp;gt;&amp;lt;/EPL_DEL_CUST_SIGN&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_COL_CUST_SIGN&amp;gt;&amp;lt;/EPL_COL_CUST_SIGN&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_SIGN_CHECK_LBL&amp;gt;&amp;lt;/EPL_SIGN_CHECK_LBL&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_DELIVERY_PAYMENT&amp;gt;&amp;lt;/EPL_DELIVERY_PAYMENT&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_DOCUMENT_PHOTO&amp;gt;&amp;lt;/EPL_DOCUMENT_PHOTO&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_CONTAINER_ONLY&amp;gt;&amp;lt;/EPL_CONTAINER_ONLY&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_METRICS_ENTRY&amp;gt;&amp;lt;/EPL_METRICS_ENTRY&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_NOTES&amp;gt;&amp;lt;/EPL_NOTES&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_TNCS&amp;gt;&amp;lt;/EPL_TNCS&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_LAST_CHANGED_DATE&amp;gt;&amp;lt;/EPL_LAST_CHANGED_DATE&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_LAST_CHANGED_TIME&amp;gt;&amp;lt;/EPL_LAST_CHANGED_TIME&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_JOB_STATUS&amp;gt;&amp;lt;/EPL_JOB_STATUS&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_CONSOLIDATION&amp;gt;&amp;lt;/EPL_CONSOLIDATION&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_SCAN_AT_VEHICLE&amp;gt;&amp;lt;/EPL_SCAN_AT_VEHICLE&amp;gt;&lt;br /&gt;
   ''&amp;lt;EPL_AD_HOC_DELIVERY&amp;gt;&amp;lt;/EPL_AD_HOC_DELIVERY&amp;gt;''&lt;br /&gt;
 &amp;lt;/EPOD_JOB_GROUP&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The existing database package EPOD_SETUP will be modified to ensure that the new flags are defaulted appropriately. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Import/Export Messages ==&lt;br /&gt;
The PDA web request server (Calidus_ePOD.asmx, both the XML and JSON versions) will be modified to include the new Site and Job Group flags in the LOGON_REQUEST message processor (through the LOGON_RESPONSE message).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Admin Changes ==&lt;br /&gt;
The Job Group and Site maintenance screens (job_group.aspx and site_header.aspx respectively) will be modified to allow the system to be configured for:&lt;br /&gt;
*  EPL_AD_HOC_DELIVERY, a checkbox, labelled as &amp;quot;AD Hoc Delivery&amp;quot;, defaulting to 'N' (Disabled). &lt;br /&gt;
This configuration field will be added to the PDA tab of these screens.&lt;br /&gt;
&lt;br /&gt;
{{Note}} Ensure that the new check-boxes line up with the existing fields. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== PDA Changes ==&lt;br /&gt;
=== Database/DAL changes ===&lt;br /&gt;
A new column will be added to the EPOD_SITE and EPOD_JOB_GROUP tables:&lt;br /&gt;
*    EPL_AD_HOC_DELIVERY - This will be a one character field with of Values 'Y' and 'N'. The default value is 'N'. &lt;br /&gt;
This new field should be added to every procedure as part of the PDA_SITE and PDA_JOB_GROUP DAL objects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Login ===&lt;br /&gt;
{{Note}} No changes are required to the Login process - this section described how the process will work when configured as described.&lt;br /&gt;
&lt;br /&gt;
The device will be configured for the Carrier (i.e. TNT or the hospital) as the site.&lt;br /&gt;
&lt;br /&gt;
The transport user will log on using the carrier driver assigned to the trip (either found through C-TMS or preset to a single default value), select the default vehicle and enter the password.&lt;br /&gt;
&lt;br /&gt;
This will retrieve the list of jobs on the load assigned to that user and display them on the job list.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Job List ===&lt;br /&gt;
{{Note}} No changes are required to the Job List process - this section described how the process will work when configured as described.&lt;br /&gt;
&lt;br /&gt;
Only the jobs on the current trip will be shown. The Job List will be configured to allow the user to select any of the jobs on that load, and also to show all jobs singly (i.e. not consolidated together).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Delivery Process ===&lt;br /&gt;
When a Delivery job (i.e. in this case, a depot unloading task) is selected from the Job List and started from the Job Details form, the Delivery screen will show.&lt;br /&gt;
&lt;br /&gt;
This will be modified to display the ''Ad Hoc'' tab in a similar way to the &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Note}} The existing ''Items'' tab is there to show all preadvised items - unplanned delivery of items will be shown on a different tab (described later). The Items (Container) tab will only be shown if there are items preadvised for the jobs. If there are none, this tab will not be present.&lt;br /&gt;
&lt;br /&gt;
{{Note}} The '''Complete''' button should only appear on the ''Job Details'' tab if any of the following conditions are true:&lt;br /&gt;
&lt;br /&gt;
*    There are no preadvised items to deliver.&lt;br /&gt;
*    The application is configured for Ad Hoc Delivery (new Job Group flag EPL_AD_HOC_DELIVERY is enabled). &lt;br /&gt;
&lt;br /&gt;
When all preadvised items have been scanned as delivered (or marked as cancelled), the application currently recognises this and automatically moves on to the Job Completion stage. This will not occur if this is a delivery job, and the application has been configured for Ad Hoc Delivery (EPL_AD_HOC_DELIVERY is enabled). In this case, the device will simply display the empty items list (as there are no more items to scan) and wait, as there may be unplanned items to scan as part of the Ad Hoc Delivery process (in the next section). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ad Hoc Delivery Tab ===&lt;br /&gt;
This tab will have functionality extremely similar to the Ad Hoc Collection tab - this functionality is re-stated here, with any exceptions noted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Ad Hoc Delivery process allows the driver to specify the items delivered, at the point of Delivery, without the specific items for those Deliveries being planned in advance. This appears as a separate tab on the PDA within the Delivery process, labelled as &amp;quot;Ad Hoc&amp;quot; when this feature is enabled (through the flag EPL_ADHOC_DELIVERY for Delivery-type jobs only). This tab will be to the right of the existing ''Containers'' and ''Products'' tabs, but before the ''Notes'' tab.&lt;br /&gt;
&lt;br /&gt;
The layout of the tab will be almost identical to the existing ''Items (Containers)'' tab. The following are sample screen layouts for the features of the tab. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=260px heights=400px perrow=2 caption=&amp;quot;Ad Hoc Delivery Prototype Screen-shots&amp;quot;&amp;gt;&lt;br /&gt;
File:FS_317761_AdHoc1.PNG|''Unplanned item details''&lt;br /&gt;
File:FS_317761_AdHoc2.PNG|''Ad Hoc item list''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note}} These are the Ad Hoc Collection prototype screenshots.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The tab will allow items to be entered in exactly the same way as the ''Items (Containers)'' tab:&lt;br /&gt;
* Through a &amp;quot;Scan Container&amp;quot; text box and '''Deliver''' button.&lt;br /&gt;
* Through the use of the built in Camera Scanner feature, through the '''Scan''' button.&lt;br /&gt;
Note that there is no method of entry through the table (i.e. pressing or long-pressing on the table row will show no ''Deliver'' option).&lt;br /&gt;
&lt;br /&gt;
This table of items on the screen will start empty - as items are scanned, these will be added to the table. {{Note}} Developer Note: The table should be built to the same scrolling view mechanism as the Items (Container) table on that tab.&lt;br /&gt;
&lt;br /&gt;
Like the ''Items (Containers)'' tab, this tab will only allow asset formats to be scanned in the formats detailed in the Scanning section - any invalid formats will be discarded with a transient message displayed on the screen. &lt;br /&gt;
&lt;br /&gt;
The tab will check whether the scanned item is an item that has been preadvised for the job. If so, and the item has already been confirmed as received, a transient message will inform the driver &amp;quot;This item already scanned&amp;quot;. If this preadvised item has not yet been scanned for Delivery, the tab will interrupt the scanning (if continuous scanning is enabled) and will display an alert &amp;quot;Ad Hoc Delivery&amp;quot;/&amp;quot;Preadvised items must be scanned on the Items tab&amp;quot;. If this preadvised item has been marked as cancelled on the preadvised list, the tab will interrupt the scanning (if continuous scanning is enabled) and will display an alert &amp;quot;Ad Hoc Delivery&amp;quot;/&amp;quot;Preadvised item has been cancelled and cannot be delivered.&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
The tab will check whether the scanned item has already been scanned by the Ad Hoc Delivery process. If so, a transient message will inform the driver &amp;quot;This item already scanned&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The different types of Asset will be dealt with differently: &lt;br /&gt;
*	Fixed (Permanent) Assets IDs will always be associated with a particular Asset Type in C-TMS, so the application will not require the driver to confirm the Asset Type for a Fixed Asset. These will simply be added directly to the table.&lt;br /&gt;
*	Single Trip Assets must have an asset type entered.&lt;br /&gt;
Additionally, the application will check to see if this collection is part of a consolidation (multiple delivery jobs) with multiple collection destinations. Note that this is completed differently to the Ad Hoc Collection screen, in that the device will check for the address from the Alternate address sent to the device from the server, rather than from a linked job (that will not have been sent to C-EPOD from C-TMS). If the addresses found are different, then the driver must be prompted to enter a destination location. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After these checks are made on a scanned Item ID, and further entry is required, the application will stop the scanning process (if continuous scanning is in use) and display a pop-up data entry screen. This will have the following fields:&lt;br /&gt;
* Header label, showing the scanned Item ID.&lt;br /&gt;
* Location label and drop-down list. These will only be shown if there are multiple collection locations. If this is the case, the location names will be listed in a drop-down list, forcing the driver to select one. The default entry on the drop-down list will be &amp;quot;Select a Location&amp;quot;. &lt;br /&gt;
* Type label and drop-down list. These will only be shown if the item scanned is a single-trip format Item ID. If this is the case, all DUs (Asset Types) will be displayed in a drop-down list, forcing the driver to select one. The default entry on the drop-down list will be &amp;quot;Select a Type&amp;quot;. The list will be built from all DU-type codes on the Reason Codes table (EPL_DESCRIPTION from EPOD_REASON_CODE where EPL_REASON_TYPE = &amp;quot;DU&amp;quot;).&lt;br /&gt;
* A '''Cancel''' button. When pressed, this closes the pop-up data entry screen. The scanned ID will be discarded and not added to the Ad Hoc Items list.&lt;br /&gt;
* A '''Save''' button. When pressed, this button will validate that all required data is entered. If not, the screen will display a pop-up alert showing the item that has not been entered (&amp;quot;Ad Hoc Additional Details&amp;quot;/&amp;quot;You must select a (Field)&amp;quot;, where (Field) is replaced with the data type that has not been entered, i.e. &amp;quot;Type&amp;quot; or &amp;quot;Location&amp;quot;). When this alert is cleared, the user will be returned to the pop-up entry screen. If there are no errors found when clicking the '''Save''' button, the pop-up data entry screen will be closed and the item will be added to the Ad Hoc Items list.&lt;br /&gt;
&lt;br /&gt;
If items have been scanned and need to be added to the list, they will be added as a new row on the EPOD_CONTAINER table, as follows:&lt;br /&gt;
* EPL_JOB_ID - This will be from the job being scanned. If there are consolidated jobs with the same (or linked) destinations, this will be the Job ID of the first job. If there are consolidated jobs with different destinations, this will be the Job ID of the job with the destination as selected by the driver in the pop-up details entry screen&lt;br /&gt;
* EPL_CONTAINER_ID - As scanned, minus the leading barcode application identifiers (&amp;quot;00&amp;quot; or &amp;quot;8004&amp;quot;)&lt;br /&gt;
* EPL_CONTAINER_PACKAGE_CODE - If this is a permanent Asset barcode (&amp;quot;8004&amp;quot;), this will be left blank. If not, this will be the code of the asset type selected by the driver in the pop-up details entry screen (EPL_REASON_CODE).&lt;br /&gt;
* EPL_CONTAINER_PACKAGE_DESC - If this is a permanent Asset barcode (&amp;quot;8004&amp;quot;), this will be left blank. If not, this will be the description of the asset type selected by the driver in the pop-up details entry screen (EPL_DESCRIPTION).&lt;br /&gt;
* EPL_STATUS - &amp;quot;C&amp;quot;&lt;br /&gt;
* EPL_TYPE - &amp;quot;A&amp;quot;, to indicate that this is an Ad Hoc Delivery&lt;br /&gt;
* EPL_SEQUENCE - Set as 3-digit numeric counting from 001, incrementing with each item added to this screen.&lt;br /&gt;
All other items will be blank or added as normal.&lt;br /&gt;
&lt;br /&gt;
These records will be added as a new row at the top of the list, by retrieving all records in reverse sequence order (through the PDA_CONTAINER DAL function SelectAllContainersForJob with parameter p_blnAdHoc set to true). This will return only scanned Ad Hoc items, in reverse sequence. The details displayed will differ, depending on the information delivered:&lt;br /&gt;
* Item ID - EPL_CONTAINER_ID&lt;br /&gt;
* Type - EPL_CONTAINER_PACKAGE_DESC&lt;br /&gt;
* Location - EPL_CUSTOMER_NAME of EPOD_JOB &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pressing or long-pressing on an item in this Ad Hoc table will allow the driver to remove an item from the Delivery. The application will display a pop-up alert &amp;quot;Ad Hoc Delivery&amp;quot;/&amp;quot;Do you want to remove this item?&amp;quot; with options &amp;quot;Yes&amp;quot; and &amp;quot;No&amp;quot;. Choosing &amp;quot;No&amp;quot; will leave the item on the list. Choosing &amp;quot;Yes&amp;quot; will delete the item from the scanned containers and refresh the list without this item.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A '''Complete''' button should be available on the ''Job Details'' tab, to allow the users to manually indicate that all items have now been delivered. Clicking this will instigate the Job Completion stage. If at this time no items have been scanned as part of the Ad Hoc Scanning tab for this Delivery (and Ad Hoc Delivery is enabled), a pop-up alert will be displayed, showing &amp;quot;Unplanned Items&amp;quot;/&amp;quot;Please confirm that there are no unplanned items to scan&amp;quot;, with options &amp;quot;Confirm&amp;quot; and &amp;quot;Cancel&amp;quot;. Choosing &amp;quot;Confirm&amp;quot; will move on to Job Completion, whereas &amp;quot;Cancel&amp;quot; will return to the Delivery process and activate the ''Ad Hoc'' scanning tab.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- MEDIA LANDSCAPE YES --&amp;gt;&lt;br /&gt;
= Appendix A: TEST PLAN  =&lt;br /&gt;
&lt;br /&gt;
{{TestPlan_Header&lt;br /&gt;
|Title={{#var:Doc_Title}}&lt;br /&gt;
|Log={{#var:Reference}}&lt;br /&gt;
|Description=Test the C-EPOD changes made for NHSBT.&lt;br /&gt;
|MenuAccess=None&lt;br /&gt;
|Prerequisites=Data set up as per Data Setup section; Note that individual setup information is provided for each test area.&lt;br /&gt;
|Objective=To test that: Admin can view and maintain configuration for the changes; the EPOD Client application can perform Ad Hoc Deliveries.&lt;br /&gt;
}} &lt;br /&gt;
{{ #vardefine: Cycle | 0 }}{{ #vardefine: SubCycle | 0 }}&lt;br /&gt;
{{TestPlan_CycleHeader&lt;br /&gt;
|Cycle={{ #vardefineecho: Cycle | {{ #expr: {{ #var: Cycle }} + 1 }} }}{{ #vardefine: SubCycle | {{ #var: Cycle }} }}&lt;br /&gt;
|Title=Admin Tests&lt;br /&gt;
|Notes=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Enter the Site Maintenance screen. Ensure the new fields are present and can be set and maintained.&lt;br /&gt;
|Result=New fields can be set, changed and saved:&lt;br /&gt;
* New checkbox &amp;quot;Ad Hoc Delivery&amp;quot;&lt;br /&gt;
The tabs are well organised, making good use of space.	 	 &lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Enter the Job Group Maintenance screen. Ensure the new fields are present and can be set and maintained.&lt;br /&gt;
|Result=New fields can be set, changed and saved:&lt;br /&gt;
* New checkbox &amp;quot;Ad Hoc Delivery&amp;quot;&lt;br /&gt;
The tabs are well organised, making good use of space.	 	 &lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_CycleFooter}}&lt;br /&gt;
&lt;br /&gt;
{{TestPlan_CycleHeader&lt;br /&gt;
|Cycle={{ #vardefineecho: Cycle | {{ #expr: {{ #var: Cycle }} + 1 }} }}{{ #vardefine: SubCycle | {{ #var: Cycle }} }}&lt;br /&gt;
|Title=PDA Ad Hoc Delivery.&lt;br /&gt;
|Notes=Create a load with several deliveries from hospitals and deliveries to the depot and assign to the carrier, user and vehicle. Ensure that there are planned items on some deliveries and deliveries.&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Log in to the application and pick up the load.&lt;br /&gt;
|Result=The ''''Job List'''' is displayed:&lt;br /&gt;
* No deliveries at the hospitals should be shown.&lt;br /&gt;
* Deliveries to the depot should not be consolidated, and labelled as Unloading jobs.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Select the second unloading job and start it at the Job Details page.&lt;br /&gt;
|Result=No error will be displayed; the job may be started and the delivery screen shown.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Click '''Start Job'''.&lt;br /&gt;
|Result=The device checks for any changes to the jobs. When checked, the ''''Delivery'''' screen is displayed:&lt;br /&gt;
* There is a '''Complete''' button.&lt;br /&gt;
* There are 3 tabs: ''Job Details''; ''Items''; ''Ad Hoc''.&lt;br /&gt;
* The jobs are shown as &amp;quot;In Progress&amp;quot; in Admin.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Click the '''Complete''' button.&lt;br /&gt;
|Result=An error should be displayed showing that there are still items awaiting scanning.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Switch to the ''Items'' tab. Cancel one of the items and confirm the exception with a reason code.&lt;br /&gt;
|Result=The Items list is displayed with only one item on it.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Switch to the ''Ad Hoc'' tab&lt;br /&gt;
|Result=The Items list is displayed (with nothing in it). The screen is laid out as expected.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Using the provided text box, enter &amp;quot;invalid&amp;quot;. Click ''Deliver''.&lt;br /&gt;
|Result=A transient error should be displayed, showing that the format is invalid.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Enter &amp;quot;8004invalid&amp;quot;. Click ''Deliver''.&lt;br /&gt;
|Result=A transient error should be displayed, showing that the format is invalid.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Enter &amp;quot;00invalidlength&amp;quot;. Click '''Deliver'''.&lt;br /&gt;
|Result=A transient error should be displayed, showing that the format is invalid.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Enter &amp;quot;00invalidformat00000&amp;quot;. Click '''Deliver'''.&lt;br /&gt;
|Result=A transient error should be displayed, showing that the format is invalid.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Enter a valid temporary Asset ID. Click ''Deliver''.&lt;br /&gt;
|Result=The pop-up ''''Details'''' window should be shown, prompting for Type only. The type list should show all valid Asset types.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Click '''Cancel'''&lt;br /&gt;
|Result=The ''Ad Hoc'' tab should be shown. The item should not be added to the list.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Enter a valid temporary Asset ID. Click ''Deliver''. Click '''Save''' in the pop-up up ''''Details'''' window.&lt;br /&gt;
|Result=An error should be displayed, asking for Type details.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Select a type. Click '''Save'''&lt;br /&gt;
|Result=The item should be added to the list, showing the selected type. The format of the list row should be as expected.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Press the '''Scan''' button.&lt;br /&gt;
|Result=A Scan reticule should be displayed, allowing barcodes to be scanned.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Repeat the item tests for invalid formats and items above (&amp;quot;invalid&amp;quot;, &amp;quot;8004invalid&amp;quot;, &amp;quot;00invalidlength&amp;quot;, &amp;quot;00invalidformat00000&amp;quot;)&lt;br /&gt;
|Result=Each time these items are scanned, a transient error should display, as previously. The Scan reticule should stay open.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Scan an invalid barcode type (for example, a CODE 39 or EAN-8 or EAN-13 barcode).&lt;br /&gt;
|Result=A transient error should display, showing that the format is invalid. The Scan reticule should stay open.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Scan the cancelled item from the planned items list.&lt;br /&gt;
|Result=The Scan reticule should be closed and the ''Ad Hoc'' tab be displayed, showing a pop-up error, saying that the item must not be Delivered, as it has already been cancelled.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Press the '''Scan''' button. Scan the remaining planned item from the planned items list.&lt;br /&gt;
|Result=The Scan reticule should be closed and the ''Ad Hoc'' tab be displayed, showing a pop-up error, saying that the item must be Delivered through the Items tab.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Switch to the ''Items'' tab and scan the item. &lt;br /&gt;
|Result=A transient message should be displayed, showing that the item has been Delivered. The Scan reticule should be closed and the ''Items'' tab be displayed, with no items on the Items list.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Switch to the ''Ad Hoc'' tab and scan the same item. &lt;br /&gt;
|Result=A transient message should be displayed, showing that the item has already been Delivered. The Scan reticule should stay open.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Scan an item that is already on the ''Ad Hoc'' items list.&lt;br /&gt;
|Result=A transient message should be displayed, showing that the item has already been Delivered. The Scan reticule should stay open.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Close the Scan reticule.&lt;br /&gt;
|Result=The ''Ad Hoc'' tab and Items list should be displayed, showing the items scanned, with the latest at the top.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Click on the top item.&lt;br /&gt;
|Result=An alert should ask whether the item should be removed.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Click '''No'''.&lt;br /&gt;
|Result=The ''Ad Hoc'' tab and Items list should be displayed again, with item selected still on the list.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Click on the top item. When prompted, click '''Yes'''.&lt;br /&gt;
|Result=The Items list should be displayed again. The item selected should be removed from the list.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Move to the ''Job Details'' tab and press the '''Complete''' button.&lt;br /&gt;
|Result=The signature should be prompted for.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Complete the signature.&lt;br /&gt;
|Result=A transient message should display that the job is complete. &lt;br /&gt;
The jobs will be completed in Admin.&lt;br /&gt;
The Job list should be redisplayed.&lt;br /&gt;
The Unloading task will be removed from the Job List. &lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a trip with consolidated deliveries back to the depot, from different collection locations. Log in to the C-EPOD device, start the job and move to the ''Ad Hoc Items'' tab. Enter a valid permanent Asset ID. Click ''Deliver''.&lt;br /&gt;
|Result=The pop-up ''''Details'''' window should be shown, prompting for Location only. The Location list should show a list of all unique collection locations for the orders.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Click '''Cancel'''&lt;br /&gt;
|Result=The ''Ad Hoc'' tab should be shown. The item should not be added to the list.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Enter a valid permanent Asset ID. Click ''Deliver''. Click '''Save''' in the pop-up up ''''Details'''' window.&lt;br /&gt;
|Result=An error should be displayed, asking for Location details.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Select a Location. Click '''Save'''&lt;br /&gt;
|Result=The item should be added to the list, showing the selected location. The format of the list row should be as expected.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Enter a valid single trip Asset ID. Click ''Deliver''.&lt;br /&gt;
|Result=The pop-up ''''Details'''' window should be shown, prompting for Type and Location. The type list should show all valid Asset types. The Location list should show a list of all unique collection locations for the orders.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Click '''Cancel'''&lt;br /&gt;
|Result=The ''Ad Hoc'' tab should be shown. The item should not be added to the list.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Enter a valid temporary Asset ID. Click ''Deliver''. Click '''Save''' in the pop-up up ''''Details'''' window.&lt;br /&gt;
|Result=An error should be displayed, asking for Type and Location details.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Select a type. Click '''Save'''&lt;br /&gt;
|Result=An error should be displayed, asking for Location details.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Select a Location. Click '''Save'''&lt;br /&gt;
|Result=The item should be added to the list, showing the selected type and location. The format of the list row should be as expected.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_CycleFooter}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- MEDIA LANDSCAPE NO --&amp;gt; &lt;br /&gt;
{{Doc_Appendix&lt;br /&gt;
|Appendix=B&lt;br /&gt;
|Estimate=Y&lt;br /&gt;
|Glossary=EPOD&lt;br /&gt;
|Ref1=NHSBT High Level Solution Design v2.0.doc&lt;br /&gt;
|RefV1=2.0&lt;br /&gt;
|RefDate1=21/05/2014&lt;br /&gt;
|Ref2=FS 317907 SCR01 EPOD-TMS Interface &lt;br /&gt;
|RefV2=&amp;amp;nbsp;&lt;br /&gt;
|RefDate2=&amp;amp;nbsp;&lt;br /&gt;
|Ref3=FS 317761 SCR15 NHSBT C-EPOD Collection Changes &lt;br /&gt;
|RefV3=0.4&lt;br /&gt;
|RefDate3=04/06/2014&lt;br /&gt;
|REQ=0&lt;br /&gt;
|EST=0&lt;br /&gt;
|FS=0.75&lt;br /&gt;
|TS=0&lt;br /&gt;
|DEV=3&lt;br /&gt;
|ST=0.5&lt;br /&gt;
|IMP=0&lt;br /&gt;
|EREQ=0&lt;br /&gt;
|EEST=0&lt;br /&gt;
|EFS=0.75&lt;br /&gt;
|ETS=0&lt;br /&gt;
|EDEV=3&lt;br /&gt;
|ESTT=0.5&lt;br /&gt;
|EIMP=0&lt;br /&gt;
|Client={{#var:Client}}&lt;br /&gt;
|Year={{#var:Year}}&lt;br /&gt;
|FSEST=Y&lt;br /&gt;
|FOC=N&lt;br /&gt;
|Rev1=Julie Scott&lt;br /&gt;
|Rev1Title=Project Manager&lt;br /&gt;
|Rev2=Ed Bond&lt;br /&gt;
|Rev2Title=Client Representative&lt;br /&gt;
}}&amp;lt;/div&amp;gt; &lt;br /&gt;
[[Category:{{#var:Client}} FS]]&lt;/div&gt;</summary>
		<author><name>AppaduN</name></author>
	</entry>
	<entry>
		<id>https://calidusassist.adcservices.apteancloud.com/calidus-assist/OBS/index.php?title=FS_318517_SCR22_NHSBT_C-EPOD_Hospital_Own_Transport&amp;diff=1595</id>
		<title>FS 318517 SCR22 NHSBT C-EPOD Hospital Own Transport</title>
		<link rel="alternate" type="text/html" href="https://calidusassist.adcservices.apteancloud.com/calidus-assist/OBS/index.php?title=FS_318517_SCR22_NHSBT_C-EPOD_Hospital_Own_Transport&amp;diff=1595"/>
		<updated>2014-09-22T11:30:24Z</updated>

		<summary type="html">&lt;p&gt;AppaduN: /* Database/DAL changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;noprint&amp;quot;&amp;gt;&lt;br /&gt;
{{#vardefine:Client|NHS}}&lt;br /&gt;
{{#vardefine:ClientName|NHSBT}}&lt;br /&gt;
{{#vardefine:System|''CALIDUS'' ePOD}}&lt;br /&gt;
{{#vardefine:Doc_Title|Hospital Own Transport}}&lt;br /&gt;
{{#vardefine:Version|0.5}}&lt;br /&gt;
{{#vardefine:Date|22nd July 2014}}&lt;br /&gt;
{{#vardefine:Reference|318517 SCR22}}&lt;br /&gt;
{{#vardefine:Year|2014}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{Doc_Title&lt;br /&gt;
|Client={{#var:ClientName}}&lt;br /&gt;
|System={{#var:System}}&lt;br /&gt;
|Title={{#var:Doc_Title}}&lt;br /&gt;
|Reference=FS {{#var:Reference}}&lt;br /&gt;
|Version={{#var:Version}}&lt;br /&gt;
|Date={{#var:Date}}&lt;br /&gt;
|Year={{#var:Year}}&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TOC --&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;noprint&amp;quot;&amp;gt;&lt;br /&gt;
= Functional Overview  =&lt;br /&gt;
== Client Requirement  ==&lt;br /&gt;
&lt;br /&gt;
The following changes from the Solution Design document are included in this specification:&lt;br /&gt;
* '''SCR-316403-05''' - Hospital Own Transport&lt;br /&gt;
: EPOD Scanning at handover at Depot and delivery into depot from 3rd-party carriers and Hospital Own Transport - Configured via CTMS. This needs to include empties and samples collected from hospitals and all items collected from sessions by TNT. EPOD application development&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Solution Overview ==&lt;br /&gt;
In detail, the following C-EPOD execution functionality was requested:&lt;br /&gt;
&lt;br /&gt;
The process for Hospital Own Transport deliveries is as follows:&lt;br /&gt;
*	Hospital Services will scan all tags to Assets, as normal.&lt;br /&gt;
*	These jobs will be planned onto a Trip assigned to a hospital-related user (i.e. one per hospital or depot), for the carrier &amp;quot;Hospital Own Transport&amp;quot;. The Resource Allocation functionality will assist in choosing an available &amp;quot;driver&amp;quot;. The trip will be allocated a vehicle (it is suggested only one vehicle is created and this same one is used for all trips for this carrier) and set to Accepted.&lt;br /&gt;
*	When giving the jobs to Hospital Own Transport, Hospital Services will log on to the C-EPOD device and select the Job that the user is picking up. C-EPOD will be configured to allow users to select any job out of sequence.&lt;br /&gt;
*	Hospital Services will scan to complete this collection, via the Asset tags. If there are any Buff Tags that have not been scanned to Assets, the device will make this known at this time.&lt;br /&gt;
*	Once all items have been scanned, Hospital Services will obtain the driver's name and Signature on the device, to confirm change of ownership.&lt;br /&gt;
*	C-TMS will automatically complete this job.&lt;br /&gt;
*	No scanning or user entry is required for the delivery job - this will be automatically completed with the collection job.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hospital Own Transport will be bringing samples and/or empty Assets into the network themselves. It was requested that the C-EPOD device prompt the user at the end of the collection if there is anything additional to collect from Hospital Own Transport. This is an Ad Hoc Delivery and is currently unsupported by C-EPOD. This should be completed via the manual Debrief screen in C-TMS.&lt;br /&gt;
&lt;br /&gt;
Assets may be manually marked as in the depot by:&lt;br /&gt;
*	Manually adding an order and adding the assets or samples to the order before confirming the job completed.&lt;br /&gt;
*	Using the Asset Maintenance screen&lt;br /&gt;
*	Waiting until they are scanned again for Tag to Asset (for deliveries) or Ad Hoc Collection later.&lt;br /&gt;
&lt;br /&gt;
To complete this manually (i.e. without C-EPOD), the following steps would be taken:&lt;br /&gt;
*	If offered and accepted, C-TMS should be used to create a planned, empty collection from the hospital back to the depot, and assign this to the trip on which the Delivery is being completed. &lt;br /&gt;
*	When the carrier returns with assets or samples, these can then be actioned as with Hospital Own Transport above.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The process for 3rd-party Carrier deliveries is as follows:&lt;br /&gt;
*	Hospital Services will scan all tags to Assets, as normal.&lt;br /&gt;
*	These jobs will be planned as per the normal process (i.e. sent through the DPS interface or manually planned) onto a Trip and then assigned to a driver code (using resource allocation), for the specific 3rd-party Carrier. Default driver codes may be created, for example, &amp;quot;TNT1&amp;quot;, &amp;quot;TNT2&amp;quot;, etc. The Resource Allocation functionality will assist in choosing an available &amp;quot;driver&amp;quot;. The trip will be allocated a vehicle (it is suggested only one vehicle is created and this same one is used for all trips for this carrier) and set to Accepted.&lt;br /&gt;
*	When giving the items for the jobs to the carrier, Hospital Services will log on to the C-EPOD device with the correct user (the driver code) and select the Job that the carrier is picking up. C-EPOD will be configured to allow users to select any job out of sequence.&lt;br /&gt;
*	Hospital Services will scan to complete this collection, via the Asset tags. If there are any Buff Tags that have not been scanned to Assets, the device will make this known at this time.&lt;br /&gt;
*	Once all items have been scanned, Hospital Services will obtain the driver's name and signature on the device, to confirm change of ownership.&lt;br /&gt;
*	C-TMS will automatically complete this job.&lt;br /&gt;
*	No scanning is required for the delivery job - the debrief will be manually completed when the 3rd-party carrier returns the completed POD documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3rd-party Carriers may be offered the option of a return leg to the depot, to bring back any planned (e.g. sample) or unplanned items (e.g. empty assets). 3rd-party Carriers are also regularly used for Session collections. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The process for 3rd-party Carrier returns to depot is as follows:&lt;br /&gt;
*	The return order (the order to collect at the hospital and return items to the depot) will be created and planned on the trip above, which will have been allocated to the TNT 'driver' above.&lt;br /&gt;
*	When the TNT driver returns to the depot with the collected goods, a user (transport or hospital services) will obtain the paperwork, retrieve the trip that the driver is completing and find out the TNT user. This can be through many different methods, the easiest being:&lt;br /&gt;
**	Through the C-TMS Waterfall screen, if the user has access to C-TMS.&lt;br /&gt;
**	Through the C-EPOD Admin Loads or Users screen, if the user has access to C-EPOD.&lt;br /&gt;
**	Through the C-Portal Arrive/Depart (Airport) screen, if the user has access to C-Portal, or the C-Portal Airport screen is displayed in transport and/or hospital services.&lt;br /&gt;
*	The user will log in to the C-EPOD device using this TNT driver and select the order from the list.&lt;br /&gt;
*	The user will scan any preadvised items for delivery (e.g. Samples) and use a new &amp;quot;Ad Hoc Delivery&amp;quot; process to scan any other items brought in by the TNT driver (e.g. unplanned samples, returned assets, etc). If the TNT driver was planned to collect from multiple hospitals, the process will request the user to enter the hospital from which the items were collected. If single trip are scanned, the process will request the user to identify the asset type.&lt;br /&gt;
*	Once all items have been scanned, Hospital Services will obtain the driver's name and signature on the device, to confirm change of ownership.&lt;br /&gt;
*	C-TMS will automatically complete this job.&lt;br /&gt;
*	The TNT paperwork will then be used to manually debrief the collection from the various hospitals.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The process for 3rd-party Carrier Session collections is as follows:&lt;br /&gt;
*	For sessions, these will already have an order and will be planned on a trip. This will have been set to TNT carrier, resourced (allocated to a TNT driver code and vehicle) and set to status Accepted.&lt;br /&gt;
*	When the TNT driver returns to the depot with the collected goods, a user will obtain the paperwork, retrieve the trip (as above) and find out the TNT driver code assigned to the trip.&lt;br /&gt;
*	The user will log in to the C-EPOD device using this TNT driver code and select the order from the list.&lt;br /&gt;
*	The user will use a new &amp;quot;Ad Hoc Delivery&amp;quot; process to scan any items brought in by the TNT driver (e.g. polar bags of blood, document packs, returned assets, etc). If the TNT driver was planned to collect from multiple sessions, the process will request the user to enter the session location from which the items were collected. If single trip labels are scanned, the process will request the user to identify the asset type.&lt;br /&gt;
*	Once all items have been scanned, the user  will obtain the driver's name and signature on the device, to confirm change of ownership.&lt;br /&gt;
*	C-TMS will automatically complete this job.&lt;br /&gt;
*	The TNT paperwork will then be used to manually debrief the collection from the various sessions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
{{Note|This functionality will be developed in the Android application only and will not be available in the Windows Mobile application.}}&lt;br /&gt;
{{Note|This functionality is dependent on FS 317761 SCR15 C-EPOD Collection Changes.}}&lt;br /&gt;
{{Note|This functionality informs on and is informed by FS 317907 SCR01 C-TMS-C-EPOD Interface.}}&lt;br /&gt;
{{Note|Although it is possible with this solution to combine several trips together onto one trip, for ease of use on the C-EPOD device, rather than planning accurately as described above, this is not recommended for the following reasons:&lt;br /&gt;
* Individual PO cost will not be able to be calculated per trip, only for the trip as planned (i.e. all combined)&lt;br /&gt;
* Consolidation of jobs together at the depot (to provide a single loading task) may compromise the use of the C-EPOD application, if several distinct jobs are to be collected by different TNT drivers within the same collection or delivery timeframe, as these will be consolidated together.&lt;br /&gt;
* Mitigation of the above (i.e. turning off consolidation) would be impractical, as this would result in instructions to load assets multiple times (once for each job with contents in the asset), as the system has been instructed not to consolidate.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- NEW PAGE --&amp;gt; &lt;br /&gt;
= Set-up  =&lt;br /&gt;
&lt;br /&gt;
== Pre-requisites  ==&lt;br /&gt;
* A working {{#var:System}} system.&lt;br /&gt;
&lt;br /&gt;
=== C-TMS Interface Changes ===&lt;br /&gt;
* C-EPOD Configuration per Carrier, at certain location types. Broadly, this would be configured to send tasks to C-EPOD at depots, not at customer locations (hospitals), specifying a different job group.&lt;br /&gt;
* For HOT, Delivery jobs out to the hospital will not be sent to C-EPOD. The collections (loading) at the depot will, however.&lt;br /&gt;
* For 3PC, Delivery and Collection jobs at the hospital will not be sent to C-EPOD. Collections (loading) and Deliveries (unloading) at the depot will, however. &lt;br /&gt;
* These unloading jobs at the depot will include the 'from' address information.&lt;br /&gt;
* A configuration flag will be held against the carrier type, to indicate this sending of information. &lt;br /&gt;
* Configuration flags will also be created and held against the carrier, to control whether the paired jobs are automatically completed (i.e. HOT deliveries to hospital) or not (i.e. TNT deliveries that will be manually debriefed later from the paperwork returned).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Menu Structure  ==&lt;br /&gt;
None&lt;br /&gt;
&lt;br /&gt;
== Data  ==&lt;br /&gt;
* A site record will be created for each 3rd-party carrier or for a single hospital own transport carrier.&lt;br /&gt;
* The standard Job Groups will &lt;br /&gt;
* Only one vehicle per site will be created.&lt;br /&gt;
* No vehicle checks are required.&lt;br /&gt;
* Multiple drivers will be created for the 3rd-party Carrier, to allow multiple trips to be actioned per day.&lt;br /&gt;
* Multiple drivers will be created for the Hospital Own Transport, one per hospital or depot.&lt;br /&gt;
* The jobs group created for other carriers will also be created for these sites and be configured similarly, except for:&lt;br /&gt;
** allow drivers to select any incoming job from the job list.&lt;br /&gt;
** prompt for signature on collections and deliveries.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- NEW PAGE --&amp;gt; &lt;br /&gt;
= Functional Description  =&lt;br /&gt;
== Database/DAL changes ==&lt;br /&gt;
* New flag Ad Hoc Delivery&lt;br /&gt;
Table EPOD_SITE requires the following modifications:&lt;br /&gt;
* EPL_AD_HOC_DELIVERY - nvarchar(1), NOT NULL DEFAULT 'N', values 'Y' or 'N'.&lt;br /&gt;
&lt;br /&gt;
Existing packages will be modified to allow the creating, editing and selecting of the new flag, including but not limited to:&lt;br /&gt;
*EPOD_SITE_INSERT&lt;br /&gt;
*EPOD_SITE_SELECT&lt;br /&gt;
*EPOD_SITE_SELECT_UPDATED_DATA&lt;br /&gt;
*EPOD_SITE_UPDATE&lt;br /&gt;
The existing EPOD_SITE DAL object will be changed to:&lt;br /&gt;
* Read the new flag&lt;br /&gt;
{{Note}} It is not necessary to add this flag as a search-able item. However, if allowing this keeps the packages and DAL objects standard in design, then this can also be done, within the DAL and the packages.&lt;br /&gt;
&lt;br /&gt;
The XML Export of EPOD_SITE records will look as follows: &lt;br /&gt;
  &amp;lt;EPOD_SITE&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SITE_ID&amp;gt;&amp;lt;/EPL_SITE_ID&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_DESCRIPTION&amp;gt;&amp;lt;/EPL_DESCRIPTION&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SERVICE_POD_FORMAT&amp;gt;&amp;lt;/EPL_SERVICE_POD_FORMAT&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_DELIVERY_POD_FORMAT&amp;gt;&amp;lt;/EPL_DELIVERY_POD_FORMAT&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_COLLECTION_POD_FORMAT&amp;gt;&amp;lt;/EPL_COLLECTION_POD_FORMAT&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SERVICE_ACTIVITIES&amp;gt;&amp;lt;/EPL_SERVICE_ACTIVITIES&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SERVICE_PREWORK&amp;gt;&amp;lt;/EPL_SERVICE_PREWORK&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SERVICE_INFO&amp;gt;&amp;lt;/EPL_SERVICE_INFO&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SERVICE_PRODUCTS&amp;gt;&amp;lt;/EPL_SERVICE_PRODUCTS&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SERVICE_MC_REF&amp;gt;&amp;lt;/EPL_SERVICE_MC_REF&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SERVICE_DIAGNOSIS&amp;gt;&amp;lt;/EPL_SERVICE_DIAGNOSIS&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SERVICE_POSTWORK&amp;gt;&amp;lt;/EPL_SERVICE_POSTWORK&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_AUTO_COMPLETE_EMAIL&amp;gt;&amp;lt;/EPL_AUTO_COMPLETE_EMAIL&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_AD_HOC_COLLECTION&amp;gt;&amp;lt;/EPL_AD_HOC_COLLECTION&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_DEL_DRIVER_SIGN&amp;gt;&amp;lt;/EPL_DEL_DRIVER_SIGN&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_COL_DRIVER_SIGN&amp;gt;&amp;lt;/EPL_COL_DRIVER_SIGN&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_DELIVERY_PAYMENT&amp;gt;&amp;lt;/EPL_DELIVERY_PAYMENT&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_DOCUMENT_PHOTO&amp;gt;&amp;lt;/EPL_DOCUMENT_PHOTO&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_CONTAINER_ONLY&amp;gt;&amp;lt;/EPL_CONTAINER_ONLY&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_PDA_DIS_JOB_CODE&amp;gt;&amp;lt;/EPL_PDA_DIS_JOB_CODE&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_LINKED_C_D&amp;gt;&amp;lt;/EPL_LINKED_C_D&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_METRICS_ENTRY&amp;gt;&amp;lt;/EPL_METRICS_ENTRY&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_NOTES&amp;gt;&amp;lt;/EPL_NOTES&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_FORCED_ENTRY&amp;gt;&amp;lt;/EPL_FORCED_ENTRY&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SYSTEM_TYPE&amp;gt;&amp;lt;/EPL_SYSTEM_TYPE&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_UPDATE_FUNCTIONS&amp;gt;&amp;lt;/EPL_UPDATE_FUNCTIONS&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_VEHICLE_CHECK_CONFIG&amp;gt;&amp;lt;/EPL_VEHICLE_CHECK_CONFIG&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_JOB_LIST_CFG&amp;gt;&amp;lt;/EPL_JOB_LIST_CFG&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_ARRIVAL_FLAG&amp;gt;&amp;lt;/EPL_ARRIVAL_FLAG&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SCAN_ERROR_FLAG&amp;gt;&amp;lt;/EPL_SCAN_ERROR_FLAG&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_LAST_CHANGED_DATE&amp;gt;&amp;lt;/EPL_LAST_CHANGED_DATE&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_LAST_CHANGED_TIME&amp;gt;&amp;lt;/EPL_LAST_CHANGED_TIME&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_RESEQUENCE&amp;gt;&amp;lt;/EPL_RESEQUENCE&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_CLAUSE_DELIVERY&amp;gt;&amp;lt;/EPL_CLAUSE_DELIVERY&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_JOB_STATUS&amp;gt;&amp;lt;/EPL_JOB_STATUS&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_CONSOLIDATION&amp;gt;&amp;lt;/EPL_CONSOLIDATION&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_VEHICLE_STOCK_FLAG&amp;gt;&amp;lt;/EPL_VEHICLE_STOCK_FLAG&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SCAN_AT_VEHICLE&amp;gt;&amp;lt;/EPL_SCAN_AT_VEHICLE&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_PDA_FULL_ADDRESSES&amp;gt;&amp;lt;/EPL_PDA_FULL_ADDRESSES&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_JOB_TRANSFER&amp;gt;&amp;lt;/EPL_JOB_TRANSFER&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_NEXT_JOB_FLAG&amp;gt;&amp;lt;/EPL_NEXT_JOB_FLAG&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_RETURNS_DEPOT_FLAG&amp;gt;&amp;lt;/EPL_RETURNS_DEPOT_FLAG&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_SCANNING_FLAG&amp;gt;&amp;lt;/EPL_SCANNING_FLAG&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_AUTOLOGIN_FLAG&amp;gt;&amp;lt;/EPL_AUTOLOGIN_FLAG&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_ADHOC_ANYTIME_CONFIG&amp;gt;&amp;lt;/EPL_ADHOC_ANYTIME_CONFIG&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_AUDIT_LOGIN_FLAG&amp;gt;&amp;lt;/EPL_AUDIT_LOGIN_FLAG&amp;gt;&lt;br /&gt;
    &amp;lt;EPL_TRAILER_VEHICLE_FLAG&amp;gt;&amp;lt;/EPL_TRAILER_VEHICLE_FLAG&amp;gt;&lt;br /&gt;
    ''&amp;lt;EPL_AD_HOC_DELIVERY&amp;gt;&amp;lt;/EPL_AD_HOC_DELIVERY&amp;gt;''&lt;br /&gt;
  &amp;lt;/EPOD_SITE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
Table EPOD_JOB_GROUP requires the following modification:&lt;br /&gt;
*    EPL_AD_HOC_DELIVERY - nvarchar(1), NOT NULL DEFAULT 'N', values 'Y' or 'N'. &lt;br /&gt;
&lt;br /&gt;
Existing packages will be modified to allow the creating, editing and selecting of the new flag, including but not limited to:&lt;br /&gt;
*    EPOD_JOB_GROUP_INSERT&lt;br /&gt;
*    EPOD_JOB_GROUP_SEARCH&lt;br /&gt;
*    EPOD_JOB_GROUP_SELECT&lt;br /&gt;
*    EPOD_JOB_GROUP_SELECT_UPDATED_DATA&lt;br /&gt;
*    EPOD_JOB_GROUP_UPDATE &lt;br /&gt;
&lt;br /&gt;
The existing EPOD_JOB_GROUP DAL object will be changed to:&lt;br /&gt;
*    Export the new flag in XML requests&lt;br /&gt;
*    Read the new flag &lt;br /&gt;
&lt;br /&gt;
{{Note}} It is not necessary to add this flag as a searchable item. However, if allowing this keeps the packages and DAL objects standard in design, then this can also be done, within the DAL and the packages.&lt;br /&gt;
&lt;br /&gt;
Example: The XML Export of EPOD_JOB_GROUP records will now look as follows:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;EPOD_JOB_GROUP&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_SITE_ID&amp;gt;&amp;lt;/EPL_SITE_ID&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_JOB_GROUP&amp;gt;&amp;lt;/EPL_JOB_GROUP&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_DESCRIPTION&amp;gt;&amp;lt;/EPL_DESCRIPTION&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_SERVICE_POD_FORMAT&amp;gt;&amp;lt;/EPL_SERVICE_POD_FORMAT&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_DELIVERY_POD_FORMAT&amp;gt;&amp;lt;/EPL_DELIVERY_POD_FORMAT&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_COLLECTION_POD_FORMAT&amp;gt;&amp;lt;/EPL_COLLECTION_POD_FORMAT&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_SERVICE_ACTIVITIES&amp;gt;&amp;lt;/EPL_SERVICE_ACTIVITIES&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_SERVICE_PREWORK&amp;gt;&amp;lt;/EPL_SERVICE_PREWORK&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_SERVICE_INFO&amp;gt;&amp;lt;/EPL_SERVICE_INFO&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_SERVICE_PRODUCTS&amp;gt;&amp;lt;/EPL_SERVICE_PRODUCTS&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_SERVICE_MC_REF&amp;gt;&amp;lt;/EPL_SERVICE_MC_REF&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_SERVICE_DIAGNOSIS&amp;gt;&amp;lt;/EPL_SERVICE_DIAGNOSIS&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_SERVICE_POSTWORK&amp;gt;&amp;lt;/EPL_SERVICE_POSTWORK&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_AUTO_COMPLETE_EMAIL&amp;gt;&amp;lt;/EPL_AUTO_COMPLETE_EMAIL&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_AD_HOC_COLLECTION&amp;gt;&amp;lt;/EPL_AD_HOC_COLLECTION&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_DEL_DRIVER_SIGN&amp;gt;&amp;lt;/EPL_DEL_DRIVER_SIGN&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_COL_DRIVER_SIGN&amp;gt;&amp;lt;/EPL_COL_DRIVER_SIGN&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_DEL_CUST_SIGN&amp;gt;&amp;lt;/EPL_DEL_CUST_SIGN&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_COL_CUST_SIGN&amp;gt;&amp;lt;/EPL_COL_CUST_SIGN&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_SIGN_CHECK_LBL&amp;gt;&amp;lt;/EPL_SIGN_CHECK_LBL&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_DELIVERY_PAYMENT&amp;gt;&amp;lt;/EPL_DELIVERY_PAYMENT&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_DOCUMENT_PHOTO&amp;gt;&amp;lt;/EPL_DOCUMENT_PHOTO&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_CONTAINER_ONLY&amp;gt;&amp;lt;/EPL_CONTAINER_ONLY&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_METRICS_ENTRY&amp;gt;&amp;lt;/EPL_METRICS_ENTRY&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_NOTES&amp;gt;&amp;lt;/EPL_NOTES&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_TNCS&amp;gt;&amp;lt;/EPL_TNCS&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_LAST_CHANGED_DATE&amp;gt;&amp;lt;/EPL_LAST_CHANGED_DATE&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_LAST_CHANGED_TIME&amp;gt;&amp;lt;/EPL_LAST_CHANGED_TIME&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_JOB_STATUS&amp;gt;&amp;lt;/EPL_JOB_STATUS&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_CONSOLIDATION&amp;gt;&amp;lt;/EPL_CONSOLIDATION&amp;gt;&lt;br /&gt;
   &amp;lt;EPL_SCAN_AT_VEHICLE&amp;gt;&amp;lt;/EPL_SCAN_AT_VEHICLE&amp;gt;&lt;br /&gt;
   ''&amp;lt;EPL_AD_HOC_DELIVERY&amp;gt;&amp;lt;/EPL_AD_HOC_DELIVERY&amp;gt;''&lt;br /&gt;
 &amp;lt;/EPOD_JOB_GROUP&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The existing database package EPOD_SETUP will be modified to ensure that the new flags are defaulted appropriately.&lt;br /&gt;
&lt;br /&gt;
== Import/Export Messages ==&lt;br /&gt;
The PDA web request server (Calidus_ePOD.asmx, both the XML and JSON versions) will be modified to include the new Site and Job Group flags in the LOGON_REQUEST message processor (through the LOGON_RESPONSE message).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Admin Changes ==&lt;br /&gt;
The Job Group and Site maintenance screens (job_group.aspx and site_header.aspx respectively) will be modified to allow the system to be configured for:&lt;br /&gt;
*  EPL_AD_HOC_DELIVERY, a checkbox, labelled as &amp;quot;AD Hoc Delivery&amp;quot;, defaulting to 'N' (Disabled). &lt;br /&gt;
This configuration field will be added to the PDA tab of these screens.&lt;br /&gt;
&lt;br /&gt;
{{Note}} Ensure that the new check-boxes line up with the existing fields. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== PDA Changes ==&lt;br /&gt;
=== Database/DAL changes ===&lt;br /&gt;
A new column will be added to the EPOD_SITE and EPOD_JOB_GROUP tables:&lt;br /&gt;
*    EPL_AD_HOC_DELIVERY - This will be a one character field with of Values 'Y' and 'N'. The default value is 'N'. &lt;br /&gt;
This new field should be added to every procedure as part of the PDA_SITE and PDA_JOB_GROUP DAL objects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Login ===&lt;br /&gt;
{{Note}} No changes are required to the Login process - this section described how the process will work when configured as described.&lt;br /&gt;
&lt;br /&gt;
The device will be configured for the Carrier (i.e. TNT or the hospital) as the site.&lt;br /&gt;
&lt;br /&gt;
The transport user will log on using the carrier driver assigned to the trip (either found through C-TMS or preset to a single default value), select the default vehicle and enter the password.&lt;br /&gt;
&lt;br /&gt;
This will retrieve the list of jobs on the load assigned to that user and display them on the job list.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Job List ===&lt;br /&gt;
{{Note}} No changes are required to the Job List process - this section described how the process will work when configured as described.&lt;br /&gt;
&lt;br /&gt;
Only the jobs on the current trip will be shown. The Job List will be configured to allow the user to select any of the jobs on that load, and also to show all jobs singly (i.e. not consolidated together).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Delivery Process ===&lt;br /&gt;
When a Delivery job (i.e. in this case, a depot unloading task) is selected from the Job List and started from the Job Details form, the Delivery screen will show.&lt;br /&gt;
&lt;br /&gt;
This will be modified to display the ''Ad Hoc'' tab in a similar way to the &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Note}} The existing ''Items'' tab is there to show all preadvised items - unplanned delivery of items will be shown on a different tab (described later). The Items (Container) tab will only be shown if there are items preadvised for the jobs. If there are none, this tab will not be present.&lt;br /&gt;
&lt;br /&gt;
{{Note}} The '''Complete''' button should only appear on the ''Job Details'' tab if any of the following conditions are true:&lt;br /&gt;
&lt;br /&gt;
*    There are no preadvised items to deliver.&lt;br /&gt;
*    The application is configured for Ad Hoc Delivery (new Job Group flag EPL_AD_HOC_DELIVERY is enabled). &lt;br /&gt;
&lt;br /&gt;
When all preadvised items have been scanned as delivered (or marked as cancelled), the application currently recognises this and automatically moves on to the Job Completion stage. This will not occur if this is a delivery job, and the application has been configured for Ad Hoc Delivery (EPL_AD_HOC_DELIVERY is enabled). In this case, the device will simply display the empty items list (as there are no more items to scan) and wait, as there may be unplanned items to scan as part of the Ad Hoc Delivery process (in the next section). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ad Hoc Delivery Tab ===&lt;br /&gt;
This tab will have functionality extremely similar to the Ad Hoc Collection tab - this functionality is re-stated here, with any exceptions noted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Ad Hoc Delivery process allows the driver to specify the items delivered, at the point of Delivery, without the specific items for those Deliveries being planned in advance. This appears as a separate tab on the PDA within the Delivery process, labelled as &amp;quot;Ad Hoc&amp;quot; when this feature is enabled (through the flag EPL_ADHOC_DELIVERY for Delivery-type jobs only). This tab will be to the right of the existing ''Containers'' and ''Products'' tabs, but before the ''Notes'' tab.&lt;br /&gt;
&lt;br /&gt;
The layout of the tab will be almost identical to the existing ''Items (Containers)'' tab. The following are sample screen layouts for the features of the tab. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=260px heights=400px perrow=2 caption=&amp;quot;Ad Hoc Delivery Prototype Screen-shots&amp;quot;&amp;gt;&lt;br /&gt;
File:FS_317761_AdHoc1.PNG|''Unplanned item details''&lt;br /&gt;
File:FS_317761_AdHoc2.PNG|''Ad Hoc item list''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note}} These are the Ad Hoc Collection prototype screenshots.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The tab will allow items to be entered in exactly the same way as the ''Items (Containers)'' tab:&lt;br /&gt;
* Through a &amp;quot;Scan Container&amp;quot; text box and '''Deliver''' button.&lt;br /&gt;
* Through the use of the built in Camera Scanner feature, through the '''Scan''' button.&lt;br /&gt;
Note that there is no method of entry through the table (i.e. pressing or long-pressing on the table row will show no ''Deliver'' option).&lt;br /&gt;
&lt;br /&gt;
This table of items on the screen will start empty - as items are scanned, these will be added to the table. {{Note}} Developer Note: The table should be built to the same scrolling view mechanism as the Items (Container) table on that tab.&lt;br /&gt;
&lt;br /&gt;
Like the ''Items (Containers)'' tab, this tab will only allow asset formats to be scanned in the formats detailed in the Scanning section - any invalid formats will be discarded with a transient message displayed on the screen. &lt;br /&gt;
&lt;br /&gt;
The tab will check whether the scanned item is an item that has been preadvised for the job. If so, and the item has already been confirmed as received, a transient message will inform the driver &amp;quot;This item already scanned&amp;quot;. If this preadvised item has not yet been scanned for Delivery, the tab will interrupt the scanning (if continuous scanning is enabled) and will display an alert &amp;quot;Ad Hoc Delivery&amp;quot;/&amp;quot;Preadvised items must be scanned on the Items tab&amp;quot;. If this preadvised item has been marked as cancelled on the preadvised list, the tab will interrupt the scanning (if continuous scanning is enabled) and will display an alert &amp;quot;Ad Hoc Delivery&amp;quot;/&amp;quot;Preadvised item has been cancelled and cannot be delivered.&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
The tab will check whether the scanned item has already been scanned by the Ad Hoc Delivery process. If so, a transient message will inform the driver &amp;quot;This item already scanned&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The different types of Asset will be dealt with differently: &lt;br /&gt;
*	Fixed (Permanent) Assets IDs will always be associated with a particular Asset Type in C-TMS, so the application will not require the driver to confirm the Asset Type for a Fixed Asset. These will simply be added directly to the table.&lt;br /&gt;
*	Single Trip Assets must have an asset type entered.&lt;br /&gt;
Additionally, the application will check to see if this collection is part of a consolidation (multiple delivery jobs) with multiple collection destinations. Note that this is completed differently to the Ad Hoc Collection screen, in that the device will check for the address from the Alternate address sent to the device from the server, rather than from a linked job (that will not have been sent to C-EPOD from C-TMS). If the addresses found are different, then the driver must be prompted to enter a destination location. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After these checks are made on a scanned Item ID, and further entry is required, the application will stop the scanning process (if continuous scanning is in use) and display a pop-up data entry screen. This will have the following fields:&lt;br /&gt;
* Header label, showing the scanned Item ID.&lt;br /&gt;
* Location label and drop-down list. These will only be shown if there are multiple collection locations. If this is the case, the location names will be listed in a drop-down list, forcing the driver to select one. The default entry on the drop-down list will be &amp;quot;Select a Location&amp;quot;. &lt;br /&gt;
* Type label and drop-down list. These will only be shown if the item scanned is a single-trip format Item ID. If this is the case, all DUs (Asset Types) will be displayed in a drop-down list, forcing the driver to select one. The default entry on the drop-down list will be &amp;quot;Select a Type&amp;quot;. The list will be built from all DU-type codes on the Reason Codes table (EPL_DESCRIPTION from EPOD_REASON_CODE where EPL_REASON_TYPE = &amp;quot;DU&amp;quot;).&lt;br /&gt;
* A '''Cancel''' button. When pressed, this closes the pop-up data entry screen. The scanned ID will be discarded and not added to the Ad Hoc Items list.&lt;br /&gt;
* A '''Save''' button. When pressed, this button will validate that all required data is entered. If not, the screen will display a pop-up alert showing the item that has not been entered (&amp;quot;Ad Hoc Additional Details&amp;quot;/&amp;quot;You must select a (Field)&amp;quot;, where (Field) is replaced with the data type that has not been entered, i.e. &amp;quot;Type&amp;quot; or &amp;quot;Location&amp;quot;). When this alert is cleared, the user will be returned to the pop-up entry screen. If there are no errors found when clicking the '''Save''' button, the pop-up data entry screen will be closed and the item will be added to the Ad Hoc Items list.&lt;br /&gt;
&lt;br /&gt;
If items have been scanned and need to be added to the list, they will be added as a new row on the EPOD_CONTAINER table, as follows:&lt;br /&gt;
* EPL_JOB_ID - This will be from the job being scanned. If there are consolidated jobs with the same (or linked) destinations, this will be the Job ID of the first job. If there are consolidated jobs with different destinations, this will be the Job ID of the job with the destination as selected by the driver in the pop-up details entry screen&lt;br /&gt;
* EPL_CONTAINER_ID - As scanned, minus the leading barcode application identifiers (&amp;quot;00&amp;quot; or &amp;quot;8004&amp;quot;)&lt;br /&gt;
* EPL_CONTAINER_PACKAGE_CODE - If this is a permanent Asset barcode (&amp;quot;8004&amp;quot;), this will be left blank. If not, this will be the code of the asset type selected by the driver in the pop-up details entry screen (EPL_REASON_CODE).&lt;br /&gt;
* EPL_CONTAINER_PACKAGE_DESC - If this is a permanent Asset barcode (&amp;quot;8004&amp;quot;), this will be left blank. If not, this will be the description of the asset type selected by the driver in the pop-up details entry screen (EPL_DESCRIPTION).&lt;br /&gt;
* EPL_STATUS - &amp;quot;C&amp;quot;&lt;br /&gt;
* EPL_TYPE - &amp;quot;A&amp;quot;, to indicate that this is an Ad Hoc Delivery&lt;br /&gt;
* EPL_SEQUENCE - Set as 3-digit numeric counting from 001, incrementing with each item added to this screen.&lt;br /&gt;
All other items will be blank or added as normal.&lt;br /&gt;
&lt;br /&gt;
These records will be added as a new row at the top of the list, by retrieving all records in reverse sequence order (through the PDA_CONTAINER DAL function SelectAllContainersForJob with parameter p_blnAdHoc set to true). This will return only scanned Ad Hoc items, in reverse sequence. The details displayed will differ, depending on the information delivered:&lt;br /&gt;
* Item ID - EPL_CONTAINER_ID&lt;br /&gt;
* Type - EPL_CONTAINER_PACKAGE_DESC&lt;br /&gt;
* Location - EPL_CUSTOMER_NAME of EPOD_JOB &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pressing or long-pressing on an item in this Ad Hoc table will allow the driver to remove an item from the Delivery. The application will display a pop-up alert &amp;quot;Ad Hoc Delivery&amp;quot;/&amp;quot;Do you want to remove this item?&amp;quot; with options &amp;quot;Yes&amp;quot; and &amp;quot;No&amp;quot;. Choosing &amp;quot;No&amp;quot; will leave the item on the list. Choosing &amp;quot;Yes&amp;quot; will delete the item from the scanned containers and refresh the list without this item.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A '''Complete''' button should be available on the ''Job Details'' tab, to allow the users to manually indicate that all items have now been delivered. Clicking this will instigate the Job Completion stage. If at this time no items have been scanned as part of the Ad Hoc Scanning tab for this Delivery (and Ad Hoc Delivery is enabled), a pop-up alert will be displayed, showing &amp;quot;Unplanned Items&amp;quot;/&amp;quot;Please confirm that there are no unplanned items to scan&amp;quot;, with options &amp;quot;Confirm&amp;quot; and &amp;quot;Cancel&amp;quot;. Choosing &amp;quot;Confirm&amp;quot; will move on to Job Completion, whereas &amp;quot;Cancel&amp;quot; will return to the Delivery process and activate the ''Ad Hoc'' scanning tab.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- MEDIA LANDSCAPE YES --&amp;gt;&lt;br /&gt;
= Appendix A: TEST PLAN  =&lt;br /&gt;
&lt;br /&gt;
{{TestPlan_Header&lt;br /&gt;
|Title={{#var:Doc_Title}}&lt;br /&gt;
|Log={{#var:Reference}}&lt;br /&gt;
|Description=Test the C-EPOD changes made for NHSBT.&lt;br /&gt;
|MenuAccess=None&lt;br /&gt;
|Prerequisites=Data set up as per Data Setup section; Note that individual setup information is provided for each test area.&lt;br /&gt;
|Objective=To test that: Admin can view and maintain configuration for the changes; the EPOD Client application can perform Ad Hoc Deliveries.&lt;br /&gt;
}} &lt;br /&gt;
{{ #vardefine: Cycle | 0 }}{{ #vardefine: SubCycle | 0 }}&lt;br /&gt;
{{TestPlan_CycleHeader&lt;br /&gt;
|Cycle={{ #vardefineecho: Cycle | {{ #expr: {{ #var: Cycle }} + 1 }} }}{{ #vardefine: SubCycle | {{ #var: Cycle }} }}&lt;br /&gt;
|Title=Admin Tests&lt;br /&gt;
|Notes=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Enter the Site Maintenance screen. Ensure the new fields are present and can be set and maintained.&lt;br /&gt;
|Result=New fields can be set, changed and saved:&lt;br /&gt;
* New checkbox &amp;quot;Ad Hoc Delivery&amp;quot;&lt;br /&gt;
The tabs are well organised, making good use of space.	 	 &lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Enter the Job Group Maintenance screen. Ensure the new fields are present and can be set and maintained.&lt;br /&gt;
|Result=New fields can be set, changed and saved:&lt;br /&gt;
* New checkbox &amp;quot;Ad Hoc Delivery&amp;quot;&lt;br /&gt;
The tabs are well organised, making good use of space.	 	 &lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_CycleFooter}}&lt;br /&gt;
&lt;br /&gt;
{{TestPlan_CycleHeader&lt;br /&gt;
|Cycle={{ #vardefineecho: Cycle | {{ #expr: {{ #var: Cycle }} + 1 }} }}{{ #vardefine: SubCycle | {{ #var: Cycle }} }}&lt;br /&gt;
|Title=PDA Ad Hoc Delivery.&lt;br /&gt;
|Notes=Create a load with several deliveries from hospitals and deliveries to the depot and assign to the carrier, user and vehicle. Ensure that there are planned items on some deliveries and deliveries.&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Log in to the application and pick up the load.&lt;br /&gt;
|Result=The ''''Job List'''' is displayed:&lt;br /&gt;
* No deliveries at the hospitals should be shown.&lt;br /&gt;
* Deliveries to the depot should not be consolidated, and labelled as Unloading jobs.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Select the second unloading job and start it at the Job Details page.&lt;br /&gt;
|Result=No error will be displayed; the job may be started and the delivery screen shown.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Click '''Start Job'''.&lt;br /&gt;
|Result=The device checks for any changes to the jobs. When checked, the ''''Delivery'''' screen is displayed:&lt;br /&gt;
* There is a '''Complete''' button.&lt;br /&gt;
* There are 3 tabs: ''Job Details''; ''Items''; ''Ad Hoc''.&lt;br /&gt;
* The jobs are shown as &amp;quot;In Progress&amp;quot; in Admin.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Click the '''Complete''' button.&lt;br /&gt;
|Result=An error should be displayed showing that there are still items awaiting scanning.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Switch to the ''Items'' tab. Cancel one of the items and confirm the exception with a reason code.&lt;br /&gt;
|Result=The Items list is displayed with only one item on it.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Switch to the ''Ad Hoc'' tab&lt;br /&gt;
|Result=The Items list is displayed (with nothing in it). The screen is laid out as expected.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Using the provided text box, enter &amp;quot;invalid&amp;quot;. Click ''Deliver''.&lt;br /&gt;
|Result=A transient error should be displayed, showing that the format is invalid.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Enter &amp;quot;8004invalid&amp;quot;. Click ''Deliver''.&lt;br /&gt;
|Result=A transient error should be displayed, showing that the format is invalid.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Enter &amp;quot;00invalidlength&amp;quot;. Click '''Deliver'''.&lt;br /&gt;
|Result=A transient error should be displayed, showing that the format is invalid.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Enter &amp;quot;00invalidformat00000&amp;quot;. Click '''Deliver'''.&lt;br /&gt;
|Result=A transient error should be displayed, showing that the format is invalid.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Enter a valid temporary Asset ID. Click ''Deliver''.&lt;br /&gt;
|Result=The pop-up ''''Details'''' window should be shown, prompting for Type only. The type list should show all valid Asset types.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Click '''Cancel'''&lt;br /&gt;
|Result=The ''Ad Hoc'' tab should be shown. The item should not be added to the list.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Enter a valid temporary Asset ID. Click ''Deliver''. Click '''Save''' in the pop-up up ''''Details'''' window.&lt;br /&gt;
|Result=An error should be displayed, asking for Type details.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Select a type. Click '''Save'''&lt;br /&gt;
|Result=The item should be added to the list, showing the selected type. The format of the list row should be as expected.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Press the '''Scan''' button.&lt;br /&gt;
|Result=A Scan reticule should be displayed, allowing barcodes to be scanned.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Repeat the item tests for invalid formats and items above (&amp;quot;invalid&amp;quot;, &amp;quot;8004invalid&amp;quot;, &amp;quot;00invalidlength&amp;quot;, &amp;quot;00invalidformat00000&amp;quot;)&lt;br /&gt;
|Result=Each time these items are scanned, a transient error should display, as previously. The Scan reticule should stay open.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Scan an invalid barcode type (for example, a CODE 39 or EAN-8 or EAN-13 barcode).&lt;br /&gt;
|Result=A transient error should display, showing that the format is invalid. The Scan reticule should stay open.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Scan the cancelled item from the planned items list.&lt;br /&gt;
|Result=The Scan reticule should be closed and the ''Ad Hoc'' tab be displayed, showing a pop-up error, saying that the item must not be Delivered, as it has already been cancelled.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Press the '''Scan''' button. Scan the remaining planned item from the planned items list.&lt;br /&gt;
|Result=The Scan reticule should be closed and the ''Ad Hoc'' tab be displayed, showing a pop-up error, saying that the item must be Delivered through the Items tab.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Switch to the ''Items'' tab and scan the item. &lt;br /&gt;
|Result=A transient message should be displayed, showing that the item has been Delivered. The Scan reticule should be closed and the ''Items'' tab be displayed, with no items on the Items list.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Switch to the ''Ad Hoc'' tab and scan the same item. &lt;br /&gt;
|Result=A transient message should be displayed, showing that the item has already been Delivered. The Scan reticule should stay open.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Scan an item that is already on the ''Ad Hoc'' items list.&lt;br /&gt;
|Result=A transient message should be displayed, showing that the item has already been Delivered. The Scan reticule should stay open.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Close the Scan reticule.&lt;br /&gt;
|Result=The ''Ad Hoc'' tab and Items list should be displayed, showing the items scanned, with the latest at the top.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Click on the top item.&lt;br /&gt;
|Result=An alert should ask whether the item should be removed.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Click '''No'''.&lt;br /&gt;
|Result=The ''Ad Hoc'' tab and Items list should be displayed again, with item selected still on the list.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Click on the top item. When prompted, click '''Yes'''.&lt;br /&gt;
|Result=The Items list should be displayed again. The item selected should be removed from the list.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Move to the ''Job Details'' tab and press the '''Complete''' button.&lt;br /&gt;
|Result=The signature should be prompted for.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Complete the signature.&lt;br /&gt;
|Result=A transient message should display that the job is complete. &lt;br /&gt;
The jobs will be completed in Admin.&lt;br /&gt;
The Job list should be redisplayed.&lt;br /&gt;
The Unloading task will be removed from the Job List. &lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Create a trip with consolidated deliveries back to the depot, from different collection locations. Log in to the C-EPOD device, start the job and move to the ''Ad Hoc Items'' tab. Enter a valid permanent Asset ID. Click ''Deliver''.&lt;br /&gt;
|Result=The pop-up ''''Details'''' window should be shown, prompting for Location only. The Location list should show a list of all unique collection locations for the orders.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Click '''Cancel'''&lt;br /&gt;
|Result=The ''Ad Hoc'' tab should be shown. The item should not be added to the list.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Enter a valid permanent Asset ID. Click ''Deliver''. Click '''Save''' in the pop-up up ''''Details'''' window.&lt;br /&gt;
|Result=An error should be displayed, asking for Location details.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Select a Location. Click '''Save'''&lt;br /&gt;
|Result=The item should be added to the list, showing the selected location. The format of the list row should be as expected.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Enter a valid single trip Asset ID. Click ''Deliver''.&lt;br /&gt;
|Result=The pop-up ''''Details'''' window should be shown, prompting for Type and Location. The type list should show all valid Asset types. The Location list should show a list of all unique collection locations for the orders.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Click '''Cancel'''&lt;br /&gt;
|Result=The ''Ad Hoc'' tab should be shown. The item should not be added to the list.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Enter a valid temporary Asset ID. Click ''Deliver''. Click '''Save''' in the pop-up up ''''Details'''' window.&lt;br /&gt;
|Result=An error should be displayed, asking for Type and Location details.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Select a type. Click '''Save'''&lt;br /&gt;
|Result=An error should be displayed, asking for Location details.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_Test&lt;br /&gt;
|Test={{ #vardefineecho: SubCycle | {{ #expr: {{ #var: SubCycle }} + 0.01 }} }}&lt;br /&gt;
|Action=Select a Location. Click '''Save'''&lt;br /&gt;
|Result=The item should be added to the list, showing the selected type and location. The format of the list row should be as expected.&lt;br /&gt;
|Remarks=&lt;br /&gt;
|PassFail=&lt;br /&gt;
}} {{TestPlan_CycleFooter}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- MEDIA LANDSCAPE NO --&amp;gt; &lt;br /&gt;
{{Doc_Appendix&lt;br /&gt;
|Appendix=B&lt;br /&gt;
|Estimate=Y&lt;br /&gt;
|Glossary=EPOD&lt;br /&gt;
|Ref1=NHSBT High Level Solution Design v2.0.doc&lt;br /&gt;
|RefV1=2.0&lt;br /&gt;
|RefDate1=21/05/2014&lt;br /&gt;
|Ref2=FS 317907 SCR01 EPOD-TMS Interface &lt;br /&gt;
|RefV2=&amp;amp;nbsp;&lt;br /&gt;
|RefDate2=&amp;amp;nbsp;&lt;br /&gt;
|Ref3=FS 317761 SCR15 NHSBT C-EPOD Collection Changes &lt;br /&gt;
|RefV3=0.4&lt;br /&gt;
|RefDate3=04/06/2014&lt;br /&gt;
|REQ=0&lt;br /&gt;
|EST=0&lt;br /&gt;
|FS=0.75&lt;br /&gt;
|TS=0&lt;br /&gt;
|DEV=3&lt;br /&gt;
|ST=0.5&lt;br /&gt;
|IMP=0&lt;br /&gt;
|EREQ=0&lt;br /&gt;
|EEST=0&lt;br /&gt;
|EFS=0.75&lt;br /&gt;
|ETS=0&lt;br /&gt;
|EDEV=3&lt;br /&gt;
|ESTT=0.5&lt;br /&gt;
|EIMP=0&lt;br /&gt;
|Client={{#var:Client}}&lt;br /&gt;
|Year={{#var:Year}}&lt;br /&gt;
|FSEST=Y&lt;br /&gt;
|FOC=N&lt;br /&gt;
|Rev1=Julie Scott&lt;br /&gt;
|Rev1Title=Project Manager&lt;br /&gt;
|Rev2=Ed Bond&lt;br /&gt;
|Rev2Title=Client Representative&lt;br /&gt;
}}&amp;lt;/div&amp;gt; &lt;br /&gt;
[[Category:{{#var:Client}} FS]]&lt;/div&gt;</summary>
		<author><name>AppaduN</name></author>
	</entry>
</feed>