/** * Creates a ShipConfirm request. * * @param string $validation * @param Shipment $shipment * @param ShipmentRequestLabelSpecification|null $labelSpec * @param ShipmentRequestReceiptSpecification|null $receiptSpec * * @return string */ private function createConfirmRequest($validation, Shipment $shipment, ShipmentRequestLabelSpecification $labelSpec = null, ShipmentRequestReceiptSpecification $receiptSpec = null) { $xml = new DOMDocument(); $xml->formatOutput = true; // Page 45 $container = $xml->appendChild($xml->createElement('ShipmentConfirmRequest')); // Page 45 $request = $container->appendChild($xml->createElement('Request')); $node = $xml->importNode($this->createTransactionNode(), true); $request->appendChild($node); $request->appendChild($xml->createElement('RequestAction', 'ShipConfirm')); $request->appendChild($xml->createElement('RequestOption', $validation ?: 'nonvalidate')); // Page 47 $shipmentNode = $container->appendChild($xml->createElement('Shipment')); if ($shipment->getDescription()) { $shipmentNode->appendChild($xml->createElement('Description', $shipment->getDescription())); } $returnService = $shipment->getReturnService(); if (isset($returnService)) { $node = $shipmentNode->appendChild($xml->createElement('ReturnService')); $node->appendChild($xml->createElement('Code', $returnService->getCode())); } if ($shipment->getDocumentsOnly()) { $shipmentNode->appendChild($xml->createElement('DocumentsOnly')); } $shipperNode = $shipmentNode->appendChild($xml->createElement('Shipper')); $shipperNode->appendChild($xml->createElement('Name', $shipment->getShipper()->getName())); if ($shipment->getShipper()->getAttentionName()) { $shipperNode->appendChild($xml->createElement('AttentionName', $shipment->getShipper()->getAttentionName())); } if ($shipment->getShipper()->getCompanyName()) { $shipperNode->appendChild($xml->createElement('CompanyDisplayableName', $shipment->getShipper()->getCompanyName())); } $shipperNode->appendChild($xml->createElement('ShipperNumber', $shipment->getShipper()->getShipperNumber())); if ($shipment->getShipper()->getTaxIdentificationNumber()) { $shipperNode->appendChild($xml->createElement('TaxIdentificationNumber', $shipment->getShipper()->getTaxIdentificationNumber())); } if ($shipment->getShipper()->getPhoneNumber()) { $shipperNode->appendChild($xml->createElement('PhoneNumber', $shipment->getShipper()->getPhoneNumber())); } if ($shipment->getShipper()->getFaxNumber()) { $shipperNode->appendChild($xml->createElement('FaxNumber', $shipment->getShipper()->getFaxNumber())); } if ($shipment->getShipper()->getEMailAddress()) { $shipperNode->appendChild($xml->createElement('EMailAddress', $shipment->getShipper()->getEMailAddress())); } $shipperNode->appendChild($shipment->getShipper()->getAddress()->toNode($xml)); $shipToNode = $shipmentNode->appendChild($xml->createElement('ShipTo')); $shipToNode->appendChild($xml->createElement('CompanyName', $shipment->getShipTo()->getCompanyName())); if ($shipment->getShipTo()->getAttentionName()) { $shipToNode->appendChild($xml->createElement('AttentionName', $shipment->getShipTo()->getAttentionName())); } if ($shipment->getShipTo()->getPhoneNumber()) { $shipToNode->appendChild($xml->createElement('PhoneNumber', $shipment->getShipTo()->getPhoneNumber())); } if ($shipment->getShipTo()->getFaxNumber()) { $shipToNode->appendChild($xml->createElement('FaxNumber', $shipment->getShipTo()->getFaxNumber())); } if ($shipment->getShipTo()->getEMailAddress()) { $shipToNode->appendChild($xml->createElement('EMailAddress', $shipment->getShipTo()->getEMailAddress())); } $addressNode = $shipment->getShipTo()->getAddress()->toNode($xml); if ($shipment->getShipTo()->getLocationID()) { $addressNode->appendChild($xml->createElement('LocationID', strtoupper($shipment->getShipTo()->getLocationID()))); } $shipToNode->appendChild($addressNode); if ($shipment->getShipFrom()) { $shipFromNode = $shipmentNode->appendChild($xml->createElement('ShipFrom')); $shipFromNode->appendChild($xml->createElement('CompanyName', $shipment->getShipFrom()->getCompanyName())); if ($shipment->getShipFrom()->getAttentionName()) { $shipFromNode->appendChild($xml->createElement('AttentionName', $shipment->getShipFrom()->getAttentionName())); } if ($shipment->getShipFrom()->getPhoneNumber()) { $shipFromNode->appendChild($xml->createElement('PhoneNumber', $shipment->getShipFrom()->getPhoneNumber())); } if ($shipment->getShipFrom()->getFaxNumber()) { $shipFromNode->appendChild($xml->createElement('FaxNumber', $shipment->getShipFrom()->getFaxNumber())); } $shipFromNode->appendChild($shipment->getShipFrom()->getAddress()->toNode($xml)); } if ($shipment->getSoldTo()) { $soldToNode = $shipmentNode->appendChild($xml->createElement('SoldTo')); if ($shipment->getSoldTo()->getOption()) { $soldToNode->appendChild($xml->createElement('Option', $shipment->getSoldTo()->getOption())); } $soldToNode->appendChild($xml->createElement('CompanyName', $shipment->getSoldTo()->getCompanyName())); if ($shipment->getSoldTo()->getAttentionName()) { $soldToNode->appendChild($xml->createElement('AttentionName', $shipment->getSoldTo()->getAttentionName())); } if ($shipment->getSoldTo()->getPhoneNumber()) { $soldToNode->appendChild($xml->createElement('PhoneNumber', $shipment->getSoldTo()->getPhoneNumber())); } if ($shipment->getSoldTo()->getFaxNumber()) { $soldToNode->appendChild($xml->createElement('FaxNumber', $shipment->getSoldTo()->getFaxNumber())); } if ($shipment->getSoldTo()->getAddress()) { $soldToNode->appendChild($shipment->getSoldTo()->getAddress()->toNode($xml)); } } $alternate = $shipment->getAlternateDeliveryAddress(); if (isset($alternate)) { $shipmentNode->appendChild($alternate->toNode($xml)); } if ($shipment->getPaymentInformation()) { $paymentNode = $shipmentNode->appendChild($xml->createElement('PaymentInformation')); if ($shipment->getPaymentInformation()->getPrepaid()) { $node = $paymentNode->appendChild($xml->createElement('Prepaid')); $node = $node->appendChild($xml->createElement('BillShipper')); $billShipper = $shipment->getPaymentInformation()->getPrepaid()->getBillShipper(); if (isset($billShipper) && $shipment->getPaymentInformation()->getPrepaid()->getBillShipper()->getAccountNumber()) { $node->appendChild($xml->createElement('AccountNumber', $shipment->getPaymentInformation()->getPrepaid()->getBillShipper()->getAccountNumber())); } elseif (isset($billShipper) && $shipment->getPaymentInformation()->getPrepaid()->getBillShipper()->getCreditCard()) { $ccNode = $node->appendChild($xml->createElement('CreditCard')); $ccNode->appendChild($xml->createElement('Type', $shipment->getPaymentInformation()->getPrepaid()->getBillShipper()->getCreditCard()->getType())); $ccNode->appendChild($xml->createElement('Number', $shipment->getPaymentInformation()->getPrepaid()->getBillShipper()->getCreditCard()->getNumber())); $ccNode->appendChild($xml->createElement('ExpirationDate', $shipment->getPaymentInformation()->getPrepaid()->getBillShipper()->getCreditCard()->getExpirationDate())); if ($shipment->getPaymentInformation()->getPrepaid()->getBillShipper()->getCreditCard()->getSecurityCode()) { $ccNode->appendChild($xml->createElement('SecurityCode', $shipment->getPaymentInformation()->getPrepaid()->getBillShipper()->getCreditCard()->getSecurityCode())); } if ($shipment->getPaymentInformation()->getPrepaid()->getBillShipper()->getCreditCard()->getAddress()) { $ccNode->appendChild($shipment->getPaymentInformation()->getPrepaid()->getBillShipper()->getCreditCard()->getAddress()->toNode($xml)); } } } elseif ($shipment->getPaymentInformation()->getBillThirdParty()) { $node = $paymentNode->appendChild($xml->createElement('BillThirdParty')); $btpNode = $node->appendChild($xml->createElement('BillThirdPartyShipper')); $btpNode->appendChild($xml->createElement('AccountNumber', $shipment->getPaymentInformation()->getBillThirdParty()->getAccountNumber())); $tpNode = $btpNode->appendChild($xml->createElement('ThirdParty')); $addressNode = $tpNode->appendChild($xml->createElement('Address')); $thirdPartAddress = $shipment->getPaymentInformation()->getBillThirdParty()->getThirdPartyAddress(); if (isset($thirdPartAddress) && $shipment->getPaymentInformation()->getBillThirdParty()->getThirdPartyAddress()->getPostalCode()) { $addressNode->appendChild($xml->createElement('PostalCode', $shipment->getPaymentInformation()->getBillThirdParty()->getThirdPartyAddress()->getPostalCode())); } $addressNode->appendChild($xml->createElement('CountryCode', $shipment->getPaymentInformation()->getBillThirdParty()->getThirdPartyAddress()->getCountryCode())); } elseif ($shipment->getPaymentInformation()->getFreightCollect()) { $node = $paymentNode->appendChild($xml->createElement('FreightCollect')); $brNode = $node->appendChild($xml->createElement('BillReceiver')); $brNode->appendChild($xml->createElement('AccountNumber', $shipment->getPaymentInformation()->getFreightCollect()->getAccountNumber())); if ($shipment->getPaymentInformation()->getFreightCollect()->getBillReceiverAddress()) { $addressNode = $brNode->appendChild($xml->createElement('Address')); $addressNode->appendChild($xml->createElement('PostalCode', $shipment->getPaymentInformation()->getFreightCollect()->getBillReceiverAddress()->getPostalCode())); } } elseif ($shipment->getPaymentInformation()->getConsigneeBilled()) { $paymentNode->appendChild($xml->createElement('ConsigneeBilled')); } // TODO: create ItemizedPaymentInformation class and required subclasses for node processing // } elseif ($shipment->getItemizedPaymentInformation()) { // $paymentNode = $shipmentNode->appendChild($xml->createElement('ItemizedPaymentInformation')); } if ($shipment->getGoodsNotInFreeCirculationIndicator()) { $shipmentNode->appendChild($xml->createElement('GoodsNotInFreeCirculationIndicator')); } if ($shipment->getMovementReferenceNumber()) { $shipmentNode->appendChild($xml->createElement('MovementReferenceNumber', $shipment->getMovementReferenceNumber())); } $serviceNode = $shipmentNode->appendChild($xml->createElement('Service')); $serviceNode->appendChild($xml->createElement('Code', $shipment->getService()->getCode())); if ($shipment->getService()->getDescription()) { $serviceNode->appendChild($xml->createElement('Description', $shipment->getService()->getDescription())); } if ($shipment->getInvoiceLineTotal()) { $shipmentNode->appendChild($shipment->getInvoiceLineTotal()->toNode($xml)); } if ($shipment->getNumOfPiecesInShipment()) { $shipmentNode->appendChild($xml->createElement('NumOfPiecesInShipment', $shipment->getNumOfPiecesInShipment())); } if ($shipment->getRateInformation()) { $node = $shipmentNode->appendChild($xml->createElement('RateInformation')); $node->appendChild($xml->createElement('NegotiatedRatesIndicator')); } foreach ($shipment->getPackages() as $package) { $shipmentNode->appendChild($xml->importNode($package->toNode($xml), true)); } $shipmentServiceOptions = $shipment->getShipmentServiceOptions(); if (isset($shipmentServiceOptions)) { $shipmentNode->appendChild($shipmentServiceOptions->toNode($xml)); } $referenceNumber = $shipment->getReferenceNumber(); if (isset($referenceNumber)) { $shipmentNode->appendChild($referenceNumber->toNode($xml)); } $referenceNumber2 = $shipment->getReferenceNumber2(); if (isset($referenceNumber2)) { $shipmentNode->appendChild($referenceNumber2->toNode($xml)); } if ($labelSpec) { $container->appendChild($xml->importNode($this->compileLabelSpecificationNode($labelSpec), true)); } $shipmentIndicationType = $shipment->getShipmentIndicationType(); if (isset($shipmentIndicationType)) { $shipmentNode->appendChild($shipmentIndicationType->toNode($xml)); } if ($receiptSpec) { $container->appendChild($xml->importNode($this->compileReceiptSpecificationNode($receiptSpec), true)); } return $xml->saveXML(); }
/** * Build a shipment from an IsotopeCollection * @param IsotopeProductCollection * @return stdClass */ protected function buildShipmentFromCollection(IsotopeProductCollection $objCollection) { //Get the Iso Config $Config = Isotope::getConfig(); //Create the shipment $Shipment = new Ups_Shipment(); // Create the service $Service = new Ups_Service(); $Service->setCode($this->ups_enabledService); $Service->setDescription($GLOBALS['TL_LANG']['tl_iso_shipping']['ups_service'][$this->ups_enabledService]); $Shipment->setService($Service); //Build Shipper information $Shipper = new Ups_Shipper(); $Shipper->setShipperNumber($Config->UpsAccountNumber); //ShipFrom Address $ShipFromAddress = static::buildAddress($Config); //Assign to Shipper $Shipper->setAddress($ShipFromAddress); $Shipment->setShipper($Shipper); //ShipFrom Object $ShipFrom = new Ups_ShipFrom(); $ShipFrom->setAddress($ShipFromAddress); $ShipFrom->setCompanyName($Config->company); $Shipment->setShipFrom($ShipFrom); //ShipTo Address $objShippingAddress = $objCollection->getShippingAddress(); $ShipToAddress = static::buildAddress($objShippingAddress); //ShipTo Object $ShipTo = new Ups_ShipTo(); $ShipTo->setAddress($ShipToAddress); $ShipTo->setAttentionName($objShippingAddress->firstname . ' ' . $objShippingAddress->lastname); $Shipment->setShipTo($ShipTo); $Shipment->setPackages($this->buildPackages($objCollection)); return $Shipment; }