FS 359275 SCR-358307-2-5 DELG Warehouse Loading and Unloading

From Calidus HUB





Aptean Logo.png







The Delivery Group

Warehouse Loading and Unloading


Functional Specification

16th September 2019 - 1.1
Reference: FS 359275 SCR-358307-2/5
















FUNCTIONAL OVERVIEW

Client Requirement

Solution Overview

Where there are loading tasks in the warehouse for a load, the delivery load in the depot site will not be available to be started until the warehouse loading jobs are completed.

Note Note: This change encompasses updating delivery jobs with the loaded quantity on completion of the loading job, as well as blocking the delivery load from starting.


The warehouse users will log onto the PDA, which will be configured for the appropriate warehouse site.

The users will enter their provided user name and password and select the vehicle to load. Only one loader is allowed per vehicle. Once the loader has picked up the load, they must complete the load, unless this load is allocated to a new loader through the C-ePOD admin system.

The user will be provided a list of all jobs to load onto the vehicle.

The user will be prevented from loading the product out of sequence - they must follow the sequence on the job list.

On selecting the job, the user will be shown a summary and allowed to start the job.

Once started, the device will display the products to load. This will consist of all planned DUs to load onto the vehicle for that order.

The user will confirm the quantity of each DU loaded onto the vehicle.

If there is a discrepancy, the user may indicate this through entry of a reason code and a change of quantity

When all products are loaded for this job, the job will automatically complete and the user will be returned to the list of jobs to be loaded.

All jobs will be completed in sequence.

When load is completed, the application will display a confirmation that the load is complete and attempt to request another for that vehicle. As there will not be any other loads for that vehicle, the application will inform the user and allow them to either exit the app, log off or change vehicle. If the user is loading another vehicle, they will select the Change Vehicle option. If they are going on a break, or have finished their shift, they will choose one of the other options.

As each job is completed, the job will be marked as completed and the job will be queued for export back to TMS. Each delivery job will be updated with the actual loaded quantity per DU. If none has been loaded for the job (or the job was cancelled), the delivery job will be cancelled.

As the load is completed, C-ePOD will release the delivery load for execution.


The driver will complete the deliveries and collections, and return any collections and undelivered items to the depot.

C-ePOD will generate an Unloading warehouse load for the products returned to depot.


Scope

This change will be applied to the latest version of CALIDUS ePOD version 4.5.


Impact

None - this is a new implementation of CALIDUS ePOD.


CONFIGURATION SET-UP

Pre-requisites

The CALIDUS ePOD system must be implemented as described in the solution design document, referenced in the appendices.


Menu Structure

N/A


Data

C-ePOD will be configured with the sites corresponding to the operational depots:

  • Site "WARR" - Warrington depot.
  • Site "LUTON" - Luton depot.

There are other depots in the operation, to be confirmed whether they are part of this solution:

  • Derby.
  • Kent.
  • London.
  • Portishead.
  • Shotts.


Each depot will be set up as 2 sites, one for the depot and one for the warehouse operations. For example, for Warrington:

  • "WARR" - the depot.
  • "WARR-W" - the warehouse.

Each site configured this way will have a customer created matching the depot, to provide address information.

The warehouse sites will be set up with the following settings configured (amongst others):

  • No arrival times captured.
  • Completing jobs out of sequence not allowed.
  • Warehouse-specific PDA users and at least one admin user.
  • Warehouse-specific reason codes for shortages.
  • Warehouse-specific vehicles (without WEBFLEET connection information).
  • No site email.
  • FTP Import settings in OBS XML format.
  • FTP Export settings in OBS XML format.

There will be one job group set up for each of the warehouse sites, called "WAREHOUSE". This will control the warehouse loading and unloading tasks. This job group will be set up as follows:

  • A basic POD/POC format.
  • No customer or driver signatures for jobs.


Implementation Advice

None


FUNCTIONAL DESCRIPTION

Integration

Both warehouse loading loads and depot delivery loads will be provided on the interface from the host system.

The warehouse loads will contain each order (as a job) and product to be loaded.

The load will be provided with the identity of the depot load that will be used to collect and deliver the goods. The OBS XML Web services will be modified to allow this to be specified against the load.

The sequence of the jobs on the load will determine the order in which they are loaded.


Admin

The C-ePOD Admin Site Maintenance screen will allow the user to identify sites as a warehouse site and to identify the configuration of the warehouse. This will be through a new tab on the Sites screen, labelled as Warehouse.

FS 359275 Site.png


The tab will contain the following configuration:

  • Warehouse - a tick box determining whether this site is a warehouse.
  • Depot Site Code - a drop-down list of sites, which determines which depot is linked to the warehouse.
  • Block Execution - a tick box determining that any linked loads will be considered blocked from execution if the linked warehouse load is not yet completed.
  • Generate Unloading Load - a drop-down list of values, determining how the unloading job will be generated. At this time, it is expected that this will have the values "Disabled", "Generate Load and all jobs" and "Generate Load and consolidated jobs".
  • Unloading Job Group - a drop-down list of job groups for the site. This job group will be used when generating unloading jobs for the warehouse.


The C-ePOD Loads Maintenance screen will allow the user to see and identify the linked load ID for sites designated as warehouses ONLY.

FS 359275 Loads.png

When editing or creating a load on a warehouse site, the load will prompt for a load ID. This will be set from integration, but can be changed here. The system will display a drop-down list of all the loads. The list will show only loads from the linked depot site, and only those loads that are Pending status, planned for today forward. The list will show the load ID and the route code, to aid in selection.


Mobile Device Application

On the mobile device application, the warehouse loaders will complete the load as described in the overview.

For the drivers, they will similarly be allowed to log on and retrieve a load for collection/delivery. The system will be modified so that, if that load is linked to a warehouse load and that load is not yet complete, the delivery load will be marked as not ready.

The device will display this in the load information, and will not allow the user to start any job. The device will display an Start Load button. If this is pressed, the device will check the load and tell the driver whether it is ready for execution. If not, the driver will not be allowed to start the load.

At regular intervals, the application will check whether the load is ready for execution - if it is, the screen will display an alert that the load is ready and remove the Start Load button.

When the load is ready, the jobs on the load will be updated with the correct quantities for delivery, based on what was confirmed as loaded.

The driver will complete the collections and delivery on the load.

When they have completed all jobs, they will be returned to the depot location, where there will be a single unloading job. They will be allowed to confirm all items delivered using a Deliver All button, and will not be requested for signatures.

The system will be modified to check whether there is a linked warehouse that requires unloading jobs to be generated. If so, the system will generate the load, assigned to the vehicle and/or trailer that delivered the load. The system will generate jobs on the load in reverse sequence for each collection job or non-delivered product. If configured to create a single job, these jobs will be consolidated onto a single entry on the device.

When unloading, if this is a single job, there will be a single job on the job list. The Containers list of that job will show a "Loose Products" entry for each job collected or returned. Clicking on that container will show all products collected for that job, which can then be unloaded and confirmed.

If this is multiple jobs, then each job collected or returned will be shown on the job list, in reverse sequence. Each job may then be unloaded and the product confirmed.


TECHNICAL NOTES

Modules Changed

Module Name Module Type Notes
EPOD_SITE.cs DAL Object  
EPOD_LOAD.cs DAL Object  
EPOD_JOB.cs DAL Object  
EPOD_DATASERVICE.cs DAL object  
load_header.aspx Winform  
load_header.aspx.cs Winform code  
site_header.aspx Winform  
site_header.aspx.cs Winform code  
DBConnection.js Android Database Creation  
PDA_LOAD.js Android DAL object  
JobList.js Android code  
{Date}_{Time}-{SysVer}-359275_WarehouseLoadingUnloading.sql Database Script  


Table Updates

The following fields will be added to table EPOD_SITE:

Name Type Nullable Default Storage Comments
EPL_WAREHOUSE_IND smallint N 0    
EPL_DEPOT_SITE_ID nvarchar(10) Y      
EPL_BLOCK_EXECUTION_IND smallint N 0    
EPL_GENERATE_UNLOADING_LOAD_IND smallint N 0    
EPL_UNLOADING_JOB_GROUP nvarchar(10) Y      


The following fields will be added to table EPOD_LOAD:

Name Type Nullable Default Storage Comments
EPL_LINKED_LOAD_ID nvarchar(20) Y      


Developer Notes

DAL Objects

The EPOD_LOAD DAL object (EPOD_LOAD.cs, part of the EPODServer project) will be modified to add a new property of EPL_LINKED_LOAD_ID against a load.

This will be populated from the new field EPOD_LOAD.EPL_LINKED_LOAD_ID, and can be added, updated and read.

This will be added to the ToXElement method, ONLY if the field is populated, only on export of load updates to external systems (i.e. not on job swap messages and not out to the device).

The existing ToXElement will be modified to check whether the load is blocked. The process will call the internal method IsNotBlockedByWarehouse and check the result. If the returned value is greater than or equal to 0, the process will include a new XML element EPL_READY_IND, after all existing elements. The value of this element will be set to the returned value.

A new private method called IsNotBlockedByWarehouse will be added to the DAL object. This method will check whether the current object's load is blocked by a warehouse load.

The process will call a database procedure (or construct a query) as follows:

   SELECT 
       CASE whLoad.EPL_STATUS
           WHEN 'X' THEN 1
           WHEN 'C' THEN 1
           ELSE 0
       END as [Ready]
   FROM
       EPOD_SITE whSite
   INNER JOIN 
       EPOD_LOAD whLoad
       ON whLoad.EPL_SITE_ID = whSite.EPL_SITE_ID
       AND whLoad.EPL_LINKED_LOAD_ID = pLoad
   WHERE
       whSite.EPL_DEPOT_SITE_ID = pSite
       AND whSite.EPL_WAREHOUSE_IND = 1
       AND whSite.EPL_BLOCK_EXECUTION_IND = 1

The method execute and will check the result of this query:

  • If no record found or an error, return -1.
  • If a record is found, return the value of the Ready column.

A new static method called GetLoadsForLinking will be added to the DAL object, passing in the following parameters:

  • a database connection.
  • EPOD_SITE.EPL_DEPOT_SITE_ID
  • The date in YYYYMMDD format, sourced from the planned end date of this load (edpPlannedEndDateTB), or the planned start date of this load (edpPlannedDateTB) if the planned end date is not populated, or today's date.

This process will select all EPOD_LOAD records, where EPL_SITE_ID is the depot site ID parameter and the end planned date (EPL_LOAD_END_PLANNED_DATE) is equal to or greater than the passed in parameter, or the start planned date (EPL_LOAD_START_PLANNED_DATE) is equal to or greater than the passed in parameter.

This will return the results in a List of EPOD_LOAD objects, or an empty list if none are found.


The EPOD_SITE DAL object (EPOD_SITE.cs, part of the EPODServer project) will be modified to add new properties as follows:

  • EPL_GENERATE_UNLOADING_LOAD_IND, int, 2 (Generate load and all jobs), 1 (Generate load and consolidated jobs), 0 (Disabled).
  • EPL_UNLOADING_JOB_GROUP, nvarchar(10).
  • EPL_WAREHOUSE_IND, int, 1 (yes) 0 (no).
  • EPL_DEPOT_SITE_ID, nvarchar(10)
  • EPL_BLOCK_EXECUTION_IND, int, 1 (enabled) 0 (disabled) - Block execution if Loading not complete

These will be populated from the new fields on EPOD_SITE and can be added, updated and read.

These will not be added to the ToXElement method.

A new static method called GetLinkedWarehouse will be added to the DAL object, passing:

  • a database connection.
  • the site ID.

This process will select the first record found on EPOD_SITE, where EPL_SITE_ID is not the site ID passed in, the EPL_WAREHOUSE_IND value is 1 and the EPL_LINKED_SITE is the site ID passed in.

This will return the selected site as an EPOD_SITE object, or null if not found.

A new static method called GetDepotSites will be added to the DAL object, passing in a database connection.

This process will select all EPOD_SITE records, where EPL_SITE_ID is not the site ID passed in and the EPL_WAREHOUSE_IND value is 0 and the EPL_LINKED_SITE is not populated.

This will return the results in a List of EPOD_SITE objects, or an empty list if none are found.


The EPOD_JOB DAL object (EPOD_JOB.cs, part of the EPODServer project) will be modified to, when warehouse loading jobs are updated, reflect the product quantity loaded onto the job on the site depot load, if this exists.

Whenever EPL_STATUS of the job is set to "C" and EPL_LOADING_TYPE is "U" and EPOD_SITE.EPL_WAREHOUSE_IND is 1, then the process will call a new internal procedure UpdateDeliveryJob.

A new internal method UpdateDeliveryJob will be created to find and update the products on the linked job.

This process will check the value of EPOD_LOAD.EPL_LINKED_LOAD_ID. If this is populated, the process will retrieve a new EPOD_JOB, passing the database connection, EPOD_SITE.EPL_DEPOT_SITE_ID, EPOD_LOAD.EPL_LINKED_LOAD_ID, EPOD_JOB.EPL_JOB_CODE and EPODJobType.Delivery. If this job is found and is not status in progress, completed or cancelled (EPL_STATUS = "I", "C" or "X" respectively), the process will update the products on this job from the products on the current job. This will be done by looping through the current job's EPOD_PRODUCT list and finding the same product record on the linked job, and updating EPL_PRODUCT_QTY_PLANNED on the linked product with EPL_PRODUCT_QTY_ACTUAL on the current job. If EPL_PRODUCT_QTY_ACTUAL of the current product is 0, delete the linked product on the new job. The process will keep a list of all product and sequences (EPL_PRODUCT_CODE + "/" + EPL_SEQUENCE) that have been processed. Once all products on the current job have been updated or deleted, the process will check that there were some products processed by this loop. If there were, it will then delete any products that have not been updated by this process, thereby removing any products not on the current job. If, at the end of this process, there are no products on the new job, the job will be deleted. Note that this whole paragraph applies ONLY when there were some products processed.


The EPOD_JOB DAL object will be modified to create warehouse unloading jobs (i.e. EPL_LOADING_TYPE = "U") when jobs have EPL_STATUS set to "C" - complete.

When EPL_STATUS is set to "C" from any source and EPOD_SITE.EPL_WAREHOUSE_IND = 0, call a new internal procedure CreateUnloadingWHJob.

A new internal method CopyToUnloadingJob will be created to copy the job to a new load.

The process will check for a configured warehouse site using EPOD_SITE.GetLinkedWarehouse, passing in the database connection and the site ID, the result of which will be stored in a warehouseSite object.

If present and EPL_GENERATE_UNLOADING_LOAD_IND is greater than zero, the process will attempt to generate jobs.

The process will first check to see if there is a load created for the unloading of the load on which this job is present.

If not, this load will be created into an object called unloadingLoad as follows:

  • A new EPL_LOAD_ID will be generated.
  • EPL_SITE_ID will be set to the warehouse site ID.
  • EPL_TRAILER_ID and EPL_VEHICLE_ID will be taken from the original load.
  • EPL_LINKED_LOAD_ID will be set to the original EPL_LOAD_ID.
  • EPL_LOAD_START_PLANNED_DATE and TIME and EPL_LOAD_END_PLANNED_DATE and TIME will be set to now.
  • EPL_USER_ID will be left blank.
  • EPL_STATUS will be "P".
  • EPL_LOAD_INFORMATION will be set to "UNLOADING".

the process will then create a new EPOD_JOB object (newJob) as follows:

  • A new job ID EPL_JOB_ID generated.
  • The load ID EPL_LOAD_ID from unloadingLoad.EPL_LOAD_ID.
  • The site ID EPL_SITE_ID set from warehouseSite.EPL_SITE_ID.
  • The job group EPL_JOB_GROUP set from the warehouseSite's EPL_UNLOADING_JOB_GROUP property.
  • The consolidation ID (EPL_LINKED_ID) set to "1", if warehouseSite.EPL_GENERATE_UNLOADING_LOAD_IND = 1, otherwise "".
  • The sequence ID (EPL_SEQUENCE) will be reversed, if warehouseSite.EPL_GENERATE_UNLOADING_LOAD_IND = 0, otherwise left as is. Note Note: The reversal of this code depends entirely on how the sequences were originally created. This must be evaluated at integration. It is expected that setting the sequence to 9999 minus a counter, depending on the order the jobs were actually completed. It is recommended to retrieve any unloading jobs already created and set the status 1 less that that lowest value.

All information from the source job at all levels will be copied to the new job i.e. EPOD_JOB, EPOD_CONTAINER, EPOD_PRODUCT, EPOD_JOB_ADDRESS. The following information will be reset on these records:

General:

  • EPL_JOB_ID - the new job ID.
  • EPL_STATUS = "P".
  • EPL_REASON_CODE = "".
  • LAST_CHANGED_DATE and TIME to now.
  • EPL_LINKED_REASON = "".
  • EPL_AMENDED_FLAG = "N".

EPOD_JOB:

  • EPL_UDF_JOBDETS = "".
  • EPL_INVOICED = "N".
  • EPL_XFER_FLAG = "N".
  • EPL_EMAIL_FLAG = "N".
  • EPL_SIGNED_UNCHECKED = "N".
  • EPL_USER_NOTES = "".
  • EPL_TNCS = "".
  • EPL_XF_VALUES = "".
  • EPL_JOB_STATUS = "".
  • EPL_EXPIRY_DATE/TIME = 0.
  • EPL_XFER_POD_FLAG = "".
  • EPL_GENERATED = "Y".
  • EPL_APPROVED_IND = 0.
  • EPL_APPROVED_EMAIL_IND = 0.
  • EPL_SUBMITTED_IND = 0.
  • EPL_ETA_DATE/TIME = 0.
  • EPL_WORK_ACTUAL = 0.
  • EPL_ODO_START/END = 0.
  • EPL_REDELIVERY_COUNT = 0.
  • EPL_GPS_START/ARRIVAL/END = "".
  • EPL_AD_HOC_RTB_IND = 0.

EPOD_CONTAINER:

  • EPL_CUST_COMMENTS = "".
  • EPL_UDF = "".
  • EPL_ENTRY_METHOD = "".

EPOD_PRODUCT

  • EPL_PRODUCT_QTY_PLANNED = EPL_PRODUCT_QTY_ACTUAL.
  • EPL_PRODUCT_QTY_ACTUAL = 0.
  • EPL_UDF = "".

All other fields on all tables can and should be copied from the source records.

Note Note: If appropriate and efficient to do so, a database package can be created to do this.


Job Import

The OBS XML import processes will be modified to allow the definition of the EPL_LINKED_LOAD_ID field against a load.

EPOD_DATASERVICE.cs has procedure ProcessXMLImport, which is called by the web services and by the AutoImport process. This method calls ProcessLoads.

This will be modified to set EPL_LINKED_LOAD_ID from the value in the XML if this tag is found.

Note Note: This mechanism of linking load is only available through the OBS Load/Job XML format and not through any other import format (i.e. CSV imports and customer-specific imports).


The C-ePOD import and export documentation and schemas will be modified to reflect this change, namely:

  • EPODServer project:
    • EPOD_LOAD.xsd
  • WebApp project:
    • XMLUpload.xsd
  • Documentation in CALIDUS ePOD Assist:
    • CALIDUS ePOD Interfacing
  • Project Documentation in P:\Development\EPOD\Documentation\XML Interface:
    • EPOD Import Mapping v4.x.x.x.xlsx (new versions created for the new system version)
    • EPOD Export Mapping v4.x.x.x.xlsx (new versions created for the new system version)


Admin Site screen

New site-level configuration flags will be added to the Admin Site Maintenance screen (site_header.aspx) to control the new asset counting functionality.

The new flags will be added to the Site Maintenance screen, on a new Warehouse tab, in the indicated positions.

FS 359275 Site.png


The new configuration field, id "chkWarehouse", will control whether the site is a warehouse if checked (value 1) or not (unchecked, value 0, the default).

The field will be sourced and populated from EPOD_SITE.EPL_WAREHOUSE_IND.

The field will have pop-up help (i.e. a title) of "A tick box determining whether this site is a warehouse.".

The field will be labelled "Warehouse", using text sourced from the non-customisable terms in the ResourceClassLibrary project (AppTerms.resx).

All of the following fields should remain disabled unless the warehouse flag is ticked. Warning Warning: where?


The new configuration field, id "txtDepotSite", will determine the site that in linked to the warehouse site. This field will provide a drop-down list of sites that are not marked as a warehouse site, along with a default "Select a Site" option as a zero-length string. The values will be populated in existing page method PopulatePage in site_header.aspx.cs. The items will be populated with a datasource of a list of sites populated from a call to EPOD_SITE.GetDepotSites, passing in a database connection. The datavaluefield is EPL_SITE_ID, and the datatextfield is EPL_DESCRIPTION. The default item will be inserted after that at index 0.

The field will be sourced and populated from EPOD_SITE.EPL_DEPOT_SITE_ID.

The field will have pop-up help (i.e. a title) of "A drop-down list of sites, which determines which depot is linked to the warehouse."

The field will be labelled "Depot Site Code", using text sourced from the non-customisable terms in the ResourceClassLibrary project (AppTerms.resx).


The new configuration field, id "chkBlockExecution", will control whether any loads for this warehouse that are linked to another load blocks the execution of that linked load until this load is either completed or cancelled (checked, value 1) or not (unchecked, value 0, the default).

The field will be sourced and populated from EPOD_SITE.EPL_BLOCK_EXECUTION_IND.

The field will have pop-up help (i.e. a title) of "A tick box determining that any linked loads will be considered blocked from execution if the linked warehouse load is not yet completed."

The field will be labelled "Block Execution", using text sourced from the non-customisable terms in the ResourceClassLibrary project (AppTerms.resx).


The new configuration field, id "ddlGenerateUnloading", will determine whether unloading loads are generated from unloading jobs on a completed depot load, if any. This field will provide a drop-down list of options as follows:

  • Value 0, text "Disabled", the default value.
  • Value 1, text "Generate Load and consolidated jobs".
  • Value 2, text "Generate Load and all jobs".

The field values will be populated from a new EPOD_LIST and EPOD_LIST_ITEMS for name "ddlGenerateUnloading", with the acceptable values stored on EPOD_LIST_ITEMS, through a call to EPODUtils.LoadDDL in existing page method PopulatePage in site_header.aspx.cs.

The field will be sourced and populated from EPOD_SITE.EPL_GENERATE_UNLOADING_LOAD_IND.

The field will have pop-up help (i.e. a title) of "A drop-down list of values, determining how the unloading job will be generated. Options Disabled, Generate Load and all jobs and Generate Load and consolidated jobs."

The field will be labelled "Generate Unloading Load", using text sourced from the non-customisable terms in the ResourceClassLibrary project (AppTerms.resx).


The new configuration field, id "txtUnloadingJobGroup", will determine the job group will be used when generating unloading jobs for the warehouse. This field will provide a drop-down list of job groups for the this site, along with a default "Select a Job Group" option as a zero-length string. The values will be populated in existing page method PopulatePage in site_header.aspx.cs. The items will be populated with a datasource of a list of job groups populated from a call to EPOD_JOB_GROUPS.GetJobGroups, passing in a database connection and the site ID. Note that this list is already available in this method and is used for ddlBulkJobGroup - this should be retrieved once and used as a source for both fields. The datavaluefield is EPL_JOB_GROUP, and the datatextfield is EPL_DESCRIPTION. The default item will be inserted after that at index 0.

The field will be sourced and populated from EPOD_SITE.EPL_UNLOADING_JOB_GROUP.

The field will have pop-up help (i.e. a title) of "A drop-down list of job groups for the site. This job group will be used when generating unloading jobs for the warehouse."

The field will be labelled "Unloading Job Group", using text sourced from the non-customisable terms in the ResourceClassLibrary project (AppTerms.resx).

The new fields will be updated when the site record is saved, in the event handling method saveBTN_Clicked.


Admin Loads Screen

The C-ePOD Loads Maintenance screen (load_header.aspx) will be modified to allow the user to see and identify the linked load ID for sites designated as warehouses ONLY.

FS 359275 Loads.png


When editing or creating a load on a warehouse site, the load will prompt for a load ID. This will be set from integration, but can be changed here.

A new drop-down list field, id ddlLinkedLoadID, will be added in a new row below the existing Route Code. The label will be sourced from a customisable term from the ResourceClassLibrary project (AppTermsCustomised.resx).

The field will only be displayed if the current logged-in site is a warehouse i.e. EPOD_SITE.EPL_WAREHOUSE_IND = 1 and there is a linked depot site i.e. EPOD_SITE.EPL_DEPOT_SITE_ID is not a zero-length string or null. This will be done by setting the field's visible property false in the server code when building the screen initially. This will be completed in server-side code in the existing populatePage method.

This field will be a drop-down list of all the loads. The list will show only loads from the linked depot site, and only those loads that are Pending status, planned for today forward. The list will show the load ID and the route code, to aid in selection.

The data for the loads shown in this list (and only if it is visible) will be populated based on a call to EPOD_LOAD.GetLoadsForLinking to get a datasource. This will populate the list, manually creating options for the select, setting the value to EPL_LOAD_ID and the text to EPL_LOAD_ID and EPL_START_PLANNED_DATE of the EPOD_LOAD in the list. A default option of "Please select load" will be inserted after that as index 0.

Note Note: This form is populated through a sequence of calls through JavaScript and the server code. The list should be populated on demand, as required, whenever the screen is displayed or when the start planned date of this load is changed, through server-side calls.

The height of the pop-up window will be modified when the window is shown without photos and UDF - 50 pixels will be added to the height of all elements.

  • JavaScript function decodePopEditPanel changes the height of the form to 308px when there are no photos - this will be modified to 358px.
  • JavaScript function ShowPanelMPE changes the height of the 3 main elements to 469, 469 and 396 pixels - this will be changed to 519, 519 and 446 respectively.

On saving a load, any selected linked load should be saved into EPOD_LOAD.EPL_LINKED_LOAD_ID, in method edpSaveBtn_UpdateClicked.


Data Modification Script

A data modification script will be required to add drop-down list values to support the new flags against the Site screen, adding the following to EPOD_LISTS:

  • ddlGenerateUnloading.

The acceptable values (specified in the Admin Site section above) will be added to EPOD_LIST_ITEMS with ListId equal to the ID of the record on EPOD_LISTS.

This script will also include the database table modifications specified earlier in this section. A single script will be required, listed in the modules changed.

This will be named {Date}_{Time}-{SysVer}-359275_WarehouseLoadingUnloading.sql, with Date, Time and System version are set from the current date, time and system version respectively.

The script must be added to the EPOD_DatabaseScriptsLibrary project and set to "Copy Always" to output directory.


Android Database Changes

The database creation script DBConnection.js will be modified to add a new field to EPOD_LOAD in function CreateDB:

  • [EPL_READY_IND] int NOT NULL DEFAULT 1

The new version of the built app (expected to be 4050002) will force recreation of the database in the app, by setting lngLastVersionDB to this value in InstallDB in the same script.


The PDA_LOAD object (PDA_LOAD.js) will be modified to add this field to the DAL object, in all functions that require it. The field should default to 1 if not provided (in method InsertAllPDALoadJSON and ProcessLoadUpdateJSON).

In ProcessLoadUpdateJSON, if the value of this field changes from 0 to 1, the process should set a blnLoadReady flag. This should not determine that this is a major or minor update, but it should consider that the load has been updated, by setting blnLoadUpdated to true.

Note Note: The likelihood is that the update will be determined to be a minor update, as only product quantities will have changed. However, it may be possible for a job to be removed from the load, which is considered a major change.

In all cases, the process should return value -1005 if the ready flag has changed, whether this is a major or minor update.


Android Job List

The job list will be modified (in JobList.js) to consider whether the load is ready and therefore not allow the load to be started.

The load information view (LoadDetailsView) will be modified to add whether the load is ready to be started. In the case where the load is not ready (objScreenVars.PDALOAD.EPL_READY_IND == 0), a text label (LoadReadyLabel) will be added to the top of the list, showing the text "NOT READY", sourced from the multilingual text resource files.

Function funCheckCurrentLoad currently checks the progress of the starting of a load, in order to determine whether a Start Load button is displayed (objScreenVars.btnStartLoad). This check will be modified to ensure that the buttons are only removed if objScreenVars.PDALOAD.EPL_READY_IND == 1, and are always displayed if objScreenVars.PDALOAD.EPL_READY_IND == 0.

In funEventAutoUpdate, check for return value -1005. This will be done in the same case as -1001 to -1003 (minor and major updates of a load). At the end of this process, if the value in e.result is -1005, display an alert saying that the load is now ready. remove the new LoadReadyLabel label from the load information view LoadDetailsView.

The click event listener for objScreenVars.btnStartLoad currently checks with the EPOD server whether the load can be started. This will be modified to check whether the load is ready first (checking EPL_READY_IND). If this is 0, the process should trigger an auto-update instead of the normal start load processing.


TEST PLAN

Test Script / Scenario ReferenceWarehouse Loading and UnloadingCall Number(s): 359275 SCR-358307-2/5
Test Script / Scenario DescriptionTesting warehouse loading and unloading functionality.PASS / ISSUES / FAIL
Menu AccessN/A 
Pre-requisitesN/ATested By:
 
Test ObjectiveTo test that; Site can be configured as warehouse sites; warehouse loads can be linked to depot loads and update them correctly when completed; depot loads are blocked by incomplete warehouse loading loads; Unloading loads are created following completion of depot loads.Date:
 


Step Action Result Remarks P/F
1 Admin tests      
  Ensure that there are 2 sites. Ensure that there is a pending load on the depot site for today's date, and at least one for earlier dates.      
1.01 Log on to what will be the warehouse site. Open the Site Maintenance screen. The screen displays a Warehouse tab.    
1.02 Click the Warehouse tab. Click Edit. All options are shown and are disabled except the Warehouse check box, which is unchecked.    
1.03 Check the Warehouse check box. All other fields on the tab are enabled.    
1.04 Set the other fields as expected for the warehouse site. All fields operate as expected. All options are as described in this specification.    
1.05 Click Save. All options are saved.    
1.06 Open the Loads maintenance screen. Create a new load. The pop-up window allows selection of linked loads. The provided list shows only loads for today forward.    
1.07 Select the linked load and enter all other required information. Click Save. The load is saved with the linked load information.    


Step Action Result Remarks P/F
2 Integration tests      
         
2.01 Upload an XML file with a depot delivery load. Upload a second XML file with a warehouse load linked to the depot load. Both loads and all jobs are created. The depot load has no linked load. The warehouse load does.    


Step Action Result Remarks P/F
3 Execution tests      
  Ensure that there is a depot load linked to a warehouse load, and that both are pending. Both loads should be assigned to the same vehicle. Use 2 devices if possible. Ensure that each job has at least two products, except for 1 job, which has no products or containers. Ensure that there are collections and deliveries, and that the collections are planned back to the depot, marked as unloading jobs. Ensure that the site is configured to create unloading jobs consolidated together.      
3.01 Log on to the device on the depot site, selecting the vehicle. The load is shown. A button is displayed to Start Load. The Load Information shows that the load is not ready.    
3.02 Press the Start Load button. The device displays that the load is not ready through an alert.    
3.03 Log on to the device on the warehouse site, selecting the vehicle. The load is shown. The jobs on the list are in the sequence as set against the load (expected to be the reverse of the delivery sequence).    
3.04 Complete the loading of all jobs, doing one job completely, one with a single product quantity changed, one with all products zeroed and one with the job cancelled. The warehouse load is completed. The product quantities are updated where they have been changed. Zero products have been removed. The cancelled job and the job with all products at zero are removed. The job that had no products to begin with remains on the load.    
3.05 Check the depot device. As the auto-update fires, the device will show the user that the load has been updated, and which jobs have been updated, showing an alert that the load is now ready.    
3.06 Accept the updates. The job list is shown only with the correct jobs. The Start Load button is removed.    
3.07 Complete the collection and delivery jobs, changing some product quantities on the collections and deliveries. The products shown on each job reflect what was loaded. Delivery jobs that were not loaded are not on the list. When complete, the device directs the user back to the depot.    
3.08 Complete the unloading with the Deliver All button. The products on the unloading job reflect the collected quantities and any undelivered items being returned to the depot. The load is finished on the device. A warehouse load is created linked to this load, showing each job to be unloaded, consolidated together.    
3.09 Log on to the device on the warehouse site, selecting the vehicle. The unloading load is shown. The unloading job is consolidated as one entry on the list.    
3.10 Complete the unloading of the job. The load is completed. No other loads or jobs are affected.    
3.11 Ensure that the site is configured to create unloading jobs separately. Create another collection/delivery load with multiple jobs and complete the load. A warehouse load is created linked to this load, showing each job to be unloaded, in the reverse of the collection/delivery sequence.    


Step Action Result Remarks P/F
4 Regression tests      
         
4.01 Upload an XML file with a load for the warehouse without a linked load. The load and jobs are created. No linked load is specified.    
4.02 Log on to a depot device and pick up the load. No Start Load button is shown.    
4.03 Log off the device. Change the depot site to use the Start Load button (setting the site flag "Automatically Start Loads" to any of the "Do Not..." options). Log on to a depot device and pick up the load. The Start Load button is shown.    
4.04 Click the Start Load button. The load is accepted and the button is removed.    
4.05 Complete the load on a warehouse depot without a linked load. The load and jobs are completed normally. No other loads are jobs are affected on the linked depot site.    
4.06 Turn off linked job updates on the linked warehouse. Complete a load in the warehouse with a linked load. The load and jobs are completed normally. No other loads are jobs are affected on the linked depot site.    
4.07 Turn off creation of unloading jobs on the linked warehouse. Complete a load with collections in the depot site. The load and jobs are completed normally. No unloading load or jobs are created in the warehouse site.    
4.08 Remove the linked warehouse. Complete a load with collections in the depot site. The load and jobs are completed normally. No unloading load or jobs are created in the warehouse or depot site.    


APPENDIX A: QUOTE & DOCUMENT HISTORY

Cost Details
Activity Estimate
No. of Days
No. of Days Rate per Day (£) Cost (£ Exc. VAT)
Requirements 0.00 0.00 850 £0.00
Change Request Evaluation 0.00 0.00 850 £0.00
Functional Specification 1.75 1.75 850 £1,487.50
Technical Specification 0.00 0.00 850 £0.00
Development 9.50 9.50 850 £8,075.00
Testing and Release 1.50 1.50 850 £1,275.00
Implementation 0.50 0.50 850 £425.00
Project Management 1.00 1.00 850 £850.00
 
TOTAL 14.25 14.25   £12,112.50
Estimate excludes training, release to live and go live support.

References

Ref NoDocument Title & IDVersionDate
1SDD 358307 The Delivery Group Solution Design0.318/07/2019


Glossary

Term or Acronym Meaning
General Definitions
EPOD Electronic Proof of Delivery. The OBSL EPOD system is CALIDUS ePOD. This also comprises the basis of the Service Completion system CALIDUS eServ.
Server The portion of the CALIDUS ePOD/eServ systems that controls all the data and sends information to and receives updates from the mobile device.
Mobile Device; PDA The device used by the driver to perform the jobs. Typically an Android mobile device or tablet.
Site The site usually defines the depot, business or the transport group (carrier). It can be set to any value required by the customer. All transactions data (for example, loads and jobs) and standing data (for example, vehicles and uses) belong to a site. An EPOD user, on a device or in the Admin screen, can only see data for one site at a time.
Load A single journey for the driver with a set of work attached. A load is identified by a unique load ID. This may also be referred to as a worklist or workload.
Job Also Consignment. A single task for the driver as a specific location. This could be the collection of goods or the delivery of goods. Jobs may also be Services (for example, servicing, installing or de-installing a boiler). A job is identified by a unique job ID but can also have other references held against the job (e.g. job code, SO number, customer reference and external reference).
Job Group Jobs must be tagged with a Job Group. All jobs tagged with a single job group are processed in the same way. The job group has configuration associated to it to control such items as: POD/POC Report settings; Pre-Job actions (such as signing at a gatehouse); Post-Job actions (such as who signs for the item, are photos required); configurable fields required for entry for the jobs; Terms and Conditions displayed and; driver/user process (such as photos required for cancellation, comments/notes allowed). The job group can be used for any or all Sites, and the configuration against the job group can be different in each site. Job Groups can also be restricted from Admin and Remote users, so that certain users only see jobs for certain groups.
Container A generic term for any object that contains the items being collected or delivered. Examples of containers are: Pallet; Package; Carton; Item; Cage. A special container "Loose Products" - see Product below. A container is identified by a container ID which is unique to this physical container.
Product A product is any goods that are being collected or delivered where the product has a 'Product Code' which identifies what the product is but which does not uniquely identify each individual item. A product will also have a quantity associated with it to indicate how many items of this 'Product Code' are being collected or delivered. Products can either be processed within a 'Container' or as 'Loose Products' without a 'Container'.
Owner The owner of the order that created the job. Typically this is the sales team that took the order and will be responsible for dealing with queries from the customer regarding the status.
Operator; Executor The Site (depot or carrier) that is executing the load or loads that are involved in the delivery of the items.
Item Related Definitions
Job Code A reference associated with a job or job(s). This reference is common to connected jobs, for example this would be the same on both the collection of goods and the associated delivery of the same goods. Typically this would be the transport unique reference.
SO Number A reference associated with a job which indicates the "Sales Order Number" this job is associated with.
Customer Reference A reference associated with a job which has been provided by and will be recognised by the customer.
External Reference A reference associated with a job which does not match any of the existing references, usually because it has been provided by an external system.
Pallet An alternative for 'Container'. The term pallet is used when the operation only uses portable platforms as the container for goods.
Package An alternative for 'Container'. The term package is used when the operation only uses boxes or wrapping as containers for goods.
Package Code A code representing the type of 'Container'.
Package Desc A description of the type of 'Container'.
Product Code A code which identifies what a product is.
Item A generic term for any individual item that can be collected or delivered. An item can represent a 'Container' or a 'Product'. This can also be used as an alternative for 'Container' when the operation only treats the goods as individual items, i.e. not as identifiable products.
Service Item An item which will be serviced by a service job. See action 'Service'.
Issue Life The time after which an item is no longer fit for purpose.
Pack Size; Case Quantity A product may consist of a full quantity of items, inside a pack. The Pack Size (or Case Quantity) defines the amount of this product contained in a single pack. For example, if there are 85 items to deliver, with a pack size of 24, the number of full packs is determined to be 3 (24 * 3, or 72), with the remaining (13) being 'loose' quantity. This is displayed as "3/13" on the mobile application.
UOM; Item Type Unit of Measure; The major (case) UOM. This can optionally be displayed on the mobile device when changing product quantities.
Product Type A classification of the product being delivered. For example, a company may deliver 7 different mortar products and 80 different concrete slab products. The Product Types may be set to "MORTAR" and "SLABS". This may be used to attach additional configuration, changing the data required when collecting or delivering these product types.
Status Definitions
Status An indicator of how far through the processing a 'Job', 'Container' or 'Product' has progressed.
Pending A status indicating that the processing has not yet started, but is required to be completed.
In Progress A status indicating that processing has started but not yet finished.
Complete A status indicating that the 'Job', 'Container' or 'Product' has been collected or delivered.
Complete (Amended) A status indicating that the 'Job', 'Container' or 'Product' has been collected or delivered but that some changes or amendments have been made. This means that not everything that was planned to be collected or delivered was collected or delivered, some items may have been cancelled or some products may only have had some of the planned quantities collected or delivered.
Complete (Claused) A status indicating that the processing has been finished but that a 'Clause' condition has been recorded for this item.
Claused See 'Complete (Claused)' and action 'Clause'.
Cancelled A status indicating that the processing of this item or job is no longer required.
Cancelled at Collection A status indicating that the delivery of a container or product is no longer required because the associated collection of this container or product was cancelled.
Submitted An optional status that applies only to a 'Job' and which occurs after the 'Job' has been completed. This indicates that any time and expenses information recorded for the 'Job' has been submitted back to the server and can no longer be altered.
Action Definitions
Start An action associated with a 'Job' meaning the driver is about to start the processing of this job or jobs. This action will mark the job(s) with a status of 'In Progress'.
Arrive A conditional action associated with a 'Job' meaning the driver has arrived at the location the goods should be collected from or delivered to.
Continue An action associated with a 'Job' meaning the driver has previously performed the 'Start' and/or 'Arrive' action and has exited the processing screen but is now going to continue the processing.
Collect An action associated with a specific 'Container' or a 'Product' meaning the driver has collected the 'Container' or 'Product'. This action will mark the 'Container' or 'Product' with a status of 'Complete' or 'Complete (Amended)'.
Collect Claused An action associated with a specific 'Container' or a 'Product' meaning the driver has collected the 'Container' or 'Product' but with a condition under which the collection was accepted. This action will accept the clause condition and then mark the 'Container' or 'Product' with a status of 'Complete (Claused)'.
Deliver An action associated with a specific 'Container' or a 'Product' meaning the driver has delivered the 'Container' or 'Product'. This action will mark the 'Container' or 'Product' with a status of 'Complete' or 'Complete (Amended)'.
Deliver Claused An action associated with a specific 'Container' or a 'Product' meaning the driver has delivered the 'Container' or 'Product' but with a condition under which the delivery was accepted. This action will accept the clause condition and then mark the 'Container' or 'Product' with a status of 'Complete (Claused)'.
Clause An action associated with a specific 'Container' or a 'Product' that has already been collected or delivered meaning the collection or delivery has been accepted with a condition. This action will accept the clause condition and then mark the 'Container' or 'Product' with a status of 'Complete (Claused)'.
Cancel An action associated with a 'Job', 'Container' or 'Product' meaning the collection or delivery will not be performed for this 'Job', 'Container' or 'Product'.
Submit An optional action which can conditionally be carried out after a 'Job' has been collection or delivered meaning that any/all required expense or time recording for this 'Job' has been completed and can be submitted back to the server.
Service A service of a service item or items. Typically, Installation, Deinstallation or Service. The process of a service usually encompasses Pre- and Port-work checks, information gathering and diagnosis and resolution notes. Additional references (MC Refs) may also be captured.
Actioned A general term describing completing a job. So, 'Actioned' may be used instead of 'Collected', 'Serviced', 'Delivered'.
Consolidate The action of taking several jobs and linking them together, so they are actioned at the same time with one start, arrive and signature.
Deconsolidate The action of taking a consolidation of jobs and breaking them down into the component jobs again.
Job Swap The action of selecting an existing load not assigned to the user, and picking jobs to transfer onto the user's load.
Signature Capture Usually the final action of a job, where the customer's name and signature are entered.
Other Definitions
Reason Code A code which represents the reason that a job was cancelled or an item was cancelled or claused.
Vehicle The vehicle used for transporting the goods.
Vehicle Checks Also Defect Checks. A series of questions representing the results of checks intended to ensure the vehicle is in an acceptable condition.
Metrics Entry A series of questions to capture information either at the start or end of a 'Load'.
Driver The person performing the collections or deliveries; the user of the device/application.
Engineer The person performing the services; the user of the device/application.
Customer The person/company the goods are being collected from or delivered to.
Signatory The name of the person providing a signature.
T&Cs Terms and Conditions. The T&Cs are shown when signatures are prompted for. The text of the T&Cs are defined in the system itself.
Transfer Load A load select from which to swap jobs to the user's load.
Base E.g. 'Return to Base'. Typically the depot from which the driver departed.
Unplanned Ad Hoc Collection A collection job that is created by the driver, usually after delivering to a customer.
Ad Hoc Container Entry/Scanning The process of adding containers (items) to a job that have not been pre-advised on the job.
Completion Report POD, POC, Service/Work Report.
Load Assignment The action of assigning a vehicle and/or a driver to a load.
Job Assignment The action of putting jobs onto a load.
Collection/Delivery Windows; Access Windows Periods of time between which it is acceptable to deliver or collect from that customer. This has limited use in the system, mostly for reporting purposes.
Location/Map Terms
Lat-Longs; GPS Co-ordinates, GPS Position Latitude and Longitude co-ordinates, specified together as a single entity, identifying the exact position of a location. There are multiple formats - CALIDUS ePOD uses decimal notation, for example "53.3490818,-2.8521498" identifies the OBS Logistics office building in Liverpool.
GPS Global Positioning System; the satellite system used to obtain a GPS position, for use with navigation and location positioning.
Geocode; Reverse Geocode Geocoding is the process of obtaining lat-longs from an address. Reverse Geocoding is the process obtaining an address from lat-longs.
Geofence; Geofence Break A Geofence is a perimeter around a location. A Geofence Break occurs when a device passes through this perimeter on entry or exit from the location.


Authorised By


Murray Middleton

OBS Project Manager

_____________________________

Stuart Mylchreest

Customer Representative

_____________________________