diff --git a/api/config_sample.php b/api/config_sample.php index 9be9cf64f..4fb94bc03 100644 --- a/api/config_sample.php +++ b/api/config_sample.php @@ -264,7 +264,6 @@ $use_shipping_service_incoming_shipments = null; $use_shipping_service_redirect = null; $use_shipping_service_redirect_incoming_shipments = null; - $shipping_service_api_url = null; $shipping_service_api_user = null; $shipping_service_api_password = null; $shipping_service_app_url = null; diff --git a/api/src/Page/Shipment.php b/api/src/Page/Shipment.php index 9ae571535..cd62cfe95 100644 --- a/api/src/Page/Shipment.php +++ b/api/src/Page/Shipment.php @@ -1016,6 +1016,7 @@ function _transfer_dewar() function _create_dewars_shipment_request( array $dewars, string $proposal, + int $session_number, int $external_id, int $shipping_id, string $callback_url="" @@ -1025,6 +1026,8 @@ function _create_dewars_shipment_request( foreach (array_values($dewars) as $dew) { $package = [ "external_id" => (int) $dew['DEWARID'], + "container_name" => $dew['NAME'], + "serial_number" => $dew['MANUFACTURERSERIALNUMBER'], "shippable_item_type" => "CRYOGENIC_DRY_SHIPPER_CASE", "line_items" => [ [ @@ -1063,6 +1066,7 @@ function _create_dewars_shipment_request( $protocol = isset($_SERVER["HTTPS"]) ? 'https' : 'http'; $shipment_request_info = array( "proposal" => $proposal, + "session_number" => $session_number, "external_id" => $external_id, "origin_url" => "{$protocol}://{$_SERVER['SERVER_NAME']}{$server_port}/shipments/sid/{$shipping_id}", "packages" => $packages @@ -1083,6 +1087,7 @@ function _dispatch_dewar_shipment_request($dewar) $dewars = [$dewar]; $proposal = $dewar['PROPOSAL']; + $session_number = $dewar['VIS']; $external_id = (int) $dewar['DEWARID']; $shipping_id = (int) $dewar['SHIPPINGID']; $token = Utils::generateRandomMd5(); @@ -1092,7 +1097,7 @@ function _dispatch_dewar_shipment_request($dewar) ); $callback_url = "/api/shipment/dewars/confirmdispatch/did/{$external_id}/token/{$token}"; - $external_shipping_id = $this->_create_dewars_shipment_request($dewars, $proposal, $external_id, $shipping_id, $callback_url); + $external_shipping_id = $this->_create_dewars_shipment_request($dewars, $proposal, $session_number, $external_id, $shipping_id, $callback_url); $this->db->pq( "UPDATE dewar SET externalShippingIdFromSynchrotron=:1 WHERE dewarid=:2", @@ -1110,11 +1115,7 @@ function _dispatch_dewar_in_shipping_service($dispatch_info, $dewar) global $facility_country; global $facility_phone; global $facility_contact; - global $shipping_service_api_url; global $facility_email; - if (!isset($shipping_service_api_url)) { - throw new Exception("Could not send request to shipping service: shipping_service_api_url not set"); - } # Create shipment $shipment_data = array( @@ -1137,7 +1138,12 @@ function _dispatch_dewar_in_shipping_service($dispatch_info, $dewar) "shipment_reference" => $dispatch_info['VISIT'], "external_id" => (int) $dispatch_info['DEWARID'], "journey_type" => ShippingService::JOURNEY_FROM_FACILITY, - "packages" => array(array("external_id" => (int) $dispatch_info['DEWARID'])) + "packages" => array( + array( + "external_id" => (int) $dispatch_info['DEWARID'], + "container_name" => $dewar['NAME'], + ) + ) ); # Split up address. Necessary as address is a single field in ispyb @@ -1194,12 +1200,18 @@ function _dispatch_dewar() } $dew = $this->db->pq( - "SELECT d.dewarid, d.barcode, d.storagelocation, d.dewarstatus, d.externalShippingIdFromSynchrotron, s.shippingid, p.proposalcode, CONCAT(p.proposalcode, p.proposalnumber) as proposal, count(distinct c.containerId) as num_pucks, count(b.blsampleId) as num_samples + "SELECT d.dewarid, d.barcode, d.storagelocation, d.dewarstatus, d.externalShippingIdFromSynchrotron, + s.shippingid, p.proposalcode, CONCAT(p.proposalcode, p.proposalnumber) as proposal, + count(distinct c.containerId) as num_pucks, count(b.blsampleId) as num_samples, + ifnull(bls.visit_number, 0) as vis, IF(d.facilitycode, d.facilitycode, d.code) as name, + dr.manufacturerserialnumber FROM dewar d INNER JOIN shipping s ON s.shippingid = d.shippingid INNER JOIN proposal p ON p.proposalid = s.proposalid LEFT JOIN container c on c.dewarid = d.dewarid LEFT JOIN BLSample b on b.containerId = c.containerId + LEFT JOIN blsession bls ON bls.sessionid = d.firstexperimentid + LEFT JOIN dewarregistry dr ON dr.dewarregistryid = d.dewarregistryid WHERE d.dewarid=:1 and p.proposalid=:2", array($this->arg('DEWARID'), $this->proposalid) ); @@ -3299,10 +3311,15 @@ function _book_shipment_in_shipping_service($user, $shipment, $dewars, $journey_ "contact_email" => trim($user["email"]) ); $shipment_data = array( - "shipment_reference" => $shipment["PROP"], + "shipment_reference" => $shipment["PROP"] . '-' . ($shipment["session_number"] ?? 0), "external_id" => $shipment['SHIPPINGID'], "packages" => array_map( - function($dewar) {return array("external_id" => $dewar["DEWARID"]);}, + function($dewar) { + return array( + "external_id" => $dewar["DEWARID"], + "container_name" => $dewar["NAME"], + ); + }, $dewars ) ); @@ -3356,6 +3373,7 @@ function _create_shipment_shipment_request($shipment, array $dewars): int $external_shipping_id = $this->_create_dewars_shipment_request( $dewars, $shipment['PROP'], + isset($shipment['session_number']) ? $shipment['session_number'] : 0, $shipping_id, $shipping_id, $callback_url @@ -3400,15 +3418,25 @@ function _create_awb() $args = array_merge(array($ship['SHIPPINGID']), $this->arg('DEWARS')); $dewars = $this->db->pq( - "SELECT d.dewarid, d.weight, IF(d.facilitycode, d.facilitycode, d.code) as name, count(distinct c.containerId) as num_pucks, count(b.blsampleId) as num_samples + "SELECT d.dewarid, d.weight, IF(d.facilitycode, d.facilitycode, d.code) as name, + count(distinct c.containerId) as num_pucks, count(b.blsampleId) as num_samples, + bls.visit_number, dr.manufacturerserialnumber FROM dewar d LEFT JOIN container c on c.dewarid = d.dewarid LEFT JOIN BLSample b on b.containerId = c.containerId + LEFT JOIN blsession bls on bls.sessionid = d.firstexperimentid + LEFT JOIN dewarregistry dr on dr.dewarregistryid = d.dewarregistryid WHERE d.shippingid=:1 AND d.dewarid IN (:" . implode(',:', $ids) . ") GROUP BY d.dewarid", $args ); + foreach ($dewars as $d) { + if ($d['VISIT_NUMBER']) { + $ship['session_number'] = $d['VISIT_NUMBER']; + } + } + if ( Utils::getValueOrDefault($use_shipping_service_incoming_shipments) && in_array($this->arg('COUNTRY'), $facility_courier_countries) diff --git a/api/src/Shipment/ShippingService.php b/api/src/Shipment/ShippingService.php index ade0a35ce..eb5974bb7 100644 --- a/api/src/Shipment/ShippingService.php +++ b/api/src/Shipment/ShippingService.php @@ -40,10 +40,9 @@ function _build_headers() function __construct() { - global $shipping_service_api_url; global $shipping_service_app_url; - $this->shipping_api_url = $shipping_service_api_url; $this->shipping_app_url = $shipping_service_app_url; + $this->shipping_api_url = $shipping_service_app_url . "/api"; }