Skip to content
2 changes: 2 additions & 0 deletions packetery/CHANGE_LOG.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@

v3.4
- Updated: When Packeta pick-up point selected using widget, save and display proper information about place, street, city, zip (front/admin)
- Updated: Display proper information in Packeta Orders administration list and detail
- Added: Information about the selected pickup point to emails for e-shop owner.
- Updated: Loading the widget javascript library only on the checkout page.
- Updated: Multiple issues form PrestaShop validator resolved.
Expand Down
17 changes: 16 additions & 1 deletion packetery/controllers/admin/PacketeryOrderGridController.php
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,22 @@ public function __construct()
// there has to be `id` for 'editable' to work; a.* is prepended
$this->_select = '
`a`.`id_order` AS `id`,
`po`.`is_cod`, `po`.`name_branch`, `po`.`is_ad`, `po`.`zip`, `po`.`exported`,
`po`.`is_cod`,
IF (
`po`.`point_place` IS NULL,
`po`.`name_branch`,
CASE
WHEN `po`.`is_carrier` = 0 AND `po`.`is_ad` = 0
THEN CONCAT(
`po`.`point_place`,
\' (\', `po`.`id_branch`, \')\'
)
ELSE `po`.`point_place`
END
) AS `name_branch`,
`po`.`is_ad`,
`po`.`zip`,
`po`.`exported`,
IF(`po`.`tracking_number` IS NOT NULL, `po`.`tracking_number`, \'\') AS `tracking_number`,
CONCAT(LEFT(c.`firstname`, 1), \'. \', c.`lastname`) AS `customer`,
IF(`a`.`valid`, 1, 0) AS `badge_success`,
Expand Down
4 changes: 4 additions & 0 deletions packetery/libs/Module/Installer.php
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,10 @@ private function installDatabase()
`price_total` decimal(20,6) NULL,
`price_cod` decimal(20,6) NULL,
`age_verification_required` tinyint(1) unsigned NULL,
`point_place` varchar(70) NULL,
`point_street` varchar(120) NULL,
`point_zip` varchar(10) NULL,
`point_city` varchar(70) NULL,
UNIQUE(`id_order`),
UNIQUE(`id_cart`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;';
Expand Down
42 changes: 42 additions & 0 deletions packetery/libs/Order/OrderDetailView.php
Original file line number Diff line number Diff line change
Expand Up @@ -61,4 +61,46 @@ public function addPacketStatus(\Smarty $smarty, array $packeteryOrder)
// else TODO: after adding a new column code_text to the db, return the value from the db
}
}

/**
* @param array $packeteryOrder
* @param bool $isCarrier
* @param bool $isAddressDelivery
* @param string|null $packeteryCarrierNameBranch
*
* @return array<int, string|null>
*/
public function getPickupPointOrDeliveryAddress(
array $packeteryOrder,
bool $isCarrier,
bool $isAddressDelivery,
?string $packeteryCarrierNameBranch
): array {
$pointOrderAddressName = $packeteryCarrierNameBranch ?? $packeteryOrder['name_branch'];
$pointOrderAddress = null;

if ($isCarrier === true && $isAddressDelivery === false) {
$pointOrderAddressName = $packeteryCarrierNameBranch;
$pointOrderAddress = $packeteryOrder['name_branch'];
}

if ($isCarrier === false && $isAddressDelivery === false) {
$pointOrderAddressName = $packeteryOrder['name_branch'];
if ($packeteryOrder['point_place']) {
$pointOrderAddressName = $packeteryOrder['point_place'];
}

if (
$packeteryOrder['point_street']
|| $packeteryOrder['point_city']
|| $packeteryOrder['point_zip']
) {
$pointOrderAddress = ($packeteryOrder['point_street'] ? $packeteryOrder['point_street'] . ', ' : '');
$pointOrderAddress .= ($packeteryOrder['point_city'] ? $packeteryOrder['point_city'] . ' ' : '');
$pointOrderAddress .= ($packeteryOrder['point_zip'] ? $packeteryOrder['point_zip'] . ' ' : '');
}
}

return [$pointOrderAddressName, $pointOrderAddress];
}
}
17 changes: 12 additions & 5 deletions packetery/libs/Order/OrderDetailsUpdater.php
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -246,11 +246,18 @@ public function processPickupPointChange(array &$fieldsToUpdate)
return;
}

$fieldsToUpdate = array_merge($fieldsToUpdate, [
'id_branch' => (int) $pickupPoint->id,
'name_branch' => $pickupPoint->name,
'currency_branch' => $pickupPoint->currency,
]);
$fieldsToUpdate = array_merge(
$fieldsToUpdate,
[
'id_branch' => (int) $pickupPoint->id,
'name_branch' => $pickupPoint->name,
'currency_branch' => $pickupPoint->currency,
'point_place' => $pickupPoint->place,
'point_street' => $pickupPoint->street,
'point_city' => $pickupPoint->city,
'point_zip' => $pickupPoint->zip,
]
);

if ($pickupPoint->pickupPointType === 'external') {
$fieldsToUpdate['is_carrier'] = 1;
Expand Down
4 changes: 4 additions & 0 deletions packetery/libs/Order/OrderRepository.php
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,10 @@ public function getOrderWithCountry($orderId)
`po`.`price_total`,
`po`.`price_cod`,
`po`.`age_verification_required`,
`po`.`point_place`,
`po`.`point_street`,
`po`.`point_city`,
`po`.`point_zip`,
`c`.`iso_code` AS `ps_country`
FROM `' . _DB_PREFIX_ . 'packetery_order` `po`
JOIN `' . _DB_PREFIX_ . 'orders` `o` ON `o`.`id_order` = `po`.`id_order`
Expand Down
9 changes: 9 additions & 0 deletions packetery/libs/Order/OrderSaver.php
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,10 @@ private function savePickupPointInCart()
$pickupPointType = (\Tools::getIsset('pickup_point_type') ? \Tools::getValue('pickup_point_type') : 'internal');
$widgetCarrierId = (\Tools::getIsset('widget_carrier_id') ? \Tools::getValue('widget_carrier_id') : null);
$carrierPickupPointId = (\Tools::getIsset('carrier_pickup_point_id') ? \Tools::getValue('carrier_pickup_point_id') : null);
$pointPlace = (\Tools::getIsset('point_place') ? \Tools::getValue('point_place') : null);
$pointStreet = (\Tools::getIsset('point_street') ? \Tools::getValue('point_street') : null);
$pointCity = (\Tools::getIsset('point_city') ? \Tools::getValue('point_city') : null);
$pointZip = (\Tools::getIsset('point_zip') ? \Tools::getValue('point_zip') : null);

$packeteryCarrier = $this->carrierRepository->getPacketeryCarrierById((int) $prestashopCarrierId);
$isCod = $packeteryCarrier['is_cod'];
Expand All @@ -183,7 +187,12 @@ private function savePickupPointInCart()
'house_number' => null,
'latitude' => null,
'longitude' => null,
'point_place' => $pointPlace !== null ? $this->orderRepository->db->escape($pointPlace) : null,
'point_street' => $pointStreet !== null ? $this->orderRepository->db->escape($pointStreet) : null,
'point_city' => $pointCity !== null ? $this->orderRepository->db->escape($pointCity) : null,
'point_zip' => $pointZip !== null ? $this->orderRepository->db->escape($pointZip) : null,
];

if ($pickupPointType === 'external') {
$packeteryOrderFields['is_carrier'] = 1;
$packeteryOrderFields['id_branch'] = (int) $widgetCarrierId;
Expand Down
50 changes: 39 additions & 11 deletions packetery/packetery.php
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -746,22 +746,35 @@ public function hookDisplayCarrierExtraContent(array $params)
$pickupPointType = 'internal';
$carrierId = '';
$carrierPickupPointId = '';
$pointPlace = '';
$pointStreet = '';
$pointZip = '';
$pointCity = '';
if ($orderData) {
$name_branch = $orderData['name_branch'];
$currency_branch = $orderData['currency_branch'];
$carrierPickupPointId = $orderData['carrier_pickup_point'];

if ((bool) $orderData['is_carrier'] === true) {
$id_branch = $orderData['carrier_pickup_point']; // to be consistent with widget behavior
$pickupPointType = 'external';
$carrierId = $orderData['id_branch'];
} else {
$id_branch = $orderData['id_branch'];
$pointPlace = ($orderData['point_place'] ?? '');
$pointStreet = ($orderData['point_street'] ?? '');
$pointZip = ($orderData['point_zip'] ?? '');
$pointCity = ($orderData['point_city'] ?? '');
}
}
$this->context->smarty->assign('id_branch', $id_branch);
$this->context->smarty->assign('name_branch', $name_branch);
$this->context->smarty->assign('currency_branch', $currency_branch);
$this->context->smarty->assign('pickup_point_type', $pickupPointType);
$this->context->smarty->assign('point_place', $pointPlace);
$this->context->smarty->assign('point_street', $pointStreet);
$this->context->smarty->assign('point_zip', $pointZip);
$this->context->smarty->assign('point_city', $pointCity);
$this->context->smarty->assign('packeta_carrier_id', $carrierId);
$this->context->smarty->assign('carrier_pickup_point_id', $carrierPickupPointId);
$this->context->smarty->assign('baseuri', Packetery\Module\Helper::getBaseUri());
Expand Down Expand Up @@ -958,9 +971,33 @@ public function packeteryHookDisplayAdminOrder($params)

$isAddressDelivery = (bool) $packeteryOrder['is_ad'];
$this->context->smarty->assign('isAddressDelivery', $isAddressDelivery);
$this->context->smarty->assign('pickupPointOrAddressDeliveryName', $packeteryOrder['name_branch']);
$isExported = (bool) $packeteryOrder['exported'];

$isCarrier = (bool) $packeteryOrder['is_carrier'];

/** @var Packetery\Carrier\CarrierRepository $carrierRepository */
$carrierRepository = $this->diContainer->get(Packetery\Carrier\CarrierRepository::class);
$packeteryCarrier = $carrierRepository->getPacketeryCarrierById((int) $packeteryOrder['id_carrier']);
if ((bool) $packeteryCarrier === false) {
$oldCarrier = new Carrier($packeteryOrder['id_carrier']);
$newCarrier = Carrier::getCarrierByReference($oldCarrier->id_reference);
if ($newCarrier) {
$packeteryCarrier = $carrierRepository->getPacketeryCarrierById($newCarrier->id);
}
}

/** @var Packetery\Order\OrderDetailView $orderDetailView */
$orderDetailView = $this->diContainer->get(Packetery\Order\OrderDetailView::class);
[$pointOrderAddressName, $pointOrderAddress] = $orderDetailView->getPickupPointOrDeliveryAddress(
$packeteryOrder,
$isCarrier,
$isAddressDelivery,
$packeteryCarrier['name_branch']
);

$this->context->smarty->assign('pointOrderAddressName', $pointOrderAddressName);
$this->context->smarty->assign('pointOrderAddress', $pointOrderAddress);

$isExported = (bool) $packeteryOrder['exported'];
if ($isExported === false) {
$orderDetails = [
'length' => Tools::getValue('length') ?: $packeteryOrder['length'],
Expand All @@ -972,15 +1009,6 @@ public function packeteryHookDisplayAdminOrder($params)

$this->context->smarty->assign('isExported', $isExported);

/** @var Packetery\Carrier\CarrierRepository $carrierRepository */
$carrierRepository = $this->diContainer->get(Packetery\Carrier\CarrierRepository::class);
$packeteryCarrier = $carrierRepository->getPacketeryCarrierById((int) $packeteryOrder['id_carrier']);
if ((bool) $packeteryCarrier === false) {
$oldCarrier = new Carrier($packeteryOrder['id_carrier']);
$newCarrier = Carrier::getCarrierByReference($oldCarrier->id_reference);
$packeteryCarrier = $carrierRepository->getPacketeryCarrierById($newCarrier->id);
}

/** @var Packetery\Tools\ConfigHelper $configHelper */
$configHelper = $this->diContainer->get(Packetery\Tools\ConfigHelper::class);
$apiKey = $configHelper->getApiKey();
Expand Down
18 changes: 17 additions & 1 deletion packetery/upgrade/upgrade-3.4.0.php
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

use Packetery\Module\Helper;
use Packetery\Tools\ConfigHelper;
use Packetery\Tools\DbTools;

if (!defined('_PS_VERSION_')) {
exit;
Expand Down Expand Up @@ -44,5 +45,20 @@ function upgrade_module_3_4_0(Packetery $module): bool
}
}

return true;
$sql = [
'ALTER TABLE `' . _DB_PREFIX_ . 'packetery_order`
ADD `point_place` varchar(70) NULL,
ADD `point_street` varchar(120) NULL AFTER `point_place`,
ADD `point_zip` varchar(10) NULL AFTER `point_street`,
ADD `point_city` varchar(70) NULL AFTER `point_zip`',
];

$dbTools = $module->diContainer->get(DbTools::class);
$executeResult = $dbTools->executeQueries(
$sql,
$module->l('Exception raised during Packetery module upgrade:', 'upgrade-3.4.0'),
true
);

return $executeResult !== false;
}
10 changes: 9 additions & 1 deletion packetery/views/js/back.js
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,15 @@ $(document).ready(function () {
Packeta.Widget.pick(widgetOptionsData['apiKey'], function (pickupPoint) {
if (pickupPoint !== null) {
$('.packetery form input[name="pickup_point"]').val(JSON.stringify(pickupPoint));
$('.picked-delivery-place').text(pickupPoint.name);
if (pickupPoint.place) {
$('#picked-place-name').text(pickupPoint.place);
}

$('#picked-place').text(
pickupPoint.street + ', '
+ pickupPoint.city + ' '
+ pickupPoint.zip
);
}
}, widgetOptions);
});
Expand Down
70 changes: 58 additions & 12 deletions packetery/views/js/front.js
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,11 @@ PacketaModule.runner = {
var pickupPointType = $widgetParent.find(".packeta-pickup-point-type").val();
var widgetCarrierId = $widgetParent.find(".packeta-carrier-id").val();
var carrierPickupPointId = $widgetParent.find(".packeta-carrier-pickup-point-id").val();
var pickupPlace = $widgetParent.find(".packeta-place").val();
var pickupStreet = $widgetParent.find(".packeta-street").val();
var pickupCity = $widgetParent.find(".packeta-city").val();
var pickupZip = $widgetParent.find(".packeta-zip").val();

if (branchId) {
PacketaModule.ajax.savePickupPointInCart(
prestashopCarrierId,
Expand All @@ -119,6 +124,10 @@ PacketaModule.runner = {
widgetCarrierId,
carrierPickupPointId,
branchCurrency,
pickupPlace,
pickupStreet,
pickupCity,
pickupZip,
PacketaModule.ui.toggleSubmit
);
} else {
Expand Down Expand Up @@ -312,16 +321,28 @@ PacketaModule.ui = {
if (pickupPoint == null) {
return;
}

$widgetParent.find('.packeta-branch-id').val(pickupPoint.id);
$widgetParent.find('.packeta-branch-name').val(pickupPoint.name);
$widgetParent.find('.packeta-branch-currency').val(pickupPoint.currency);
$widgetParent.find('.packeta-pickup-point-type').val(pickupPoint.pickupPointType);
$widgetParent.find('.packeta-carrier-id').val(pickupPoint.carrierId);
$widgetParent.find('.packeta-carrier-pickup-point-id').val(pickupPoint.carrierPickupPointId);
$widgetParent.find('.packeta-place').val(pickupPoint.place);
$widgetParent.find('.packeta-street').val(pickupPoint.street);
$widgetParent.find('.packeta-city').val(pickupPoint.city);
$widgetParent.find('.packeta-zip').val(pickupPoint.zip);

// let the customer know which branch he picked
$widgetParent.find('.picked-delivery-place').html(pickupPoint.name);
$widgetParent.find('#picked-place-name').text(pickupPoint.place);
$widgetParent.find('#picked-place').text(
pickupPoint.street + ', '
+ pickupPoint.city + ' '
+ pickupPoint.zip
);

if (pickupPoint.pickupPointType === 'external') {
$widgetParent.find('.picked-delivery-place').text(pickupPoint.name);
}

var prestashopCarrierId = packeteryModulesManager.getCarrierId($selectedInput);

Expand All @@ -334,6 +355,10 @@ PacketaModule.ui = {
pickupPoint.carrierId,
pickupPoint.carrierPickupPointId,
pickupPoint.currency,
pickupPoint.place,
pickupPoint.street,
pickupPoint.city,
pickupPoint.zip,
function (jsonResponse) {
if (jsonResponse.result === true) {
PacketaModule.ui.toggleSubmit();
Expand Down Expand Up @@ -498,16 +523,37 @@ PacketaModule.ajax = {
});
},

savePickupPointInCart: function (prestashopCarrierId, branchId, branchName, pickupPointType, widgetCarrierId, carrierPickupPointId, branchCurrency, onSuccess) {
return PacketaModule.ajax.post('savePickupPointInCart', {
'prestashop_carrier_id': prestashopCarrierId,
'id_branch': branchId,
'name_branch': branchName,
'currency_branch': branchCurrency,
'pickup_point_type': pickupPointType,
'widget_carrier_id': widgetCarrierId,
'carrier_pickup_point_id': carrierPickupPointId
}, onSuccess);
savePickupPointInCart: function (
prestashopCarrierId,
branchId,
branchName,
pickupPointType,
widgetCarrierId,
carrierPickupPointId,
branchCurrency,
pointPlace,
pointStreet,
pointCity,
pointZip,
onSuccess
) {
return PacketaModule.ajax.post(
'savePickupPointInCart',
{
'prestashop_carrier_id': prestashopCarrierId,
'id_branch': branchId,
'name_branch': branchName,
'currency_branch': branchCurrency,
'pickup_point_type': pickupPointType,
'widget_carrier_id': widgetCarrierId,
'carrier_pickup_point_id': carrierPickupPointId,
'point_place': pointPlace,
'point_street': pointStreet,
'point_city': pointCity,
'point_zip': pointZip,
},
onSuccess
);
},

saveAddressInCart: function (address, onSuccess) {
Expand Down
Loading