Files
2026-04-28 15:13:50 +02:00

1781 lines
85 KiB
PHP
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* Provide a admin area view for the plugin
*
* This file is used to markup the admin-facing aspects of the plugin.
*
* @link https://example.com
* @since 1.0.0
*
* @package Polkurier
* @subpackage Polkurier/admin/partials
*/
use Polkurier\Util\Arr;
use Polkurier\Util\OrderTools;
require_once __DIR__ . '/../../includes/PolkurierPackage.php';
require_once __DIR__ . '/../../includes/PolkurierAPI.php';
wp_enqueue_script(uniqid('pk', true), Polkurier::instance()->getPluginDirUrl('admin/js/select2.min.js'), ['jquery'], $this->version, false);
wp_enqueue_script(uniqid('pk', true), Polkurier::instance()->getPluginDirUrl('admin/js/select2.pl.js'), ['jquery'], $this->version, false);
function pk_get_post_param($path) {
global $_POST;
return Arr::getByPath($_POST, $path);
}
function pk_normalize_number($number) {
$number = preg_replace('/\,/i', '.', $number);
return (float)preg_replace('/[^0-9\.]+/i', '', $number);
}
$api = $this->get_polkurier_api();
if (isset($_GET['action']) && $_GET['action'] == 'json') {
require_once dirname(__FILE__) . '/../../includes/polkurier-json.php';
}
if (isset($_GET['action']) && $_GET['action'] == 'label') {
require_once dirname(__FILE__) . '/../../includes/polkurier-label.php';
}
$packagesList = null;
if (isset($_POST['packages_list'])) {
$packagesList = json_decode(stripslashes($_POST['packages_list']), true, JSON_UNESCAPED_SLASHES);
}
if (isset($_GET['order_id'])) {
$isOrderDefined = PolkurierOrder::hasOrderDefined((int)$_GET['order_id']);
$order = PolkurierOrder::getOrderById((int)$_GET['order_id']);
}
$isPost = $_SERVER['REQUEST_METHOD'] === 'POST';
if ($isPost) {
$order = wc_get_order((int)$_GET['order_id']);
$order_data = $order->get_data();
$sender = PolkurierAddress::getAddressById($_POST['polkurier_address']);
$coverAddress = PolkurierAddress::getCoverAddressById($_POST['polkurier_cover_address']);
$sender->address["machinename"] = Arr::get($_POST, 'sender_machinename', '');
if ($sender->address["machinename"] === '' || $sender->address["machinename"] === '---') {
$sender->address["machinename"] = null;
}
$recipient = new PolkurierAddress();
$recipient->address["company"] = (string)Arr::getByPath($_POST, 'recipient.company');
$recipient->address["person"] = (string)Arr::getByPath($_POST, 'recipient.person');
$recipient->address["street"] = (string)Arr::getByPath($_POST, 'recipient.street');
$recipient->address["housenumber"] = (string)Arr::getByPath($_POST, 'recipient.housenumber');
$recipient->address["postcode"] = (string)Arr::getByPath($_POST, 'recipient.postcode');
$recipient->address["city"] = (string)Arr::getByPath($_POST, 'recipient.city');
$recipient->address["country"] = (string)Arr::getByPath($_POST, 'recipient.country');
$recipient->address["phone"] = (string)Arr::getByPath($_POST, 'recipient.phone');
$recipient->address["email"] = (string)Arr::getByPath($_POST, 'recipient.email');
$recipient->address["machinename"] = Arr::get($_POST, 'recipient_machinename', '');
if ($recipient->address["machinename"] === '' || $recipient->address["machinename"] === '---') {
$recipient->address["machinename"] = null;
}
$postPackages = array();
foreach ($packagesList as $postPackage) {
$package = new PolkurierPackage();
$package->width = $postPackage['width'];
$package->height = $postPackage['height'];
$package->depth = $postPackage['depth'];
$package->weight = $postPackage['weight'];
$package->count = $postPackage['count'];
$package->nonstandard = $postPackage['nonstandard'];
$package->type = $postPackage['pkgtype'];
$postPacakges [] = $package;
}
$orderId = (int)$_GET['order_id'];
$carrier = $_POST['polkurier_carrier_id'];
$insurance = pk_normalize_number($_POST['polkurier_ubezpieczenie']);
$pick = Arr::get($_POST, "polkurier_pickup_date", '');
$pick2 = explode("-", $pick);
$pickup = [
"pickupdate" => Arr::get($_POST, 'polkurier_date'),
"pickuptimefrom" => Arr::get($pick2, 0),
"pickuptimeto" => Arr::get($pick2, 1)
];
if (isset($_POST['polkurier_pickup_type']) && $_POST['polkurier_pickup_type'] === 'SELF_PICKUP') {
$pickup['nocourierorder'] = true;
}
if (isset($_POST['polkurier_pobranie'])) {
$codAmount = pk_normalize_number($_POST['polkurier_pobranie']);
if ($codAmount > 0) {
$pobranie = [
"codtype" => $_POST['polkurier_pobranie_zwrot'],
"codamount" => $codAmount,
"codbankaccount" => '##POLKURIERMAGIC##' . Arr::get($_POST, 'polkurier_account'),
"return_cod" => $_POST['polkurier_pobranie_rodzaj']
];
} else {
$pobranie = null;
}
}
// Usługi dodatkowe
$courierServices = [];
$availableServices = ['ROD', 'COURIER_WITH_LABEL', 'WEEK_COLLECTION', 'SMS_NOTIFICATION_RECIPIENT', 'SMS_NOTIFICATION_RECIPIENT_WITH_NAME'];
foreach ($availableServices as $service) {
if (pk_get_post_param('courierservice.' . $service) === '1') {
$courierServices[$service] = true;
}
}
$description = $_POST['polkurier_description'];
$orderDetails = array();
$response = $api->createOrder($carrier, $postPacakges, $sender, $recipient, $insurance, $pickup, $description, $pobranie, $courierServices, $orderDetails, $coverAddress);
if (!$api->lastError) {
if (!empty($_POST["sender_point_name"])) {
$sender->address["point_name"] = trim($_POST["sender_point_name"]);
}
if (!empty($_POST["recipient_point_name"])) {
$recipient->address["point_name"] = trim($_POST["recipient_point_name"]);
}
$order = PolkurierOrder::createFromApiResponse($response, $carrier, $sender, $recipient, isset($_POST['polkurier_pobranie']) ? ((float)$_POST['polkurier_pobranie']) : null, $orderDetails);
$order->wp_order_id = $orderId;
$order->save();
$_GET['action'] = 'list'; // override
}
}
if (isset($_GET["action"]) && $_GET['action'] === 'create') {
if ($isOrderDefined)
Polkurier_Admin::api_error_notice("Uwaga! Dla zamówienia #" . (int)$_GET['order_id'] . " zdefiniowano już zamówienie Polkurier. " .
"Aby przejrzeć istniejące zamówienia, przejdź do <a href=\"admin.php?page=polkurier_packages\">listy paczek</a>.");
$orderId = (int)$_GET['order_id'];
$order = wc_get_order($orderId);
$order_data = $order->get_data();
$option_value = get_option($this->option_name . '_default_carrier_id');
$api = $this->get_polkurier_api();
$carriers = $api->getAvailableCarriers(true);
$couriersMessages = $api->getCouriersMessages();
$couriersMessagesByCourier = Arr::groupBy($couriersMessages, 'courier');
$selectedCarrier = Arr::get($_POST, 'polkurier_carrier_id', '');
$orderSelectedCarrier = (string)get_post_meta($orderId, '_polkurier_provider', true);
if (empty($orderSelectedCarrier)) {
$shippingMethod = OrderTools::getShippingMethod($order);
if ($shippingMethod !== null && OrderTools::isOwnShippingMethod($shippingMethod)) {
$orderSelectedCarrier = $shippingMethod->getPolkurierId();
}
}
if (empty($selectedCarrier) && !empty($orderSelectedCarrier)) {
$selectedCarrier = $orderSelectedCarrier;
}
if (empty($selectedCarrier)) {
$selectedCarrier = get_option($this->option_name . '_default_carrier_id');
}
$orderSelectedPointId = Arr::get($_POST, 'recipient_machinename', '');
$orderSelectedPointLabel = '';
if (empty($orderSelectedPointId)) {
// Dane o punkcie odbioru z zamówienia
$orderSelectedPointId = get_post_meta($orderId, '_polkurier_point_id', true);
$orderSelectedPointLabel = get_post_meta($orderId, '_polkurier_point_label', true);
if (empty($orderSelectedPointId)) {
// Legacy
$orderSelectedPointId = get_post_meta($orderId, '_parcel_machine_id');
$orderSelectedPointLabel = get_post_meta($orderId, '_parcel_machine_desc', true);
}
if (empty($orderSelectedPointId)) {
// Jeśli brak w $order
$orderSelectedPointId = get_post_meta((int)$_GET['order_id'], '_polkurier_point_id', true);
$orderSelectedPointLabel = get_post_meta((int)$_GET['order_id'], '_polkurier_point_label', true);
}
// Dane o punkcie odbioru ze wtyczki "Inpost Paczkomaty" by Damian Ziarnik
// @see https://pl.wordpress.org/plugins/inpost-paczkomaty/
if (empty($orderSelectedPointId)) {
$orderSelectedPointId = get_post_meta($orderId, 'paczkomat_key', true);
$orderSelectedPointLabel = get_post_meta($orderId, 'Wybrany paczkomat', true);
if (!empty($orderSelectedPointId)) {
$selectedCarrier = 'INPOST_PACZKOMAT';
}
}
}
// Jeśli InPost zagraniczny
if ($selectedCarrier === 'INPOST_PACZKOMAT' && $order_data['shipping']['country'] !== 'PL') {
$selectedCarrier = 'INPOST_INTERNATIONAL';
}
$codAmount = isset($_POST['polkurier_pobranie']) ? $_POST['polkurier_pobranie'] : null;
if ($codAmount === null && $order->get_payment_method() === 'cod') {
$codAmount = $order->get_total();
}
$ajaxNonce = wp_create_nonce('polkurier-nonce');
$ajaxUrl = admin_url('admin-ajax.php');
$mapToken = (new \Polkurier\MapsTokenManager())->getToken();
if (!empty($_GET['debug']) && $_GET['debug'] === 'true') {
?>
<div class="pk-card pk-bg-white pk-my-4 pk-mx-2 pk-shadow-2">
<div class="pk-card-header">DEBUG INFO</div>
<div class="pk-card-body">
<pre class="pk-card pk-bg-light-gray" id="debug-info-content" style="max-height: 500px; overflow: auto; white-space: pre-wrap">
<?php
var_dump([
'$codAmount' => $codAmount,
'$orderSelectedPointId' => $orderSelectedPointId,
'$orderSelectedPointLabel' => $orderSelectedPointLabel,
'$selectedCarrier' => $selectedCarrier,
'POST_META' => get_post_meta($orderId),
'ORDER' => $order,
]);
?>
</pre>
<div class="pk-text-right">
<button type="button" id="debug-info-copy">Skopiuj wszystko</button>
</div>
</div>
</div>
<script>
const copyButton = document.getElementById('debug-info-copy');
const container = document.getElementById('debug-info-content');
if (copyButton && container) {
copyButton.addEventListener('click', function () {
POLKURIER.copyToClipboard(container.innerHTML).then(function () {
alert('Skopiowano dane');
});
});
}
</script>
<?php
} else {
?>
<div class="pk-text-right pk-opacity-20">
<a href="<?php echo $_SERVER['REQUEST_URI'] . '&debug=true' ?>" class="pk-text-dark">Debug info</a>
</div>
<?php
}
?>
<script>
var CARRIERS = <?php echo json_encode($carriers) ?>;
var getCurrentCarrier = function () {
var currentCourierId = jQuery('[name="polkurier_carrier_id"]:checked').val();
for (var i = 0; i < CARRIERS.length; i++) {
if (CARRIERS[i].servicecode === currentCourierId) {
return CARRIERS[i];
}
}
return null;
};
var getPickupType = function () {
return pickupType = jQuery('[name="polkurier_pickup_type"]').val();
};
</script>
<form method="post" id="pk-order-form">
<h2>Nowa przesyłka dla zamówienia #<?php echo $order_data['id'] ?></h2>
<input type="hidden" name="packages_list" id="packages_list"
data-json="<?php echo is_array($packagesList) ? htmlspecialchars(json_encode($packagesList), ENT_QUOTES, 'UTF-8') : null ?>">
<table class="form-table">
<tbody>
<tr>
<th scope="row"><label for="polkurier_type">Typ przesyłki</label></th>
<td>
<input type="radio" name="polkurier_type" id="polkurier_type_1" value="koperta">
<label for="polkurier_type_1">koperta</label><br/>
<input type="radio" name="polkurier_type" id="polkurier_type_2" value="paczka" checked>
<label for="polkurier_type_2">paczka</label><br/>
<input type="radio" name="polkurier_type" id="polkurier_type_3" value="paleta">
<label for="polkurier_type_3">paleta</label>
</td>
</tr>
<tr>
<th scope="row"><label for="polkurier_template">Użyj szablonu paczki</label></th>
<td>
<?php $packages = get_option('polkurier_packages'); ?>
<select id="polkurier_template_id" name="polkurier_template_id"
data-json="<?php echo htmlspecialchars(json_encode($packages), ENT_QUOTES, 'UTF-8') ?>">
<option value="">pomiń</option>
<?php if (is_array($packages)) foreach ($packages as $key => $pak): ?>
<option
value="<?php echo $key ?>"
class="polkurier-paczka polkurier-paczka-<?php echo $pak->type ?>"
data-type="<?php echo $pak->type ?>"
><?php echo $pak ?></option>
<?php endforeach; ?>
</select></td>
</tr>
<tr id="new_package">
<th scope="row"><label for="polkurier_package">Wymiary paczki</label></th>
<td>
<table class="form-table">
<tbody>
<tr>
<th scope="row"><label for="polkurier_height">Wysokość (cm)</label></th>
<td><input type="number" name="polkurier_height" id="polkurier_height" value=""></td>
</tr>
<tr>
<th scope="row"><label for="polkurier_width">Szerokość (cm)</label></th>
<td><input type="number" name="polkurier_width" id="polkurier_width" value=""></td>
</tr>
<tr>
<th scope="row">
<label for="polkurier_depth">Głębokość (cm)</label>
</th>
<td>
<input type="number" name="polkurier_depth" id="polkurier_depth" value="">
</td>
</tr>
<tr>
<th scope="row"><label for="polkurier_weight">Waga (kg)</label></th>
<td><input type="number" name="polkurier_weight" id="polkurier_weight" value=""></td>
</tr>
<tr>
<th scope="row"><label for="polkurier_count">Ilość</label></th>
<td><input type="number" name="polkurier_count" id="polkurier_count" value="1"></td>
</tr>
<tr>
<th scope="row"><label for="polkurier_nonstandard">Niestandardowa</label></th>
<td><input type="checkbox" name="polkurier_nonstandard" id="polkurier_nonstandard"
value="1"></td>
</tr>
</tbody>
</table>
<button class="button button-primary" onclick="return fn_polkurier_add_package()">Dodaj paczkę do
zamówienia
</button>
<div id="packages_description"></div>
</td>
</tr>
<tr>
<th scope="row">
<label for="polkurier_carrier">
Przewoźnik
</label>
</th>
<td>
<?php foreach ($carriers as $carrier): ?>
<div id="polkurier-courier-<?= $carrier["servicecode"] ?>" data-id="<?= $carrier["servicecode"] ?>" class="polkurier-courier-container">
<input
id="polkurier_default_id_<?php echo $carrier["servicecode"] ?>"
type="radio"
class="polkurier_carrier"
name="polkurier_carrier_id"
value="<?php echo $carrier["servicecode"] ?>"
required
<?php echo $selectedCarrier === $carrier["servicecode"] ? 'checked' : '' ?>
/>
<label for="polkurier_default_id_<?php echo $carrier["servicecode"] ?>">
<?php echo $carrier['name'] ?>
</label>
<div id="courier-<?= $carrier["servicecode"] ?>-messages-container" class="courier-messages-container" style="display: none;">
<?php
if (isset($couriersMessagesByCourier[$carrier["servicecode"]])) {
foreach ($couriersMessagesByCourier[$carrier["servicecode"]] as $message) {
?>
<div class="notice e-notice e-notice--<?= strtolower($message['severity']) ?>" >
<div class="e-notice__content">
<?= $message['message'] ?>
</div>
</div>
<?PHP
}
}
?>
</div>
</div>
<?php endforeach; ?>
</td>
</tr>
<tr>
<td></td>
<td>
<div id="polkurier-evaluation-spinner"></div>
<div id="polkurier-evaluation-error"></div>
</td>
</tr>
<tr id="pickuptime" class="">
<th scope="row">
<label for="polkurier_package">
Odbiór paczki od nadawcy
</label>
</th>
<td>
<table class="form-table">
<tbody>
<tr>
<th scope="row">
<label for="polkurier_pickup_type">Sposób odbioru</label>
</th>
<td>
<select name="polkurier_pickup_type" id="polkurier_pickup_type">
<option value="COURIER_PICKUP" <?php echo isset($_POST['polkurier_pickup_type']) && $_POST['polkurier_pickup_type'] === 'COURIER_PICKUP' ? 'selected' : NULL ?>>Zamawiam odbiór przesyłek </option>
<option value="SELF_PICKUP" <?php echo isset($_POST['polkurier_pickup_type']) && $_POST['polkurier_pickup_type'] === 'SELF_PICKUP' ? 'selected' : NULL ?>>Samodzielnie dostarczę przesyłkę do punktu</option>
</select>
</td>
<script>
var LABELS = {
INPOST: 'Samodzielnie dostarczę przesyłkę do punktu',
INPOST_PACZKOMAT: 'Samodzielnie dostarczę przesyłkę do paczkomatu',
INPOST_PACZKOMAT_ALLEGRO: 'Samodzielnie dostarczę przesyłkę do paczkomatu',
INPOST_PACZKOMAT_ECONOMY: 'Samodzielnie dostarczę przesyłkę do paczkomatu',
INPOST_PACZKOMAT_KURIER: 'Samodzielnie dostarczę przesyłkę do paczkomatu',
INPOST_INTERNATIONAL: 'Samodzielnie dostarczę przesyłkę do paczkomatu',
POCZTEX_PUNKT: 'Samodzielnie dostarczę przesyłkę do placówki Poczty Polskiej',
POCZTEX_PUNKT_PUNKT: 'Samodzielnie dostarczę przesyłkę do placówki Poczty Polskiej',
PACZKA_W_RUCHU: 'Samodzielnie dostarczę przesyłkę punktu RUCH',
DPD_POINT: 'Samodzielnie dostarczę przesyłkę do punktu.',
DHL_POINT: 'Samodzielnie dostarczę przesyłkę do punktu POP',
UPS_AP_POINT_POINT: 'Samodzielnie dostarczę przesyłkę do punktu UPS',
UPS_AP_POINT_COURIER: 'Samodzielnie dostarczę przesyłkę do punktu UPS',
DEFAULT: 'Zamówię kuriera samodzielnie przez telefon'
};
var SELF_PICKUP = [
'INPOST_PACZKOMAT',
'INPOST_PACZKOMAT_ALLEGRO',
'INPOST_PACZKOMAT_ECONOMY',
'INPOST_PACZKOMAT_KURIER',
'INPOST_INTERNATIONAL',
'POCZTEX_PUNKT',
'POCZTEX_PUNKT_PUNKT',
'PACZKA_W_RUCHU',
'DPD_POINT',
'UPS_AP_POINT_POINT',
'UPS_AP_POINT_COURIER',
];
var changePickupType = function (type) {
jQuery('option[value="' + type + '"]').prop('selected', true);
jQuery('[name="polkurier_pickup_type"]').trigger('change');
};
var updatePickupOptions = function () {
var currentCourier = getCurrentCarrier() || {};
var additionalData = currentCourier.additional_data || {};
var pickup = additionalData.pickup || {};
var option = jQuery('option[value="SELF_PICKUP"]');
option.text(LABELS[currentCourier.servicecode] || LABELS.DEFAULT);
if (pickup.nocourierorder && pickup.nocourierorder.available === true) {
option.prop('disabled', false).show();
} else {
changePickupType('COURIER_PICKUP');
option.prop('disabled', true).hide();
}
var disallowCourierPickup = pickup.pickupdate && pickup.pickupdate.status === false
jQuery('option[value="COURIER_PICKUP"]').prop('disabled', disallowCourierPickup).toggle(!disallowCourierPickup);
};
var updatePickupSelect = function () {
var pickupType = jQuery('[name="polkurier_pickup_type"]').val();
if (pickupType === 'SELF_PICKUP') {
jQuery('#polkurier_date').prop('disabled' , true);
jQuery('#polkurier_pickup_date_select').prop('disabled' , true);
} else {
jQuery('#polkurier_date').prop('disabled', false);
jQuery('#polkurier_pickup_date_select').prop('disabled', false);
}
};
var onChangeCourierSelect = function () {
var currentCourier = getCurrentCarrier() || {};
if (currentCourier && SELF_PICKUP.indexOf(currentCourier.servicecode) !== -1) {
changePickupType('SELF_PICKUP');
} else {
changePickupType('COURIER_PICKUP');
}
updatePickupOptions();
};
jQuery(document)
.on('change', '[name="polkurier_carrier_id"]', onChangeCourierSelect)
.on('change', '[name="polkurier_pickup_type"]', updatePickupSelect)
.ready(function () {
updatePickupOptions();
updatePickupSelect();
});
updatePickupOptions();
updatePickupSelect();
onChangeCourierSelect();
</script>
</tr>
<tr>
<th scope="row"><label for="polkurier_date">Data</label></th>
<td><input required type="date" class="polkurier_dates" name="polkurier_date"
id="polkurier_date"
value="<?php echo isset($_POST['polkurier_date']) ? $_POST['polkurier_date'] : NULL ?>">
</td>
</tr>
<tr>
<th scope="row">
<label for="polkurier_pickup_date_select">
Godzina
</label>
</th>
<td>
<span id="polkurier_pickup_date"></span>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr id="polkurier-sender-point-container">
<th scope="row">
<label id="polkurier-sender-point-label">Paczkomat nadawcy</label>
</th>
<td>
<div>
<select name="sender_machinename" id="polkurier-sender-point" data-type="sender">
<option value="">---</option>
<?php if (!empty($_POST['sender_machinename'])): ?>
<option value="<?php echo $_POST['sender_machinename'] ?>" data-default="1" data-provider="<?php echo $selectedCarrier ?>" selected>
<?php echo $_POST['sender_point_name'] ?>
</option>
<?php endif; ?>
</select>
<button type="button" class="button button-primary" id="polkurier-sender-point-map-button">Mapa</button>
<button type="button" class="button button-primary" id="polkurier-sender-default-button">Ustaw domślny</button>
</div>
</td>
</tr>
<tr id="polkurier-recipient-point-container">
<th scope="row">
<label id="polkurier-recipient-point-label">Paczkomat odbiorcy</label>
</th>
<td>
<div>
<select name="recipient_machinename" id="polkurier-recipient-point" data-type="recipient">
<option value="">---</option>
<?php if (!empty($orderSelectedPointId)): ?>
<option value="<?php echo $orderSelectedPointId ?>" data-default="1" data-provider="<?php echo $selectedCarrier ?>" selected>
<?php if (!empty($_POST['recipient_point_name'])): ?>
<?php echo $_POST['recipient_point_name'] ?>
<?php else: ?>
[<?php echo $orderSelectedPointId ?>]
<?php echo !empty($orderSelectedPointLabel) ? $orderSelectedPointLabel : '' ?>
<?php endif ?>
</option>
<?php endif ?>
</select>
<button type="button" class="button button-primary" id="polkurier-recipient-point-map-button">Mapa</button>
</div>
</td>
</tr>
<input type="hidden" name="sender_point_name" id="sender_point_name" />
<input type="hidden" name="recipient_point_name" id="recipient_point_name" />
<script>
var senderSelect = jQuery('select.sender-point');
jQuery('#polkurier-sender-point').on('change', function () {
jQuery('#sender_point_name').val(jQuery(this).find('option:selected').text());
});
jQuery('#polkurier-recipient-point').on('change', function () {
jQuery('#recipient_point_name').val(jQuery(this).find('option:selected').text());
});
</script>
<tr class="polkurier_standard_address">
<th scope="row">
<label for="polkurier_receiver">
Adres nadawcy
</label>
</th>
<td>
<?php
$opts = get_option("polkurier_addresses");
if (is_array($opts)) {
?>
<select name="polkurier_address" id="polkurier_address">
<?php
foreach ($opts as $key => $opt) {
?>
<option <?php if (!isset($_POST['polkurier_adress']) && $key == 0) {
echo "selected";
} else if (isset($_POST['polkurier_address']) && $_POST['polkurier_address'] == $key) {
echo "selected";
}
?> id="polkurier_address_<?php echo $key ?>" value="<?php echo $key ?>"
class="polkurier_address_option"
data-postalcode="<?php echo $opt->address["postcode"] ?>"><?php echo $opt->address["company"] . " - " . $opt->address["person"] ?></option>
<br/>
<?php
}
?>
</select>
<br/>
<?php
foreach ($opts as $key => $opt){
?>
<input type="radio" name="polkurier_address_radio" <?php if (!isset($_POST['polkurier_adress_radio']) && $key == 0) {
echo "checked";
} else if (isset($_POST['polkurier_address_radio']) && $_POST['polkurier_address_radio'] == $key) {
echo "checked";
}
?> id="polkurier_address_radio_<?php echo $key ?>" value="<?php echo $key ?>">
<label for="polkurier_address_radio_<?php echo $key ?>">
<?php
echo implode('<br>', array_filter([
$opt->address["company"],
$opt->address["person"],
$opt->address["street"] . " " . $opt->address["housenumber"] . " " . $opt->address["flatnumber"],
$opt->address["postcode"] . " " . $opt->address["city"],
$opt->address["phone"],
$opt->address["email"]
]));
?>
</label>
<?php
}
}else{
echo '<div class="notice error polkurier-notice is-dismissible" ><p>Proszę uzupełnić domyślny adres nadawcy</p></div>';
}
?>
</td>
</tr>
<tr class="polkurier_standard_address">
<th scope="row">
<label for="polkurier_receiver">Adres odbiorcy</label>
</th>
<td>
<?php
$polkurier_get_recipient_address_row = static function ($field) use ($order_data) {
if (!empty($_POST['recipient'][$field])) {
return $_POST['recipient'][$field];
}
switch ($field) {
case 'person':
return $order_data['shipping']['first_name'] . " " . $order_data['shipping']['last_name'];
case 'street':
return trim($order_data['shipping']['address_1'] . ' ' . $order_data['shipping']['address_2']);
case 'email':
case 'phone':
return $order_data['billing'][$field];
default:
return $order_data['shipping'][$field];
}
}
?>
<div class="pk-mb-2" style="width: 400px;">
Firma
<div>
<input type="text" name="recipient[company]" value="<?php echo $polkurier_get_recipient_address_row('company') ?>">
</div>
</div>
<div class="pk-mb-2">
Imię i nazwisko
<div>
<input type="text" name="recipient[person]" value="<?php echo $polkurier_get_recipient_address_row('person') ?>">
</div>
</div>
<div class="pk-mb-2">
Ulica i numer
<div>
<input type="text" name="recipient[street]" value="<?php echo $polkurier_get_recipient_address_row('street') ?>">
</div>
</div>
<div class="pk-mb-2">
Miejscowość
<div>
<input type="text" name="recipient[city]" value="<?php echo $polkurier_get_recipient_address_row('city') ?>">
</div>
</div>
<div class="pk-mb-2">
Kod pocztowy
<div>
<input type="text" name="recipient[postcode]" value="<?php echo $polkurier_get_recipient_address_row('postcode') ?>">
</div>
</div>
<div class="pk-mb-2">
Kraj (kod ISO)
<div>
<input type="text" name="recipient[country]" value="<?php echo $polkurier_get_recipient_address_row('country') ?>">
</div>
</div>
<div class="pk-mb-2">
Telefon
<div>
<input type="text" name="recipient[phone]" value="<?php echo $polkurier_get_recipient_address_row('phone') ?>">
</div>
</div>
<div class="pk-mb-2">
Adres email
<div>
<input type="text" name="recipient[email]" value="<?php echo $polkurier_get_recipient_address_row('email') ?>">
</div>
</div>
</td>
</tr>
<tr>
<th scope="row">
<label for="polkurier_pobranie">Kwota pobrania</label>
</th>
<td>
<input type="text" name="polkurier_pobranie" id="polkurier_pobranie" value="<?php echo $codAmount ?>">
</td>
</tr>
<tr>
<th scope="row"><label for="polkurier_pobranie_rodzaj">Rodzaj zwrotu pobrania</label></th>
<td>
<?php
$cod_return_type = isset($_POST['polkurier_pobranie_rodzaj']) ? (string)$_POST['polkurier_pobranie_rodzaj'] : '';
$default_cod_return_type = get_option('polkurier_DEFAULT_COD_RETURN_TYPE', 'BA');
if (empty($cod_return_type) && !empty($default_cod_return_type)) {
$cod_return_type = $default_cod_return_type;
}
?>
<div class="pk-my-4">
<input type="radio" <?php if ($cod_return_type === 'BA') echo 'checked' ?> name="polkurier_pobranie_rodzaj" id="polkurier_pobranie_rodzaj_1" value="BA">
<label for="polkurier_pobranie_rodzaj_1">Przelew na konto bankowe</label><br/>
</div>
<div class="pk-my-4">
<input type="radio" <?php if ($cod_return_type === 'PO') echo 'checked' ?> name="polkurier_pobranie_rodzaj" id="polkurier_pobranie_rodzaj_2" value="PO">
<label for="polkurier_pobranie_rodzaj_2">Przekaz pocztowy na adres nadawcy</label>
<div class="pk-ml-5">
<small>Usługa Poczty Polskiej kwotę pobrania zwraca listonosz na dane Nadawcy (podstawowy termin + 2 dni robocze)</small>
</div>
</div>
<div class="pk-my-4">
<input type="radio" <?php if ($cod_return_type === 'MB') echo 'checked' ?> name="polkurier_pobranie_rodzaj" id="polkurier_pobranie_rodzaj_3" value="MB">
<label for="polkurier_pobranie_rodzaj_3">
Do skarbonki
</label>
<div class="pk-ml-5">
<small>
Skarbonka umożliwia Ci zbieranie pobrań na swoim koncie tak, by wypłacać je w terminie, który Tobie odpowiada.<br>
Więcej informacji znajdziesz w naszej
<a href="https://polkurier.pl/knowledge-base/article/skarbonka" target="_blank">
bazie wiedzy
</a>
</small>
</div>
</div>
</td>
</tr>
<tr>
<th scope="row"><label for="polkurier_pobranie_zwrot">Zwrot pobrania</label></th>
<td>
<input type="radio" <?php if ((isset($_POST['polkurier_pobranie_zwrot']) && $_POST['polkurier_pobranie_zwrot'] == 'S') || !isset($_POST['polkurier_pobranie_zwrot'])) echo 'checked' ?>
name="polkurier_pobranie_zwrot" id="polkurier_pobranie_zwrot_1" value="S">
<label for="polkurier_pobranie_zwrot_1">od 5 do 7 dni roboczych</label><br/>
<input type="radio" <?php if (isset($_POST['polkurier_pobranie_zwrot']) && $_POST['polkurier_pobranie_zwrot'] == '1D') echo 'checked' ?>
name="polkurier_pobranie_zwrot" id="polkurier_pobranie_zwrot_2" value="1D">
<label for="polkurier_pobranie_zwrot_2">1 dzień roboczy od daty dostarczenia przesyłki</label><br/>
<input type="radio" <?php if (isset($_POST['polkurier_pobranie_zwrot']) && $_POST['polkurier_pobranie_zwrot'] == '4D') echo 'checked' ?>
name="polkurier_pobranie_zwrot" id="polkurier_pobranie_zwrot_3" value="4D">
<label for="polkurier_pobranie_zwrot_3">4 dni robocze od daty dostarczenia przesyłki</label><br/>
<input type="radio" <?php if (isset($_POST['polkurier_pobranie_zwrot']) && $_POST['polkurier_pobranie_zwrot'] == '16D') echo 'checked' ?>
name="polkurier_pobranie_zwrot" id="polkurier_pobranie_zwrot_4" value="16D">
<label for="polkurier_pobranie_zwrot_4">16 dni robocze od daty dostarczenia przesyłki</label><br/>
</td>
</tr>
<tr>
<th scope="row"><label for="polkurier_pobranie">Konto bankowe do zwrotu pobrania</label></th>
<td>
<?php $accounts = get_option('polkurier_accounts'); ?>
<select id="polkurier_account" name="polkurier_account">
<?php if (is_array($accounts)) foreach ($accounts as $key => $acc): ?>
<option <?php if (isset($_POST['polkurier_account']) && $acc == $_POST['polkurier_account']) echo 'selected' ?>
value="<?php echo $acc ?>"><?php echo $acc->alias . " - " . $acc ?></option>
<?php endforeach; ?>
</select>
</td>
</tr>
<tr>
<th scope="row"><label for="polkurier_ubezpieczenie">Kwota ubezpieczenia</label></th>
<td><input type="text" name="polkurier_ubezpieczenie" id="polkurier_ubezpieczenie"
value="<?php echo isset($_POST['polkurier_ubezpieczenie']) ? $_POST['polkurier_ubezpieczenie'] : 0 ?>">
</td>
</tr>
<tr>
<th scope="row"><label for="polkurier_description">Opis zawartości</label></th>
<td><textarea required name="polkurier_description"
id="polkurier_description"><?php echo isset($_POST['polkurier_description']) && !empty($_POST['polkurier_description']) ? $_POST['polkurier_description'] : ('Zamówienie #' . $order_data['id']) ?></textarea>
</td>
</tr>
<tr>
<th scope="row">
<label>Usługi dodatkowe</label>
</th>
<td>
<div class="pk-my-4">
<label>
<input type="checkbox" name="courierservice[ROD]" <?php echo pk_get_post_param('courierservice.ROD') === '1' ? 'checked' : '' ?> value="1" />
<strong>Dokumenty zwrotne</strong>
</label>
</div>
<div class="pk-my-4">
<label>
<input type="checkbox" name="courierservice[COURIER_WITH_LABEL]" <?php echo pk_get_post_param('courierservice.COURIER_WITH_LABEL') === '1' ? 'checked' : '' ?> value="1" />
<strong>Podjazd kuriera z wydrukowanym listem przewozowym</strong>
</label>
<div class="pk-ml-5">
<small>Usługa dostępna tylko dla przewoźnika DHL</small>
</div>
</div>
<div class="pk-my-4">
<label>
<input type="checkbox" name="courierservice[WEEK_COLLECTION]" <?php echo pk_get_post_param('courierservice.WEEK_COLLECTION') === '1' ? 'checked' : '' ?> value="1" />
<strong>Dostawa weekendowa</strong>
</label>
<div class="pk-ml-5">
<small>Usługa dostępna tylko dla przewoźnika InPost Paczkomaty 24/7</small>
</div>
</div>
<div class="pk-my-4">
<label>
<?php
$enabled = $isPost
? pk_get_post_param('courierservice.SMS_NOTIFICATION_RECIPIENT') === '1'
: get_option('polkurier_default_courierservice_SMS_NOTIFICATION_RECIPIENT') === '1';
?>
<input type="checkbox" name="courierservice[SMS_NOTIFICATION_RECIPIENT]" <?php echo $enabled ? 'checked' : '' ?> value="1" />
<strong>Powiadomienie SMS dla odbiorcy</strong>
</label>
<div class="pk-ml-5">
<small>Powiadomienie zostanie wysłane po odebraniu przesyłki od nadawcy</small>
</div>
</div>
<div class="pk-my-4">
<label>
<?php
$enabled = $isPost
? pk_get_post_param('courierservice.SMS_NOTIFICATION_RECIPIENT_WITH_NAME') === '1'
: get_option('polkurier_default_courierservice_SMS_NOTIFICATION_RECIPIENT_WITH_NAME') === '1';
?>
<input type="checkbox" name="courierservice[SMS_NOTIFICATION_RECIPIENT_WITH_NAME]" <?php echo $enabled ? 'checked' : '' ?> value="1" />
<strong>Powiadomienie SMS dla odbiorcy z własną nazwą nadawcy</strong>
</label>
<div class="pk-ml-5">
<small>
Powiadomienie zostanie wysłane po odebraniu przesyłki od nadawcy<br>
Jako nadawca wiadomości będzie widnieć Twoja nazwa.<br>
Wymagane jest ustawienie domyślnej nazwy nadawcy w panelu klienta na portalu
<a href="https://polkurier.pl">Polkurier.pl</a> w zakładce "Ustawienia" &rarr; "Powiadomienia"
</small>
</div>
</div>
<script>
(function () {
var $smsNotificationRecipient = jQuery('[name="courierservice[SMS_NOTIFICATION_RECIPIENT]"]');
var $smsNotificationRecipientWithName = jQuery('[name="courierservice[SMS_NOTIFICATION_RECIPIENT_WITH_NAME]"]');
$smsNotificationRecipient.on('change', function () {
$smsNotificationRecipientWithName.prop('checked', false);
});
$smsNotificationRecipientWithName.on('change', function () {
$smsNotificationRecipient.prop('checked', false);
});
var $weekCollection = jQuery('[name="courierservice[WEEK_COLLECTION]"]');
var $courierWithLabel = jQuery('[name="courierservice[COURIER_WITH_LABEL]"]');
var updateView = function () {
var $courier = jQuery('[name="polkurier_carrier_id"]:checked');
var courier = $courier.val();
$courierWithLabel
.prop('disabled', courier !== 'DHL')
.prop('checked', courier === 'DHL' && $weekCollection.is(':checked'));
$weekCollection
.prop('disabled', courier !== 'INPOST_PACZKOMAT')
.prop('checked', courier === 'INPOST_PACZKOMAT' && $weekCollection.is(':checked'));
};
jQuery('[name="polkurier_carrier_id"]').on('change', updateView);
updateView();
}) ();
</script>
<div class="pk-my-4">
<label>
<?php
$polkurier_cover_addresses = array_filter((array)get_option("polkurier_cover_addresses"));
$polkurier_cover_address_id = Arr::get($_POST, 'polkurier_cover_address');
?>
<input type="checkbox" <?php echo $polkurier_cover_address_id !== null ? 'checked' : '' ?> id="polkurier_cover_address_toggle" autocomplete="off" />
<strong>Inny adres nadawcy na etykiecie</strong>
<select name="polkurier_cover_address" id="polkurier_cover_address" onchange="evaluateOrder()" autocomplete="off">
<option selected value="null">---</option>
<?php foreach ($polkurier_cover_addresses as $key => $opt): ?>
<option
id="polkurier_cover_address_<?php echo $key ?>"
value="<?php echo $key ?>"
class="polkurier_address_option"
data-postalcode="<?php echo $opt->address["postcode"] ?>"
<?php echo ($polkurier_cover_address_id !== null && (int)$polkurier_cover_address_id === $key) ? "selected" : '' ?>
>
<?php echo $opt->address["company"] . " - " . $opt->address["person"] ?>
</option>
<?php endforeach ?>
</select>
</label>
<div class="pk-ml-5">
<small>
Usługa umożliwia zakrycie Twojego rzeczywistego adresu nadawczego na liście przewozowym.<br>
Listą adresów można zarządać w zakładce
<a href="?page=polkurier&tab=cover_addresses">
"WooCommerce" &rarr; "Ustawienia Polkurier" &rarr; "Adresy na etykiecie"
</a>
</small>
</div>
</div>
<script>
(function () {
const $toggle = jQuery('#polkurier_cover_address_toggle');
const $select = jQuery('#polkurier_cover_address');
const updateView = function () {
const isChecked = $toggle.is(':checked');
$select.toggle(isChecked);
$select.prop('disabled', !isChecked);
};
$toggle.on('change', updateView);
updateView();
}) ();
</script>
</td>
</tr>
<tr>
</tbody>
</table>
<?php submit_button("Wyślij", "primary", "submit", true, ['onclick' => 'return fn_polkurier_validate_package()']); ?>
</form>
<script type="text/javascript">
// zarządzanie paczkami
function fn_polkurier_validate_package() {
var field = jQuery("#packages_list").val();
var packages;
var warning = false;
if (field == '') {
warning = true;
} else {
packages = JSON.parse(field);
if (packages.length == 0) {
warning = true;
}
}
if (warning) {
alert("Dodaj przynajmniej jedną paczkę, aby złożyć zamówienie.");
return false;
}
if(jQuery('#polkurier_address option:selected').val() == undefined){
alert("Proszę uzupełnić domyślny adres nadawcy.");
return false;
}
return true;
}
function fn_polkurier_remove_package(index) {
var field = jQuery("#packages_list").val();
var packages;
if (field != '') {
packages = JSON.parse(field);
packages.splice(index, 1);
jQuery("#packages_list")
.val(JSON.stringify(packages))
.trigger('change');
fn_polkurier_describe_package();
}
return false;
}
function fn_polkurier_describe_package() {
var msg = "<br/>";
var dryRun = jQuery("#packages_list").data("json");
var field = jQuery("#packages_list").val();
var packages;
if (field == '' && dryRun == '') {
msg += "Brak paczek dodanych do zamówienia.";
} else {
if (dryRun != 0) {
packages = dryRun; // dry run
jQuery("#packages_list").data("json", "");
jQuery("#packages_list").val(JSON.stringify(packages));
} else {
packages = JSON.parse(field);
}
msg += "<b>Paczki dodane do zamówienia:</b><ul>";
var i = 0;
for (i = 0; i < packages.length; i++) {
msg += "<li>(wymiary: " + packages[i].height + "x" + packages[i].width + "x" + packages[i].depth + "cm, waga: " + packages[i].weight + "kg, ilosć: " + packages[i].count;
if (packages[i].nonstandard) {
msg += ", niestandardowa";
}
msg += ") ";
msg += "<a href=\"\" onclick=\"return fn_polkurier_remove_package(" + i + ")\">usuń</a>";
msg += " </li>"
}
msg += "</ul>";
}
jQuery("#packages_description").html(msg);
}
function fn_polkurier_add_package() {
if (jQuery("#polkurier_height").val() == '' ||
jQuery("#polkurier_width").val() == '' ||
jQuery("#polkurier_depth").val() == '' ||
jQuery("#polkurier_weight").val() == '' ||
jQuery("#polkurier_count").val() == '') {
alert("Wypełnij wszystkie pola paczki przed jej dodaniem.")
return false;
}
var field = jQuery("#packages_list").val();
var packages;
if (field == '') {
packages = new Array();
} else {
packages = JSON.parse(field);
}
var pkg = {
height: jQuery("#polkurier_height").val(),
width: jQuery("#polkurier_width").val(),
depth: jQuery("#polkurier_depth").val(),
weight: jQuery("#polkurier_weight").val(),
count: jQuery("#polkurier_count").val(),
pkgtype: jQuery("input[name=polkurier_type]:checked").val(),
nonstandard: jQuery("#polkurier_nonstandard").prop("checked")
};
packages.push(pkg);
jQuery("#packages_list")
.val(JSON.stringify(packages))
.trigger('change');
fn_polkurier_describe_package();
return false;
}
var arajxUrl = '<?php echo $ajaxUrl ?>';
var couriersPointsAjaxParms = function () {
return {
action: 'pk_courier_points',
nonce: '<?php echo $ajaxNonce ?>',
providers: [
jQuery('.polkurier_carrier:checked').val(),
],
cod: jQuery('#polkurier_pobranie').val() > 0,
};
};
var formatCourierPointOptionLabel = function (point) {
return '[' + point.id + '] ' + point.street + ', ' + point.zip + ' ' + point.city;
}
var createFetchPostCodeCourierPoints = function (options) {
options = jQuery.extend({
providers: ['INPOST_PACZKOMAT', 'PACZKA_W_RUCHU', 'POCZTEX_PUNKT'],
params: {},
providersLabels: {},
providersDefaultPoints: {},
providersDefaultPointsLabels: {}
}, options)
return function () {
var fetchParams = jQuery.extend({}, couriersPointsAjaxParms(), options.params || {});
var defaultPoint = options.$selectEl.find('option[data-default="1"]');
var selectedPointId = options.$selectEl.val();
if (selectedPointId === '---' || !selectedPointId) {
selectedPointId = null;
}
var provider = fetchParams.providers[0];
var fetchOptions = {
fetchParams: fetchParams,
defaultPoint: defaultPoint,
setDefault: function () {
var courierId = getSelectegCourierId();
var defaultPointId = options.providersDefaultPoints[courierId];
var defaultPointLabel = options.providersDefaultPointsLabels[courierId];
if (defaultPointId) {
options.$selectEl.append(new Option(
'[' + defaultPointId + '] ' + defaultPointLabel,
defaultPointId
));
options.$selectEl.val(defaultPointId);
options.$selectEl.trigger('change');
}
},
};
if (!POLKURIER.includesAny(fetchParams.providers, options.providers)) {
options.$containerEl.hide();
return fetchOptions;
}
options.$containerEl.show();
options.$labelEl.text(options.providersLabels[provider] || '');
if (!selectedPointId && !defaultPoint.length) {
fetchOptions.setDefault();
}
options.$selectEl.trigger('change');
if (options.$setDefaultButton) {
options.$setDefaultButton.on('click', function () {
fetchOptions.setDefault();
});
}
return fetchOptions;
};
};
var getSelectegCourierId = function () {
return jQuery('.polkurier_carrier:checked').val();
};
var MAP_PROVIDERS_MAP = {
INPOST_PACZKOMAT_ALLEGRO: 'INPOST_PACZKOMAT',
INPOST_PACZKOMAT_KURIER: 'INPOST_PACZKOMAT',
INPOST_PACZKOMAT_ECONOMY: 'INPOST_PACZKOMAT',
POCZTEX_KURIER_PUNKT: 'POCZTEX_PUNKT',
POCZTEX_PUNKT_PUNKT: 'POCZTEX_PUNKT',
FEDEX_DTR: 'FEDEX_DTR',
DPD_POINT: 'DPD_POINT',
DPD_COURIER_POINT: 'DPD_POINT',
DHL_POINT: 'DHL_POINT',
UPS_AP_POINT_POINT: 'UPS_AP_POINT_POINT',
UPS_AP_POINT_COURIER: 'UPS_AP_POINT_POINT',
UPS_AP_COURIER_POINT: 'UPS_AP_POINT_POINT',
};
var mapCouriersToMapProviders = function (providers) {
var provider, validProviders = [];
if (providers && providers.length > 0) {
for (var i = 0; i < providers.length; i++) {
provider = MAP_PROVIDERS_MAP[providers[i]] || providers[i];
if (validProviders.indexOf(provider) === -1) {
validProviders.push(provider);
}
}
}
return validProviders;
};
var bindCourierPoint = function (options) {
var fetchPostCodeCourierPoints = createFetchPostCodeCourierPoints(options);
var fetchOptions = fetchPostCodeCourierPoints();
jQuery('#polkurier_pobranie').on('change', fetchPostCodeCourierPoints);
jQuery('.polkurier_carrier').on('change', function () {
fetchOptions.setDefault();
fetchOptions = fetchPostCodeCourierPoints();
});
options.$selectEl.select2({
language: 'pl',
width: 700,
minimumInputLength: 3,
ajax: {
url: function (params) {
return arajxUrl + '?' + jQuery.param(jQuery.extend({}, fetchOptions.fetchParams, {searchQuery: params.term}));
},
processResults: function (data) {
if (data.length <= 0) {
return {results: []};
}
return {
results: data.map(function (row) {
return {
id: row.id,
text: formatCourierPointOptionLabel(row)
};
})
};
},
delay: 500
}
});
options.$mapButtonEl.on('click', function () {
var searchQuery = options.$selectEl.val() || '';
if (searchQuery.length === 0) {
searchQuery = options.defaultMapSearchQuery || '';
}
var functions = [];
if (options.params.collect) {
functions.push('collect');
}
if (options.params.send) {
functions.push('send');
}
var params = couriersPointsAjaxParms();
if (params.cod) {
functions.push('cod');
}
var map = new POLKURIER.PointsMap({
token: '<?php echo $mapToken->getToken() ?>',
providers: mapCouriersToMapProviders(params.providers),
functions: functions,
searchQuery: searchQuery,
});
map.onConfirm(function (point) {
options.$selectEl.append(new Option(formatCourierPointOptionLabel(point), point.id));
options.$selectEl.val(point.id);
options.$selectEl.trigger('change');
map.closeMapDialog();
});
map.showMapDialog();
});
};
jQuery(document).ready(function ($) {
// rozszerzenie list paczkomatów
jQuery('select.select2').select2();
bindCourierPoint({
$selectEl: jQuery('#polkurier-sender-point'),
$containerEl: jQuery('#polkurier-sender-point-container'),
$labelEl: jQuery('#polkurier-sender-point-label'),
$mapButtonEl: jQuery('#polkurier-sender-point-map-button'),
$setDefaultButton: jQuery('#polkurier-sender-default-button'),
providers: [
'INPOST_PACZKOMAT',
'INPOST_PACZKOMAT_ECONOMY',
'INPOST_PACZKOMAT_ALLEGRO',
'INPOST_PACZKOMAT_KURIER',
'INPOST_INTERNATIONAL',
'POCZTEX_PUNKT',
'POCZTEX_PUNKT_PUNKT',
'DPD_POINT',
'UPS_AP_POINT_COURIER',
'UPS_AP_POINT_POINT'
],
params: {
send: true,
collect: false
},
providersLabels: {
POCZTEX_PUNKT: 'Punkt nadania',
POCZTEX_PUNKT_PUNKT: 'Punkt nadania',
INPOST_PACZKOMAT: 'Paczkomat nadawcy',
INPOST_PACZKOMAT_ALLEGRO: 'Paczkomat nadawcy',
INPOST_PACZKOMAT_KURIER: 'Paczkomat nadawcy',
INPOST_PACZKOMAT_ECONOMY: 'Paczkomat nadawcy',
INPOST_INTERNATIONAL: 'Paczkomat nadawcy',
DPD_POINT: 'Punkt nadania',
UPS_AP_POINT_POINT: 'Punkt nadania',
UPS_AP_POINT_COURIER: 'Punkt nadania',
},
providersDefaultPoints: {
POCZTEX_PUNKT: '<?php echo get_option('polkurier_default_point_id_POCZTEX_PUNKT') ?>',
POCZTEX_PUNKT_PUNKT: '<?php echo get_option('polkurier_default_point_id_POCZTEX_PUNKT') ?>',
INPOST_PACZKOMAT: '<?php echo get_option('polkurier_default_point_id_INPOST_PACZKOMAT') ?>',
INPOST_PACZKOMAT_ALLEGRO: '<?php echo get_option('polkurier_default_point_id_INPOST_PACZKOMAT') ?>',
INPOST_PACZKOMAT_KURIER: '<?php echo get_option('polkurier_default_point_id_INPOST_PACZKOMAT') ?>',
INPOST_PACZKOMAT_ECONOMY: '<?php echo get_option('polkurier_default_point_id_INPOST_PACZKOMAT') ?>',
INPOST_INTERNATIONAL: '<?php echo get_option('polkurier_default_point_id_INPOST_PACZKOMAT') ?>',
DPD_POINT: '<?php echo get_option('polkurier_default_point_id_DPD') ?>',
UPS_AP_POINT_POINT: '<?php echo get_option('polkurier_default_point_id_UPS_AP_POINT_POINT') ?>',
UPS_AP_POINT_COURIER: '<?php echo get_option('polkurier_default_point_id_UPS_AP_POINT_POINT') ?>',
},
providersDefaultPointsLabels: {
POCZTEX_PUNKT: '<?php echo get_option('polkurier_default_point_label_POCZTEX_PUNKT') ?>',
POCZTEX_PUNKT_PUNKT: '<?php echo get_option('polkurier_default_point_label_POCZTEX_PUNKT') ?>',
INPOST_PACZKOMAT: '<?php echo get_option('polkurier_default_point_label_INPOST_PACZKOMAT') ?>',
INPOST_PACZKOMAT_ALLEGRO: '<?php echo get_option('polkurier_default_point_label_INPOST_PACZKOMAT') ?>',
INPOST_PACZKOMAT_KURIER: '<?php echo get_option('polkurier_default_point_label_INPOST_PACZKOMAT') ?>',
INPOST_PACZKOMAT_ECONOMY: '<?php echo get_option('polkurier_default_point_label_INPOST_PACZKOMAT') ?>',
INPOST_INTERNATIONAL: '<?php echo get_option('polkurier_default_point_label_INPOST_PACZKOMAT') ?>',
DPD_POINT: '<?php echo get_option('polkurier_default_point_label_DPD') ?>',
UPS_AP_POINT_POINT: '<?php echo get_option('polkurier_default_point_label_UPS_AP_POINT_POINT') ?>',
UPS_AP_POINT_COURIER: '<?php echo get_option('polkurier_default_point_label_UPS_AP_POINT_POINT') ?>',
}
});
bindCourierPoint({
$selectEl: jQuery('#polkurier-recipient-point'),
$containerEl: jQuery('#polkurier-recipient-point-container'),
$labelEl: jQuery('#polkurier-recipient-point-label'),
$mapButtonEl: jQuery('#polkurier-recipient-point-map-button'),
providers: [
'INPOST_PACZKOMAT',
'INPOST_PACZKOMAT_ECONOMY',
'INPOST_PACZKOMAT_ALLEGRO',
'INPOST_INTERNATIONAL',
'PACZKA_W_RUCHU',
'POCZTEX_PUNKT_PUNKT',
'POCZTEX_KURIER_PUNKT',
'FEDEX_DTR', 'DPD_POINT',
'DPD_COURIER_POINT',
'DHL_POINT',
'UPS_AP_POINT_POINT',
'UPS_AP_COURIER_POINT'
],
params: {
send: false,
collect: true
},
providersLabels: {
POCZTEX_PUNKT_PUNKT: 'Punkt odbioru',
POCZTEX_KURIER_PUNKT: 'Punkt odbioru',
INPOST_PACZKOMAT: 'Paczkomat odbiorcy',
INPOST_PACZKOMAT_ALLEGRO: 'Paczkomat odbiorcy',
INPOST_PACZKOMAT_ECONOMY: 'Paczkomat odbiorcy',
INPOST_INTERNATIONAL: 'Paczkomat odbiorcy',
PACZKA_W_RUCHU: 'Punkt odbioru',
FEDEX_DTR: 'Punkt odbioru',
DPD_POINT: 'Punkt odbioru',
DPD_COURIER_POINT: 'Punkt odbioru',
DHL_POINT: 'Punkt odbioru',
UPS_AP_POINT_POINT: 'Punkt odbioru',
UPS_AP_COURIER_POINT: 'Punkt odbioru',
},
defaultMapSearchQuery: '<?php echo $order_data['shipping']['postcode'] ?>',
});
// wybór templatki
jQuery("#polkurier_template_id").change(function () {
var pkg_templates = $("#polkurier_template_id").data("json");
var pkg_index = $("#polkurier_template_id").val();
if (jQuery("#polkurier_template_id").val() != "") {
$("#polkurier_height").val(pkg_templates[pkg_index].height);
$("#polkurier_width").val(pkg_templates[pkg_index].width);
$("#polkurier_depth").val(pkg_templates[pkg_index].depth);
$("#polkurier_weight").val(pkg_templates[pkg_index].weight);
$("#polkurier_count").val(pkg_templates[pkg_index].count);
if (pkg_templates[pkg_index].nonstandard) {
$("#polkurier_nonstandard").prop("checked", "checked");
} else {
$("#polkurier_nonstandard").removeProp("checked");
}
$("input[name=polkurier_type][value=" + pkg_templates[pkg_index].type + "]").click();
}
});
$("#polkurier_date").change(function () {
getPolkurierTimePickup();
});
$("select[name=polkurier_address]").change(function () {
getPolkurierTimePickup();
});
$("input.polkurier_carrier").change(function () {
getPolkurierTimePickup();
updateCourierMessages();
});
function getPolkurierTimePickup(){
$("#polkurier_pickup_date").html("Przetwarzanie...");
var dostawca = $("input[name=polkurier_carrier_id]:checked").val();
var data = $("#polkurier_date").val();
var kodpocztowy = $("option.polkurier_address_option:checked").data("postalcode");
var typ = $("input[name=polkurier_type]:checked").val();
$.ajax("admin.php?page=polkurier_packages&action=json&courier=" + dostawca + "&date=" + data + "&postalcode=" + kodpocztowy + "&package=" + typ).done(function (data) {
$("#polkurier_pickup_date").html(data);
updatePickupSelect();
})
}
var updateTemplateTypes = function () {
var currentPackType = $('input[name="polkurier_type"]:checked').val();
$('option.polkurier-paczka').each(function () {
this.disabled = this.dataset.type !== currentPackType;
});
};
$("input[name=polkurier_type]").change(updateTemplateTypes);
fn_polkurier_describe_package();
updateTemplateTypes();
$("select[name=polkurier_address]").change(function () {
$("#polkurier_address_radio_" + $("select[name=polkurier_address]").val()).click();
});
<?php if($_SERVER['REQUEST_METHOD'] == 'POST'): ?>
getPolkurierTimePickup();
<?php endif; ?>
var updateCourierMessages = function () {
var courier = getSelectegCourierId();
jQuery('.courier-messages-container').hide();
jQuery('#courier-' + getSelectegCourierId() + '-messages-container').show();
};
updateCourierMessages();
jQuery('.courier-messages-container a').each(function () {
this.target = '_blank';
})
});
</script>
<style type="text/css">
input[type=radio][name=polkurier_address_radio] {
display: none;
}
input[type=radio][name=polkurier_address_radio]:not(:checked) + label {
display: none;
}
.polkurier-unavailable-courier-icon {
font-size: 0.8em;
color: #fff;
background: #b0b0b0;
border-radius: 50%;
display: inline-block;
width: 12px;
height: 12px;
line-height: 12px;
text-align: center;
cursor: help;
}
.polkurier-courier-container {
font-weight: bold;
padding: 0.25em 0;
}
.polkurier-evaluation-container {
color: #b0b0b0;
margin-left: 0.6em;
font-size: 0.7em;
font-weight: normal;
}
.polkurier-evaluation-container .polkurier-price-nett {
font-weight: bold;
}
.polkurier-evaluation-container .polkurier-price-gross {
font-weight: bold;
}
.polkurier-courier-unavailable {
font-weight: normal;
color: #909090;
}
.polkurier-loading-evaluation-spinner {
position: fixed;
display: flex;
align-content: center;
bottom: 1em;
right: 1em;
padding: 1em;
background: #fff;
border: 1px #efefef solid;
border-radius: 4px;
box-shadow: 2px 2px 1px rgba(0, 0, 0, 0.2);
transition: right 0.3s;
}
.polkurier-loading-evaluation-spinner.polkurier-loading-evaluation-spinner--hidden {
right: -200px;
transition: right 0.2s;
}
#polkurier-evaluation-error {
color: red;
}
</style>
<script>
var $form = jQuery('#pk-order-form');
var loadEvaluationRequest;
var evaluationError = '';
var evaluateOrder = function () {
if (loadEvaluationRequest) {
loadEvaluationRequest.abort();
loadEvaluationRequest = null;
}
var orderData = {};
$form.serializeArray().forEach(function (row) {
orderData[row.name] = row.value;
});
orderData.order_id = '<?= (int)$_GET['order_id'] ?>';
console.log(orderData);
toggleLoadingEvaluationSpinner(true);
loadEvaluationRequest = jQuery.ajax({
url: '<?= $ajaxUrl ?>?action=pk_evaluate_order&nonce=<?= wp_create_nonce('polkurier-nonce') ?>',
type: 'POST',
data: orderData,
})
.done(function (res) {
if (res.success) {
updateCouriersList(res.data);
}
showEvaluationError('');
})
.fail(function (res) {
var error = (res && res.responseJSON && res.responseJSON.error) || 'Wystąpił błąd wyceny';
console.log('ERROR', res);
showEvaluationError(error);
})
.always(function () {
toggleLoadingEvaluationSpinner(false);
loadEvaluationRequest = null;
});
return loadEvaluationRequest;
};
var $loadingEvaluationSpinner;
var toggleLoadingEvaluationSpinner = function (toggle) {
if (toggle && !$loadingEvaluationSpinner) {
$loadingEvaluationSpinner = jQuery('<div>', {
class: 'polkurier-loading-evaluation-spinner polkurier-loading-evaluation-spinner--hidden',
}).append([
POLKURIER.createLoadingAnimation().addClass('pk-mr-2'),
'Ładowanie wyceny'
]);
jQuery('body').append($loadingEvaluationSpinner);
}
if ($loadingEvaluationSpinner) {
setTimeout(function () {
$loadingEvaluationSpinner.toggleClass('polkurier-loading-evaluation-spinner--hidden', !toggle);
}, 0);
}
jQuery('#polkurier-evaluation-spinner').text(toggle ? 'Ładowanie wyceny...' : '')
};
var updateCouriersList = function (evaluation) {
var $couriers = jQuery('.polkurier-courier-container');
var evaluations = POLKURIER.indexBy(evaluation, 'servicecode');
$couriers.each(function () {
var $courier = jQuery(this);
var id = $courier.data('id');
var $courierInput = $courier.find('input')
var $courierLabel = $courier.find('label');
var $evaluationContainer = $courier.find('.polkurier-evaluation-container');
var $unavailableContainer = $courier.find('.polkurier-unavailable-courier-icon');
if ($evaluationContainer.length === 0) {
$evaluationContainer = jQuery('<span>', {class: 'polkurier-evaluation-container'});
$evaluationContainer.append([
jQuery('<span>').append([
jQuery('<span>', {class: 'polkurier-price-nett'}),
' netto ',
' (',
jQuery('<span>', {class: 'polkurier-price-gross'}),
' brutto)',
])
]);
$evaluationContainer.hide();
$courierLabel.append($evaluationContainer);
}
if ($unavailableContainer.length === 0) {
$unavailableContainer = jQuery('<span>', {
class: 'polkurier-unavailable-courier-icon',
title: 'Przewoźnik niedostępny dla parametrów przesyłki'
});
$unavailableContainer.text('?');
$unavailableContainer.hide();
$courierLabel.append($unavailableContainer);
}
var data = evaluations[id];
if (data) {
if (data.conditional_price_nett > 0) {
$evaluationContainer
.find('.polkurier-price-nett')
.empty()
.append([
jQuery('<span>', {class: 'pk-text-danger33 pk-fw-normal'}).append([
Number(data.netprice).toFixed(2),
]),
' &rarr; ',
Number(data.conditional_price_nett).toFixed(2)
]);
$evaluationContainer
.find('.polkurier-price-gross')
.empty()
.append([
jQuery('<span>', {class: 'pk-text-danger2 pk-fw-normal'}).append([
Number(data.grossprice).toFixed(2),
]),
' &rarr; ',
Number(data.conditional_price_gross).toFixed(2)
]);
} else {
$evaluationContainer.find('.polkurier-price-nett').text(Number(data.netprice).toFixed(2));
$evaluationContainer.find('.polkurier-price-gross').text(Number(data.grossprice).toFixed(2));
}
$evaluationContainer.show();
$unavailableContainer.hide();
} else {
$evaluationContainer.hide();
$unavailableContainer.show();
}
$courier.toggleClass('polkurier-courier-unavailable', !data);
$courierInput
.prop('checked', $courierInput.is(':checked') && Boolean(data))
.prop('disabled', !data);
});
};
var $evaluationErrorContainer = jQuery('#polkurier-evaluation-error');
var showEvaluationError = error => {
if (error !== void 0) {
evaluationError = error;
}
var showError = evaluationError;
if (showError) {
showError = '<strong>Nie udało się wczytać wyceny przewoźników:</strong><br>' + evaluationError;
}
$evaluationErrorContainer.html(showError);
};
var evaluateFields = [
'polkurier_type',
'packages_list',
'polkurier_ubezpieczenie',
'polkurier_pobranie',
'polkurier_pobranie_zwrot',
'polkurier_pobranie_rodzaj',
'polkurier_address',
'courierservice',
'recipient[country]',
];
evaluateOrder();
var evaluateOrderDebounced = POLKURIER.debounce(evaluateOrder, 1000);
$form.on('change', function (e) {
var fieldName = e.target.name.replace(/\[[\w\s\d]+]/g, '');
if (evaluateFields.indexOf(fieldName) !== -1 || evaluateFields.indexOf(e.target.name) !== -1) {
evaluateOrderDebounced();
}
});
</script>
<?php
} elseif (isset($_GET["action"]) && $_GET['action'] === 'details') {
require_once(dirname(__FILE__) . "/polkurier-admin-package-details.php");
} else {
if (isset($_GET["action"]) && $_GET['action'] === 'cancel') {
$response = $api->cancelOrder($_GET['package']);
if (isset($response['cancellation']) && $response['cancellation'] === true) {
PolkurierOrder::deleteByOrderNumber($_GET['package']);
Polkurier_Admin::api_error_notice("Anulowano zamówienie.");
}
}
if (isset($_GET['update_all_statuses'])) {
$statusUpdater = new PolkurierOrderStatusUpdater();
$statusUpdater->updateAllOrdersStatuses();
header('Location: ?page=polkurier_packages&did_update_all_statuses');
die;
}
?>
<h2>Lista zamówień Polkurier</h2>
<p>Aby złożyć nowe zamówienie, przejdź do <a href="edit.php?post_type=shop_order">listy zamówień WooCommerce</a>.</p>
<?php
if (isset($_GET['did_update_all_statuses'])) {
echo '<div class="updated notice is-dismissable"><p>Zaktualizowano statusy zamówień</p></div>';
}
?>
<?php
require_once plugin_dir_path(__FILE__) . '../../includes/Polkurier_WP_List_Table.php';
$table = new Polkurier_WP_List_Table();
$table->set_polkurier_api_client($api);
$table->prepare_items();
?>
<style>
.column-address,
.column-address_to,
.column-label {
width: 170px;
}
.column-order_number {
width: 100px;
}
.column-order_number div {
font-size: 80% !important;
}
td.column-address,
td.column-address_to,
td.column-date_send,
td.column-status_date,
td.column-status,
td.column-delivered_date,
td.column-price,
td.column-pobranie {
font-size: 80% !important;
}
.column-label ul {
margin: 0;
padding: 0;
list-style: none;
}
.column-label li span {
white-space: nowrap;
background: #e0e0e0;
padding: 2px 4px;
border-radius: 4px;
font-family: monospace;
font-size: 80% !important;
}
</style>
<form method="GET">
<input type="hidden" name="page" value="polkurier_packages"/>
<?php $table->search_box('Szukaj', 'pk-orders'); ?>
</form>
<form method="GET">
<input type="hidden" name="page" value="polkurier_packages"/>
<input type="hidden" name="action" value="label"/>
<?php
$table->display();
submit_button("Generuj etykiety dla zaznaczonych", "primary", "submit", false, ['onclick' => 'return fn_polkurier_validate_labels()']);
?>
<a href="?page=polkurier_packages&update_all_statuses" onclick="if (!confirm('Na pewno zaktualizować statusy? Może to potrwać kilka minut.')) {return false}" class="button button-primary">Odśwież statusy</a>
</form>
<script type="text/javascript">
function fn_polkurier_validate_labels() {
if (jQuery("input:checkbox:checked").length == 0) {
alert("Zaznacz przesyłki, dla których chcesz wygenerować etykiety.");
return false;
}
else {
return true;
}
}
jQuery(document).on('click', '.pk-expand-button', function (e) {
e.preventDefault();
var $button = jQuery(this);
var $container = $button.parents('.pk-expand');
var $content = $container.find('.pk-expand-content');
$button.hide();
$content.slideDown();
});
</script>
<?php
}