Last active
May 30, 2016 09:53
-
-
Save winzou/20fb58051437983d517422959d6d0cee to your computer and use it in GitHub Desktop.
TNTBundle usage
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace Caissin\CoreBundle\TNT; | |
use Caissin\CoreBundle\Entity\Address; | |
use Caissin\CoreBundle\Entity\Shipment; | |
use libphonenumber\PhoneNumberUtil; | |
use TNTExpress\Model\ParcelRequest; | |
use TNTExpress\Model\PickUpRequest; | |
use TNTExpress\Model\Receiver; | |
use TNTExpress\Model\Sender; | |
use winzou\Bundle\TNTExpressBundle\Entity\ExpeditionRequest; | |
class ExpeditionFactory | |
{ | |
/** | |
* @var PhoneNumberUtil | |
*/ | |
protected $phoneUtil; | |
public function __construct(PhoneNumberUtil $phoneUtil) | |
{ | |
$this->phoneUtil = $phoneUtil; | |
} | |
public function createExpeditionFromShipment(Shipment $shipment, array $parameters) | |
{ | |
return $this->createExpedition( | |
$this->createSender($parameters['sender']), | |
$this->createReceiver($shipment->getOrder()->getShippingAddress(), $shipment->getOrder()->getCustomer()->getEmail()), | |
$this->createParcelRequest($shipment), | |
$this->createPickupRequest($parameters['pickup']), | |
$parameters['account_number'] | |
); | |
} | |
public function createExpedition(Sender $sender, Receiver $receiver, ParcelRequest $parcelRequest, PickUpRequest $pickupRequest, $accountNumber) | |
{ | |
$expeditionRequest = new ExpeditionRequest(); | |
// If we're in the weekend, or if later than 2pm, then we ship the day after | |
if (6 <= date('N') || 14 < date('G')) { | |
$date = new \Datetime('+1 weekdays'); | |
} else { | |
$date = new \Datetime(); | |
} | |
$expeditionRequest->setShippingDate($date); | |
$expeditionRequest->setAccountNumber($accountNumber); | |
$expeditionRequest->setSender($sender); | |
$expeditionRequest->setReceiver($receiver); | |
$expeditionRequest->setQuantity(1); | |
$expeditionRequest->setParcelsRequest(array($parcelRequest)); | |
$expeditionRequest->setPickupRequest($pickupRequest); | |
return $expeditionRequest; | |
} | |
public function createSender(array $parameters) | |
{ | |
$sender = new Sender(); | |
$sender->setName(substr($parameters['name'], 0, 32)); | |
$sender->setAddress1(substr($parameters['address1'], 0, 32)); | |
$sender->setAddress2(substr($parameters['address2'], 0, 32)); | |
$sender->setZipCode($parameters['zipcode']); | |
$sender->setCity(substr($parameters['city'], 0, 27)); | |
return $sender; | |
} | |
public function createReceiver(Address $address, $email) | |
{ | |
$receiver = new Receiver(); | |
$receiver->setAddress1(substr($address->getStreet(), 0, 32)); | |
$receiver->setAddress2(substr($address->getStreet2(), 0, 32)); | |
$receiver->setZipCode($address->getPostcode()); | |
$receiver->setCity(substr($address->getCity(), 0, 27)); | |
$receiver->setContactFirstName(substr($address->getFirstName(), 0, 12)); | |
$receiver->setContactLastName(substr($address->getLastName(), 0, 19)); | |
$receiver->setEmailAddress(substr($email, 0, 80)); | |
$receiver->setInstructions(substr($address->getIndication(), 0, 60)); | |
$receiver->setPhoneNumber('0'.$this->phoneUtil->parse($address->getPhoneNumber(), 'FR')->getNationalNumber()); | |
if (!$address->isDropoffPoint()) { | |
if (null === $address->getCompany()) { | |
$receiver->setType('INDIVIDUAL'); | |
} else { | |
$receiver->setType('ENTERPRISE'); | |
$receiver->setName(substr($address->getCompany(), 0, 32)); | |
} | |
} else { | |
$receiver->setType('DROPOFFPOINT'); | |
$receiver->setTypeId($address->getTntCode()); | |
$receiver->setName(substr($address->getCompany(), 0, 32)); | |
} | |
return $receiver; | |
} | |
public function createParcelRequest(Shipment $shipment) | |
{ | |
$parcelRequest = new ParcelRequest(); | |
$parcelRequest->setSequenceNumber(1); | |
$parcelRequest->setWeight($shipment->getShippingWeight()); | |
$parcelRequest->setCustomerReference(substr($shipment->getOrder()->getNumber(), 0, 30)); | |
return $parcelRequest; | |
} | |
public function createPickupRequest(array $parameters) | |
{ | |
return new PickUpRequest( | |
$parameters['phone_number'], | |
$parameters['email'], | |
$parameters['opening_hour'] | |
); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** @var Caissin\CoreBundle\TNT\ExpeditionFactory $expeditionFactory */ | |
$expeditionFactory = $this->get('core.tnt.expedition_factory'); | |
$expeditionRequest = $expeditionFactory->createExpeditionFromShipment( | |
$shipment, | |
$this->container->getParameter('caissin.tnt') | |
); | |
/** @var winzou\Bundle\TNTExpressBundle\Expedition\ExpeditionManager */ | |
$expeditionManager = $this->get('winzou.tnt.expedition.manager'); | |
$expedition = $expeditionManager->createExpedition($expeditionRequest); | |
$shipment->setExpedition($expedition); | |
$shipment->setTracking($expedition->getParcelResponse(0)->getParcelNumber()); | |
$em = $this->getDoctrine()->getManager(); | |
$em->persist($expeditionRequest); | |
$em->persist($expedition); | |
$em->flush(); | |
// To print the bordereau: | |
return new Response( | |
$expedition->getPDFLabels(), | |
200, | |
array( | |
'Content-Type' => 'application/pdf', | |
'Content-Disposition' => 'attachment; filename="BT-'.$shipment->getOrder()->getNumber().'.pdf"', | |
) | |
); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
core.listener.shipment_tracker: | |
class: Caissin\CoreBundle\EventListener\ShipmentTrackingListener | |
tags: | |
# Calling this listener when shipment is delivered to customer | |
- { name: kernel.event_listener, event: winzou.tntexpress.events.deliveryDate, method: updateShipmentState } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** @var winzou\Bundle\TNTExpressBundle\Tracking\DispatchTrackingManager */ | |
$trackingManager = $this->getContainer()->get('winzou.tnt.tracking.dispatch_manager'); | |
$trackingManager->updateEvents($shipment->getExpedition()->getParcelResponse()); // will dispatch events if state changes |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment