395 lines
21 KiB
Twig
Executable File
395 lines
21 KiB
Twig
Executable File
{{ header }}
|
|
{{ column_left }}
|
|
<div id="content">
|
|
<div class="page-header">
|
|
<div class="container-fluid">
|
|
<div class="float-end">
|
|
<button type="submit" form="form-payment" data-bs-toggle="tooltip" title="{{ button_save }}" class="btn btn-primary">
|
|
<i class="fa-solid fa-save"></i>
|
|
</button>
|
|
<a href="{{ back }}" data-bs-toggle="tooltip" title="{{ button_back }}" class="btn btn-light">
|
|
<i class="fa-solid fa-reply"></i>
|
|
</a>
|
|
</div>
|
|
<h1>{{ heading_title }}</h1>
|
|
<ol class="breadcrumb">
|
|
{% for breadcrumb in breadcrumbs %}
|
|
<li class="breadcrumb-item">
|
|
<a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a>
|
|
</li>
|
|
{% endfor %}
|
|
</ol>
|
|
</div>
|
|
</div>
|
|
<div class="container-fluid">
|
|
<div id="payanyway-warning-startup" class="alert alert-warning{% if not warning_startup %} d-none{% endif %}">
|
|
<i class="fa-solid fa-triangle-exclamation"></i> <span>{{ warning_startup }}</span>
|
|
</div>
|
|
<div id="payanyway-warning-receipt-email" class="alert alert-warning{% if not warning_receipt_email %} d-none{% endif %}">
|
|
<i class="fa-solid fa-triangle-exclamation"></i> <span>{{ warning_receipt_email }}</span>
|
|
</div>
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<i class="fa-solid fa-pencil"></i>
|
|
{{ text_edit }}
|
|
</div>
|
|
<div class="card-header text-center">
|
|
<a href="https://www.payanyway.ru/" target="_blank"><img src="../extension/payanyway/admin/view/image/payment/payanyway.png" alt="PayAnyWay" title="PayAnyWay" width="336" height="50" /></a>
|
|
</div>
|
|
<div class="card-body">
|
|
<form id="form-payment" action="{{ save }}" method="post" data-oc-toggle="ajax">
|
|
<div class="tab-content">
|
|
<div id="tab-general" class="tab-pane active">
|
|
|
|
{# Статус модуля #}
|
|
<div class="row mb-3">
|
|
{# <label class="col-sm-2 col-form-label" for="input-account">{{ entry_status_label }}</label>#}
|
|
<label class="col-sm-2 col-form-label" for="input-pending-order-status">
|
|
<span>{{ entry_status_label }}</span>
|
|
<i class="fa-regular fa-circle-question text-info"
|
|
data-bs-toggle="tooltip"
|
|
title="{{ help_status }}"
|
|
></i>
|
|
</label>
|
|
<div class="col-sm-10">
|
|
<div class="form-check form-switch form-switch-lg">
|
|
<input type="hidden" name="payment_payanyway_status" value="0"/>
|
|
<input type="checkbox" name="payment_payanyway_status" value="1" id="input-status"
|
|
class="form-check-input" {% if payment_payanyway_status == "1" %} checked{% endif %}>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{# Номер счета #}
|
|
<div class="row mb-3 required">
|
|
<label class="col-sm-2 col-form-label" for="input-account">{{ entry_account_label }}</label>
|
|
<div class="col-sm-10">
|
|
<input type="number" oninput="this.value = this.value.replace(/[^0-9]/g, '')" step="1"
|
|
name="payment_payanyway_account" value="{{ payment_payanyway_account }}"
|
|
placeholder="{{ entry_account_description }}" id="input-account" class="form-control"/>
|
|
</div>
|
|
</div>
|
|
|
|
{# Код проверки целостности данных #}
|
|
<div class="row mb-3 required">
|
|
<label class="col-sm-2 col-form-label" for="input-integrity-code">{{ entry_integrity_code_label }}</label>
|
|
<div class="col-sm-10">
|
|
<div class="input-group">
|
|
<input type="password" name="payment_payanyway_integrity_code" value=""
|
|
placeholder="{{ integrity_code_placeholder }}" id="input-integrity-code" class="form-control"
|
|
autocomplete="off"/>
|
|
<button type="button" class="btn btn-light" id="button-integrity-code-toggle"
|
|
data-bs-toggle="tooltip" title="{{ button_integrity_code_toggle }}"><i class="fa-solid fa-eye"></i></button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{# Сервер платежей #}
|
|
<div class="row mb-3">
|
|
<label class="col-sm-2 col-form-label" for="input-server">{{ entry_server_label }}</label>
|
|
<div class="col-sm-10">
|
|
<select name="payment_payanyway_server" id="input-server" class="form-select">
|
|
<option value="prod" {% if payment_payanyway_server == 'prod' %} selected="selected" {% endif %}>{{ entry_server_prod_label }}</option>
|
|
<option value="demo" {% if payment_payanyway_server == 'demo' %} selected="selected" {% endif %}>{{ entry_server_demo_label }}</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
|
|
{# Тестовый режим #}
|
|
<div class="row mb-3">
|
|
<label class="col-sm-2 col-form-label" for="input-test-mode">
|
|
<span>{{ entry_test_mode_label }}</span>
|
|
<i class="fa-regular fa-circle-question text-info" data-bs-toggle="tooltip" title="{{ help_test_mode }}"></i>
|
|
</label>
|
|
<div class="col-sm-10">
|
|
<div class="form-check form-switch form-switch-lg">
|
|
<input type="hidden" name="payment_payanyway_test_mode" value="0"/>
|
|
<input type="checkbox" name="payment_payanyway_test_mode" value="1" id="input-test-mode"
|
|
class="form-check-input" {% if payment_payanyway_test_mode == "1" %} checked{% endif %}>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{# Фискализация чеков #}
|
|
<div class="row mb-3">
|
|
<label class="col-sm-2 col-form-label" for="input-fiscalization">
|
|
<span>{{ entry_fiscalization_label }}</span>
|
|
<i class="fa-regular fa-circle-question text-info" data-bs-toggle="tooltip" title="{{ help_fiscalization }}"></i>
|
|
</label>
|
|
<div class="col-sm-10">
|
|
<div class="form-check form-switch form-switch-lg">
|
|
<input type="hidden" name="payment_payanyway_fiscalization" value="0"/>
|
|
<input type="checkbox" name="payment_payanyway_fiscalization" value="1" id="input-fiscalization"
|
|
class="form-check-input" {% if payment_payanyway_fiscalization == "1" %} checked{% endif %}>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{# Поля чека — только при фискализации. Скрываются, а не блокируются: заблокированное
|
|
поле браузер не отправляет, и значение потерялось бы. #}
|
|
<div id="fiscalization-fields">
|
|
{# Email для чеков #}
|
|
<div class="row mb-3 required">
|
|
<label class="col-sm-2 col-form-label" for="input-receipt-email">
|
|
<span>{{ entry_receipt_email_label }}</span>
|
|
<i class="fa-regular fa-circle-question text-info" data-bs-toggle="tooltip" title="{{ help_receipt_email }}"></i>
|
|
</label>
|
|
<div class="col-sm-10">
|
|
<input type="email" name="payment_payanyway_receipt_email" value="{{ payment_payanyway_receipt_email }}"
|
|
placeholder="shop@example.ru" id="input-receipt-email" class="form-control" maxlength="64"/>
|
|
</div>
|
|
</div>
|
|
|
|
{# НДС #}
|
|
<div class="row mb-3">
|
|
<label class="col-sm-2 col-form-label" for="input-vat-rate">{{ entry_vat_rate_label }}</label>
|
|
<div class="col-sm-10">
|
|
<select name="payment_payanyway_vat_rate" id="input-vat-rate" class="form-select">
|
|
{% for vat_id, label in payment_payanyway_vat_rates %}
|
|
<option value="{{ vat_id }}" {% if vat_id == payment_payanyway_vat_rate %}selected="selected"{% endif %}>{{ label }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
</div>
|
|
</div>
|
|
|
|
{# Признак способа расчёта #}
|
|
<div class="row mb-3">
|
|
<label class="col-sm-2 col-form-label" for="input-payment-method">{{ entry_payment_method_label }}</label>
|
|
<div class="col-sm-10">
|
|
<select name="payment_payanyway_payment_method" id="input-payment-method" class="form-select">
|
|
{% for value, label in payment_payanyway_payment_methods %}
|
|
<option value="{{ value }}" {% if value == payment_payanyway_payment_method %}selected="selected"{% endif %}>{{ label }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
</div>
|
|
</div>
|
|
|
|
{# Признак предмета расчёта #}
|
|
<div class="row mb-3">
|
|
<label class="col-sm-2 col-form-label" for="input-payment-object">{{ entry_payment_object_label }}</label>
|
|
<div class="col-sm-10">
|
|
<select name="payment_payanyway_payment_object" id="input-payment-object" class="form-select">
|
|
{% for value, label in payment_payanyway_payment_objects %}
|
|
<option value="{{ value }}" {% if value == payment_payanyway_payment_object %}selected="selected"{% endif %}>{{ label }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{# Валюта платежа #}
|
|
<div class="row mb-3">
|
|
<label class="col-sm-2 col-form-label" for="input-currency">{{ entry_currency_label }}</label>
|
|
<div class="col-sm-10">
|
|
<select name="payment_payanyway_currency" id="input-currency" class="form-select">
|
|
{% for code, data in payment_payanyway_currencies %}
|
|
<option value="{{ code }}" {% if code == payment_payanyway_currency %}selected="selected"{% endif %}>{{ data.code }} ({{ entry_currency_rub_label }})</option>
|
|
{% endfor %}
|
|
</select>
|
|
<p class="help-block">{{ entry_currency_description }}</p>
|
|
</div>
|
|
</div>
|
|
|
|
{# Статусы заказа #}
|
|
<div class="row mb-3 required">
|
|
<label class="col-sm-2 col-form-label">{{ entry_order_statuses_label }}</label>
|
|
<div class="col-sm-10">
|
|
|
|
<div class="card" style="margin-bottom: 0;">
|
|
<div class="card-body">
|
|
{# pending #}
|
|
<div class="row mb-3">
|
|
<label class="col-sm-3 col-form-label" for="input-pending-order-status">
|
|
<span>{{ entry_pending_order_status_label }}</span>
|
|
<i class="fa-regular fa-circle-question text-info"
|
|
data-bs-toggle="tooltip"
|
|
title="{{ help_pending_order_status }}"
|
|
></i>
|
|
</label>
|
|
<div class="col-sm-9">
|
|
<select name="payment_payanyway_pending_order_status_id" id="input-pending-order-status" class="form-select">
|
|
<option value="" disabled selected="selected">
|
|
{{ entry_select_order_status_label|default(text_select) }}
|
|
</option>
|
|
{% for order_status in order_statuses %}
|
|
<option value="{{ order_status.order_status_id }}"
|
|
{% if order_status.order_status_id == payment_payanyway_pending_order_status_id %}selected="selected"{% endif %}>
|
|
{{ order_status.name }}
|
|
</option>
|
|
{% endfor %}
|
|
</select>
|
|
</div>
|
|
</div>
|
|
|
|
{# success #}
|
|
<div class="row mb-3">
|
|
<label class="col-sm-3 col-form-label" for="input-success-order-status">
|
|
<span>{{ entry_success_order_status_label }}</span>
|
|
<i class="fa-regular fa-circle-question text-info"
|
|
data-bs-toggle="tooltip"
|
|
title="{{ help_success_order_status }}"
|
|
></i>
|
|
</label>
|
|
<div class="col-sm-9">
|
|
<select name="payment_payanyway_success_order_status_id" id="input-success-order-status"
|
|
class="form-select">
|
|
<option value="" disabled
|
|
selected="selected">{{ entry_select_order_status_label|default(text_select) }}</option>
|
|
{% for order_status in order_statuses %}
|
|
<option value="{{ order_status.order_status_id }}"
|
|
{% if order_status.order_status_id == payment_payanyway_success_order_status_id %}selected="selected"{% endif %}>
|
|
{{ order_status.name }}
|
|
</option>
|
|
{% endfor %}
|
|
</select>
|
|
</div>
|
|
</div>
|
|
|
|
{# error #}
|
|
<div class="row mb-3">
|
|
<label class="col-sm-3 col-form-label" for="input-error-order-status">
|
|
<span>{{ entry_error_order_status_label }}</span>
|
|
<i class="fa-regular fa-circle-question text-info"
|
|
data-bs-toggle="tooltip"
|
|
title="{{ help_error_order_status }}"
|
|
></i>
|
|
</label>
|
|
<div class="col-sm-9">
|
|
<select name="payment_payanyway_error_order_status_id" id="input-error-order-status"
|
|
class="form-select">
|
|
<option value="" disabled
|
|
selected="selected">{{ entry_select_order_status_label|default(text_select) }}</option>
|
|
{% for order_status in order_statuses %}
|
|
<option value="{{ order_status.order_status_id }}"
|
|
{% if order_status.order_status_id == payment_payanyway_error_order_status_id %}selected="selected"{% endif %}>
|
|
{{ order_status.name }}
|
|
</option>
|
|
{% endfor %}
|
|
</select>
|
|
</div>
|
|
</div>
|
|
|
|
{# canceled #}
|
|
<div class="row mb-3">
|
|
<label class="col-sm-3 col-form-label">
|
|
<span>{{ entry_canceled_order_status_label }}</span>
|
|
<i class="fa-regular fa-circle-question text-info"
|
|
data-bs-toggle="tooltip"
|
|
title="{{ help_canceled_order_status }}"
|
|
></i>
|
|
</label>
|
|
<div class="col-sm-9">
|
|
<div class="form-control p-0" style="height: 150px; overflow: auto;">
|
|
{% for order_status in order_statuses %}
|
|
<div class="form-check m-2">
|
|
<input type="checkbox" name="payment_payanyway_canceled_order_status_ids[]"
|
|
value="{{ order_status.order_status_id }}" id="input-canceled-{{ order_status.order_status_id }}"
|
|
class="form-check-input"{% if order_status.order_status_id in payment_payanyway_canceled_order_status_ids %} checked{% endif %}/>
|
|
<label for="input-canceled-{{ order_status.order_status_id }}" class="form-check-label">{{ order_status.name }}</label>
|
|
</div>
|
|
{% endfor %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{# module_geo_zone #}
|
|
<div class="row mb-3">
|
|
<label class="col-sm-2 col-form-label" for="input-geo-zone">
|
|
<span>{{ entry_geo_zone_label }}</span>
|
|
<i class="fa-regular fa-circle-question text-info"
|
|
data-bs-toggle="tooltip"
|
|
title="{{ help_geo_zone }}"
|
|
></i>
|
|
</label>
|
|
<div class="col-sm-10">
|
|
<select name="payment_payanyway_geo_zone_id" id="input-geo-zone" class="form-select">
|
|
<option value="0">{{ text_all_zones }}</option>
|
|
{% for geo_zone in geo_zones %}
|
|
{% if geo_zone.geo_zone_id == payment_payanyway_geo_zone_id %}
|
|
<option value="{{ geo_zone.geo_zone_id }}" selected="selected">{{ geo_zone.name }}</option>
|
|
{% else %}
|
|
<option value="{{ geo_zone.geo_zone_id }}">{{ geo_zone.name }}</option>
|
|
{% endif %}
|
|
{% endfor %}
|
|
</select>
|
|
<p class="help-block">{{ entry_geo_zone_description }}</p>
|
|
</div>
|
|
</div>
|
|
|
|
{# URL для уведомлений #}
|
|
<div class="row mb-3">
|
|
<label class="col-sm-2 col-form-label" for="input-callback-url">
|
|
<span>{{ entry_callback_url_label }}</span>
|
|
<i class="fa-regular fa-circle-question text-info" data-bs-toggle="tooltip" title="{{ help_callback_url }}"></i>
|
|
</label>
|
|
<div class="col-sm-10">
|
|
<div class="input-group">
|
|
<input type="text" value="{{ callback_url }}" id="input-callback-url" class="form-control" readonly/>
|
|
<button type="button" class="btn btn-light" id="button-callback-url-copy">{{ button_copy }}</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{# sort-order #}
|
|
<div class="row mb-3">
|
|
<label class="col-sm-2 col-form-label" for="input-sort-order">
|
|
<span>{{ entry_sort_order_label }}</span>
|
|
<i class="fa-regular fa-circle-question text-info"
|
|
data-bs-toggle="tooltip"
|
|
title="{{ help_sort_order }}"
|
|
></i>
|
|
</label>
|
|
<div class="col-sm-10">
|
|
<input type="number" oninput="this.value = this.value.replace(/[^-0-9]/g, '').replace(/(?!^-)-/g, '')"
|
|
step="1" name="payment_payanyway_sort_order" value="{{ payment_payanyway_sort_order }}"
|
|
placeholder="{{ module_sort_order_label }}" id="input-sort-order" class="form-control"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<script>
|
|
$(function () {
|
|
function toggleFiscalizationFields() {
|
|
$('#fiscalization-fields').toggle($('#input-fiscalization').is(':checked'));
|
|
}
|
|
$('#input-fiscalization').on('change', toggleFiscalizationFields);
|
|
toggleFiscalizationFields();
|
|
|
|
// Форму отправляет common.js OpenCart; после сохранения обновляем предупреждения без перезагрузки.
|
|
$(document).on('ajaxSuccess', function (event, xhr, settings) {
|
|
var json = xhr.responseJSON;
|
|
if (!json || !json['payanyway_warnings'] || (settings.url.indexOf('payanyway.save') === -1)) {
|
|
return;
|
|
}
|
|
$.each({'startup': '#payanyway-warning-startup', 'receipt_email': '#payanyway-warning-receipt-email'}, function (key, selector) {
|
|
var text = json['payanyway_warnings'][key] || '';
|
|
$(selector).toggleClass('d-none', text === '').find('span').html(text);
|
|
});
|
|
});
|
|
|
|
$('#button-integrity-code-toggle').on('click', function () {
|
|
var $input = $('#input-integrity-code');
|
|
$input.attr('type', $input.attr('type') === 'password' ? 'text' : 'password');
|
|
$(this).find('i').toggleClass('fa-eye fa-eye-slash');
|
|
});
|
|
|
|
$('#button-callback-url-copy').on('click', function () {
|
|
var $button = $(this);
|
|
$('#input-callback-url').trigger('select');
|
|
document.execCommand('copy');
|
|
$button.text('{{ text_copied }}');
|
|
setTimeout(function () { $button.text('{{ button_copy }}'); }, 2000);
|
|
});
|
|
});
|
|
</script>
|
|
{{ footer }}
|