1117 lines
73 KiB
Twig
1117 lines
73 KiB
Twig
{{ header }}{{ column_left }}
|
|
<div id="content">
|
|
<div class="page-header">
|
|
<div class="container-fluid">
|
|
<div class="float-end">
|
|
{% if orders %}
|
|
<a href="{{ orders }}" data-bs-toggle="tooltip" title="{{ button_order }}" class="btn btn-warning"><i class="fa-solid fa-receipt"></i></a>
|
|
{% endif %}
|
|
<button type="submit" form="form-customer" data-bs-toggle="tooltip" title="{{ button_save }}" class="btn btn-primary"><i class="fa-solid fa-floppy-disk"></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 class="card">
|
|
<div class="card-header"><i class="fa-solid fa-pencil"></i> {{ text_form }}</div>
|
|
<div class="card-body">
|
|
<form id="form-customer" action="{{ save }}" method="post" data-oc-toggle="ajax">
|
|
<ul class="nav nav-tabs">
|
|
<li class="nav-item"><a href="#tab-general" data-bs-toggle="tab" class="nav-link active">{{ tab_general }}</a></li>
|
|
<li class="nav-item"><a href="#tab-address" data-bs-toggle="tab" class="nav-link">{{ tab_address }}</a></li>
|
|
<li class="nav-item"><a href="#tab-payment" data-bs-toggle="tab" class="nav-link">{{ tab_payment_method }}</a></li>
|
|
<li class="nav-item"><a href="#tab-history" data-bs-toggle="tab" class="nav-link">{{ tab_history }}</a></li>
|
|
<li class="nav-item"><a href="#tab-transaction" data-bs-toggle="tab" class="nav-link">{{ tab_transaction }}</a></li>
|
|
<li class="nav-item"><a href="#tab-reward" data-bs-toggle="tab" class="nav-link">{{ tab_reward }}</a></li>
|
|
<li class="nav-item"><a href="#tab-ip" data-bs-toggle="tab" class="nav-link">{{ tab_ip }}</a></li>
|
|
</ul>
|
|
<div class="tab-content">
|
|
<div id="tab-general" class="tab-pane active">
|
|
<fieldset>
|
|
<legend>{{ text_customer }}</legend>
|
|
<div class="row mb-3">
|
|
<label for="input-store" class="col-sm-2 col-form-label">{{ entry_store }}</label>
|
|
<div class="col-sm-10">
|
|
<select name="store_id" id="input-store" class="form-select">
|
|
{% for store in stores %}
|
|
<option value="{{ store.store_id }}"{% if store.store_id == store_id %} selected{% endif %}>{{ store.name }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="row mb-3">
|
|
<label for="input-customer-group" class="col-sm-2 col-form-label">{{ entry_customer_group }}</label>
|
|
<div class="col-sm-10">
|
|
<select name="customer_group_id" id="input-customer-group" class="form-select">
|
|
{% for customer_group in customer_groups %}
|
|
<option value="{{ customer_group.customer_group_id }}"{% if customer_group.customer_group_id == customer_group_id %} selected{% endif %}>{{ customer_group.name }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="row mb-3 required">
|
|
<label for="input-firstname" class="col-sm-2 col-form-label">{{ entry_firstname }}</label>
|
|
<div class="col-sm-10">
|
|
<input type="text" name="firstname" value="{{ firstname }}" placeholder="{{ entry_firstname }}" id="input-firstname" class="form-control"/>
|
|
<div id="error-firstname" class="invalid-feedback"></div>
|
|
</div>
|
|
</div>
|
|
<div class="row mb-3 required">
|
|
<label for="input-lastname" class="col-sm-2 col-form-label">{{ entry_lastname }}</label>
|
|
<div class="col-sm-10">
|
|
<input type="text" name="lastname" value="{{ lastname }}" placeholder="{{ entry_lastname }}" id="input-lastname" class="form-control"/>
|
|
<div id="error-lastname" class="invalid-feedback"></div>
|
|
</div>
|
|
</div>
|
|
<div class="row mb-3 required">
|
|
<label for="input-email" class="col-sm-2 col-form-label">{{ entry_email }}</label>
|
|
<div class="col-sm-10">
|
|
<input type="text" name="email" value="{{ email }}" placeholder="{{ entry_email }}" id="input-email" class="form-control"/>
|
|
<div id="error-email" class="invalid-feedback"></div>
|
|
</div>
|
|
</div>
|
|
<div class="row mb-3{% if config_telephone_required %} required{% endif %}">
|
|
<label for="input-telephone" class="col-sm-2 col-form-label">{{ entry_telephone }}</label>
|
|
<div class="col-sm-10">
|
|
<input type="text" name="telephone" value="{{ telephone }}" placeholder="{{ entry_telephone }}" id="input-telephone" class="form-control"/>
|
|
<div id="error-telephone" class="invalid-feedback"></div>
|
|
</div>
|
|
</div>
|
|
{% for custom_field in custom_fields %}
|
|
|
|
{% if custom_field.location == 'account' %}
|
|
|
|
{% if custom_field.type == 'select' %}
|
|
<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
|
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
|
<div class="col-sm-10">
|
|
<select name="custom_field[{{ custom_field.custom_field_id }}]" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-select">
|
|
<option value="">{{ text_select }}</option>
|
|
{% for custom_field_value in custom_field.custom_field_value %}
|
|
<option value="{{ custom_field_value.custom_field_value_id }}"{% if account_custom_field[custom_field.custom_field_id] and custom_field_value.custom_field_value_id == account_custom_field[custom_field.custom_field_id] %} selected{% endif %}>{{ custom_field_value.name }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% if custom_field.type == 'radio' %}
|
|
<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
|
<label class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
|
<div class="col-sm-10">
|
|
<div id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-control" style="height: 150px; overflow: auto;">
|
|
{% for custom_field_value in custom_field.custom_field_value %}
|
|
<div class="form-check">
|
|
<input type="radio" name="custom_field[{{ custom_field.custom_field_id }}]" value="{{ custom_field_value.custom_field_value_id }}" id="input-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-input"{% if account_custom_field[custom_field.custom_field_id] and custom_field_value.custom_field_value_id == account_custom_field[custom_field.custom_field_id] %} checked{% endif %}/> <label for="input-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-label">{{ custom_field_value.name }}</label>
|
|
</div>
|
|
{% endfor %}
|
|
</div>
|
|
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% if custom_field.type == 'checkbox' %}
|
|
<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
|
<label class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
|
<div class="col-sm-10">
|
|
<div id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-control" style="height: 150px; overflow: auto;">
|
|
{% for custom_field_value in custom_field.custom_field_value %}
|
|
<div class="form-check">
|
|
<input type="checkbox" name="custom_field[{{ custom_field.custom_field_id }}][]" value="{{ custom_field_value.custom_field_value_id }}" id="input-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-input"{% if account_custom_field[custom_field.custom_field_id] and custom_field_value.custom_field_value_id in account_custom_field[custom_field.custom_field_id] %} checked{% endif %}/> <label for="input-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-label">{{ custom_field_value.name }}</label>
|
|
</div>
|
|
{% endfor %}
|
|
</div>
|
|
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% if custom_field.type == 'text' %}
|
|
<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
|
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
|
<div class="col-sm-10">
|
|
<input type="text" name="custom_field[{{ custom_field.custom_field_id }}]" value="{{ account_custom_field[custom_field.custom_field_id] ? account_custom_field[custom_field.custom_field_id] : custom_field.value }}" placeholder="{{ custom_field.name }}" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-control"/>
|
|
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% if custom_field.type == 'textarea' %}
|
|
<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
|
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
|
<div class="col-sm-10">
|
|
<textarea name="custom_field[{{ custom_field.custom_field_id }}]" rows="5" placeholder="{{ custom_field.name }}" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-control">{{ account_custom_field[custom_field.custom_field_id] ? account_custom_field[custom_field.custom_field_id] : custom_field.value }}</textarea>
|
|
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% if custom_field.type == 'file' %}
|
|
<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
|
<label class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
|
<div class="col-sm-10">
|
|
|
|
<div class="input-group">
|
|
<button type="button" data-oc-toggle="upload" data-oc-url="{{ upload }}" data-oc-target="#input-custom-field-{{ custom_field.custom_field_id }}" data-oc-size-max="{{ config_file_max_size }}" data-oc-size-error="{{ error_upload_size }}" class="btn btn-primary"><i class="fa-solid fa-upload"></i> {{ button_upload }}</button>
|
|
<input type="text" name="custom_field[{{ custom_field.custom_field_id }}]" value="{{ account_custom_field[custom_field.custom_field_id] ? account_custom_field[custom_field.custom_field_id] }}" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-control" readonly/>
|
|
<button type="button" data-oc-toggle="download" data-oc-target="#input-custom-field-{{ custom_field.custom_field_id }}"{% if not account_custom_field[custom_field.custom_field_id] %} disabled{% endif %} class="btn btn-outline-secondary"><i class="fa-solid fa-download"></i> {{ button_download }}</button>
|
|
<button type="button" data-oc-toggle="clear" data-bs-toggle="tooltip" title="{{ button_clear }}" data-oc-target="#input-custom-field-{{ custom_field.custom_field_id }}"{% if not account_custom_field[custom_field.custom_field_id] %} disabled{% endif %} class="btn btn-outline-danger"><i class="fa-solid fa-eraser"></i></button>
|
|
</div>
|
|
|
|
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% if custom_field.type == 'date' %}
|
|
<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
|
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
|
<div class="col-sm-10">
|
|
<div class="input-group">
|
|
<input type="text" name="custom_field[{{ custom_field.custom_field_id }}]" value="{{ account_custom_field[custom_field.custom_field_id] ? account_custom_field[custom_field.custom_field_id] : custom_field.value }}" placeholder="{{ custom_field.name }}" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-control date"/>
|
|
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
|
</div>
|
|
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% if custom_field.type == 'time' %}
|
|
<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
|
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
|
<div class="col-sm-10">
|
|
<div class="input-group">
|
|
<input type="text" name="custom_field[{{ custom_field.custom_field_id }}]" value="{{ account_custom_field[custom_field.custom_field_id] ? account_custom_field[custom_field.custom_field_id] : custom_field.value }}" placeholder="{{ custom_field.name }}" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-control time"/>
|
|
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
|
</div>
|
|
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% if custom_field.type == 'datetime' %}
|
|
<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
|
<label for="input-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
|
<div class="col-sm-10">
|
|
<div class="input-group">
|
|
<input type="text" name="custom_field[{{ custom_field.custom_field_id }}]" value="{{ account_custom_field[custom_field.custom_field_id] ? account_custom_field[custom_field.custom_field_id] : custom_field.value }}" placeholder="{{ custom_field.name }}" id="input-custom-field-{{ custom_field.custom_field_id }}" class="form-control datetime"/>
|
|
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
|
</div>
|
|
<div id="error-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% endif %}
|
|
{% endfor %}
|
|
</fieldset>
|
|
<fieldset>
|
|
<legend>{{ text_password }}</legend>
|
|
<div class="row mb-3 required">
|
|
<label for="input-password" class="col-sm-2 col-form-label">{{ entry_password }}</label>
|
|
<div class="col-sm-10">
|
|
<input type="password" name="password" value="{{ password }}" placeholder="{{ entry_password }}" id="input-password" class="form-control" autocomplete="new-password"/>
|
|
<div id="error-password" class="invalid-feedback"></div>
|
|
</div>
|
|
</div>
|
|
<div class="row mb-3 required">
|
|
<label for="input-confirm" class="col-sm-2 col-form-label">{{ entry_confirm }}</label>
|
|
<div class="col-sm-10">
|
|
<input type="password" name="confirm" value="{{ confirm }}" placeholder="{{ entry_confirm }}" id="input-confirm" class="form-control"/>
|
|
<div id="error-confirm" class="invalid-feedback"></div>
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
<fieldset>
|
|
<legend>{{ text_other }}</legend>
|
|
<div class="row mb-3">
|
|
<label class="col-sm-2 col-form-label">{{ entry_newsletter }}</label>
|
|
<div class="col-sm-10">
|
|
<div class="form-check form-switch form-switch-lg">
|
|
<input type="hidden" name="newsletter" value="0"/> <input type="checkbox" name="newsletter" value="1" id="input-newsletter" class="form-check-input"{% if newsletter %} checked{% endif %}/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="row mb-3">
|
|
<label class="col-sm-2 col-form-label">{{ entry_status }}</label>
|
|
<div class="col-sm-10">
|
|
<div class="form-check form-switch form-switch-lg">
|
|
<input type="hidden" name="status" value="0"/> <input type="checkbox" name="status" value="1" id="input-status" class="form-check-input"{% if status %} checked{% endif %}/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="row mb-3">
|
|
<label class="col-sm-2 col-form-label">{{ entry_safe }}</label>
|
|
<div class="col-sm-10">
|
|
<div class="form-check form-switch form-switch-lg">
|
|
<input type="hidden" name="safe" value="0"/> <input type="checkbox" name="safe" value="1" id="input-safe" class="form-check-input"{% if safe %} checked{% endif %}/>
|
|
</div>
|
|
<div class="form-text">{{ help_safe }}</div>
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
<div id="tab-address" class="tab-pane">
|
|
{% set address_row = 0 %}
|
|
{% for address in addresses %}
|
|
<fieldset id="address-row-{{ address_row }}">
|
|
<legend>{{ text_address }} {{ address_row + 1 }} <button type="button" onclick="$('#address-row-{{ address_row }}').remove();" data-bs-toggle="tooltip" title="{{ button_remove }}" class="btn btn-danger btn-sm float-end"><i class="fa-solid fa-minus-circle"></i></button></legend>
|
|
<div class="row mb-3 required">
|
|
<label for="input-address-{{ address_row }}-firstname" class="col-sm-2 col-form-label">{{ entry_firstname }}</label>
|
|
<div class="col-sm-10">
|
|
<input type="text" name="address[{{ address_row }}][firstname]" value="{{ address.firstname }}" placeholder="{{ entry_firstname }}" id="input-address-{{ address_row }}-firstname" class="form-control"/>
|
|
<div id="error-address-{{ address_row }}-firstname" class="invalid-feedback"></div>
|
|
</div>
|
|
</div>
|
|
<div class="row mb-3 required">
|
|
<label for="input-address-{{ address_row }}-lastname" class="col-sm-2 col-form-label">{{ entry_lastname }}</label>
|
|
<div class="col-sm-10">
|
|
<input type="text" name="address[{{ address_row }}][lastname]" value="{{ address.lastname }}" placeholder="{{ entry_lastname }}" id="input-address-{{ address_row }}-lastname" class="form-control"/>
|
|
<div id="error-address-{{ address_row }}-lastname" class="invalid-feedback"></div>
|
|
</div>
|
|
</div>
|
|
<div class="row mb-3">
|
|
<label for="input-address-{{ address_row }}-company" class="col-sm-2 col-form-label">{{ entry_company }}</label>
|
|
<div class="col-sm-10">
|
|
<input type="text" name="address[{{ address_row }}][company]" value="{{ address.company }}" placeholder="{{ entry_company }}" id="input-address-{{ address_row }}-company" class="form-control"/>
|
|
</div>
|
|
</div>
|
|
<div class="row mb-3 required">
|
|
<label for="input-address-{{ address_row }}-address-1" class="col-sm-2 col-form-label">{{ entry_address_1 }}</label>
|
|
<div class="col-sm-10">
|
|
<input type="text" name="address[{{ address_row }}][address_1]" value="{{ address.address_1 }}" placeholder="{{ entry_address_1 }}" id="input-address-{{ address_row }}-address-1" class="form-control"/>
|
|
<div id="error-address-{{ address_row }}-address-1" class="invalid-feedback"></div>
|
|
</div>
|
|
</div>
|
|
<div class="row mb-3">
|
|
<label for="input-address-{{ address_row }}-address-2" class="col-sm-2 col-form-label">{{ entry_address_2 }}</label>
|
|
<div class="col-sm-10">
|
|
<input type="text" name="address[{{ address_row }}][address_2]" value="{{ address.address_2 }}" placeholder="{{ entry_address_2 }}" id="input-address-{{ address_row }}-address-2" class="form-control"/>
|
|
</div>
|
|
</div>
|
|
<div class="row mb-3 required">
|
|
<label for="input-address-{{ address_row }}-city" class="col-sm-2 col-form-label">{{ entry_city }}</label>
|
|
<div class="col-sm-10">
|
|
<input type="text" name="address[{{ address_row }}][city]" value="{{ address.city }}" placeholder="{{ entry_city }}" id="input-address-{{ address_row }}-city" class="form-control"/>
|
|
<div id="error-address-{{ address_row }}-city" class="invalid-feedback"></div>
|
|
</div>
|
|
</div>
|
|
<div class="row mb-3 required">
|
|
<label for="input-address-{{ address_row }}-postcode" class="col-sm-2 col-form-label">{{ entry_postcode }}</label>
|
|
<div class="col-sm-10">
|
|
<input type="text" name="address[{{ address_row }}][postcode]" value="{{ address.postcode }}" placeholder="{{ entry_postcode }}" id="input-address-{{ address_row }}-postcode" class="form-control"/>
|
|
<div id="error-address-{{ address_row }}-postcode" class="invalid-feedback"></div>
|
|
</div>
|
|
</div>
|
|
<div class="row mb-3 required">
|
|
<label for="input-address-{{ address_row }}-country" class="col-sm-2 col-form-label">{{ entry_country }}</label>
|
|
<div class="col-sm-10">
|
|
<select name="address[{{ address_row }}][country_id]" id="input-address-{{ address_row }}-country" class="form-select" data-address-row="{{ address_row }}" data-zone-id="{{ address.zone_id }}" disabled>
|
|
<option value="0">{{ text_select }}</option>
|
|
{% for country in countries %}
|
|
<option value="{{ country.country_id }}"{% if country.country_id == address.country_id %} selected{% endif %}>{{ country.name }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
<div id="error-address-{{ address_row }}-country" class="invalid-feedback"></div>
|
|
</div>
|
|
</div>
|
|
<div class="row mb-3 required">
|
|
<label for="input-address-{{ address_row }}-zone" class="col-sm-2 col-form-label">{{ entry_zone }}</label>
|
|
<div class="col-sm-10">
|
|
<select name="address[{{ address_row }}][zone_id]" id="input-address-{{ address_row }}-zone" class="form-select" disabled></select>
|
|
<div id="error-address-{{ address_row }}-zone" class="invalid-feedback"></div>
|
|
</div>
|
|
</div>
|
|
|
|
{% for custom_field in custom_fields %}
|
|
{% if custom_field.location == 'address' %}
|
|
|
|
{% if custom_field.type == 'select' %}
|
|
<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
|
<label for="input-address-{{ address_row }}-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
|
<div class="col-sm-10">
|
|
<select name="address[{{ address_row }}][custom_field][{{ custom_field.custom_field_id }}]" id="input-address-{{ address_row }}-custom-field-{{ custom_field.custom_field_id }}" class="form-select">
|
|
<option value="">{{ text_select }}</option>
|
|
{% for custom_field_value in custom_field.custom_field_value %}
|
|
<option value="{{ custom_field_value.custom_field_value_id }}"{% if address.custom_field[custom_field.custom_field_id] and custom_field_value.custom_field_value_id == address.custom_field[custom_field.custom_field_id] %} selected{% endif %}>{{ custom_field_value.name }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
<div id="error-address-{{ address_row }}-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% if custom_field.type == 'radio' %}
|
|
<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
|
<label class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
|
<div class="col-sm-10">
|
|
<div id="input-address-{{ address_row }}-custom-field-{{ custom_field.custom_field_id }}" class="form-control" style="height: 150px; overflow: auto;">
|
|
{% for custom_field_value in custom_field.custom_field_value %}
|
|
<div class="form-check">
|
|
<input type="radio" name="address[{{ address_row }}][custom_field][{{ custom_field.custom_field_id }}]" value="{{ custom_field_value.custom_field_value_id }}" id="input-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-input"{% if address.custom_field[custom_field.custom_field_id] and custom_field_value.custom_field_value_id == address.custom_field[custom_field.custom_field_id] %} checked{% endif %}/> <label for="input-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-label">{{ custom_field_value.name }}</label>
|
|
</div>
|
|
{% endfor %}
|
|
</div>
|
|
<div id="error-address-{{ address_row }}-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% if custom_field.type == 'checkbox' %}
|
|
<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
|
<label class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
|
<div class="col-sm-10">
|
|
<div id="input-address-{{ address_row }}-custom-field-{{ custom_field.custom_field_id }}" class="form-control" style="height: 150px; overflow: auto;">
|
|
{% for custom_field_value in custom_field.custom_field_value %}
|
|
<div class="form-check">
|
|
<input type="checkbox" name="address[{{ address_row }}][custom_field][{{ custom_field.custom_field_id }}][]" value="{{ custom_field_value.custom_field_value_id }}" id="input-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-input"{% if address.custom_field[custom_field.custom_field_id] and custom_field_value.custom_field_value_id in address.custom_field[custom_field.custom_field_id] %} checked{% endif %}/> <label for="input-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-label">{{ custom_field_value.name }}</label>
|
|
</div>
|
|
{% endfor %}
|
|
</div>
|
|
<div id="error-address-{{ address_row }}-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% if custom_field.type == 'text' %}
|
|
<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
|
<label for="input-address-{{ address_row }}-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
|
<div class="col-sm-10">
|
|
<input type="text" name="address[{{ address_row }}][custom_field][{{ custom_field.custom_field_id }}]" value="{{ address.custom_field[custom_field.custom_field_id] ? address.custom_field[custom_field.custom_field_id] : custom_field.value }}" placeholder="{{ custom_field.name }}" id="input-address-{{ address_row }}-custom-field-{{ custom_field.custom_field_id }}" class="form-control"/>
|
|
<div id="error-address-{{ address_row }}-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% if custom_field.type == 'textarea' %}
|
|
<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
|
<label for="input-address-{{ address_row }}-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
|
<div class="col-sm-10">
|
|
<textarea name="address[{{ address_row }}][custom_field][{{ custom_field.custom_field_id }}]" rows="5" placeholder="{{ custom_field.name }}" id="input-address-{{ address_row }}-custom-field-{{ custom_field.custom_field_id }}" class="form-control">{{ address.custom_field[custom_field.custom_field_id] ? address.custom_field[custom_field.custom_field_id] : custom_field.value }}</textarea>
|
|
<div id="error-address-{{ address_row }}-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% if custom_field.type == 'file' %}
|
|
<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
|
<label class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
|
<div class="col-sm-10">
|
|
<div class="input-group">
|
|
<button type="button" data-oc-toggle="upload" data-oc-url="{{ upload }}" data-oc-target="#input-address-{{ address_row }}-custom-field-{{ custom_field.custom_field_id }}" data-oc-size-max="{{ config_file_max_size }}" data-oc-size-error="{{ error_upload_size }}" class="btn btn-primary"><i class="fa-solid fa-upload"></i> {{ button_upload }}</button>
|
|
<input type="text" name="address[{{ address_row }}][custom_field][{{ custom_field.custom_field_id }}]" value="{{ address.custom_field[custom_field.custom_field_id] ? address.custom_field[custom_field.custom_field_id] }}" id="input-address-{{ address_row }}-custom-field-{{ custom_field.custom_field_id }}" class="form-control" readonly/>
|
|
<button type="button" data-oc-toggle="download" data-oc-target="#input-address-{{ address_row }}-custom-field-{{ custom_field.custom_field_id }}" class="btn btn-outline-secondary"{% if not address.custom_field[custom_field.custom_field_id] %} disabled{% endif %}><i class="fa-solid fa-download"></i> {{ button_download }}</button>
|
|
<button type="button" data-oc-toggle="clear" data-oc-target="#input-address-{{ address_row }}-custom-field-{{ custom_field.custom_field_id }}" data-bs-toggle="tooltip" title="{{ button_clear }}" class="btn btn-outline-danger"{% if not address.custom_field[custom_field.custom_field_id] %} disabled{% endif %}><i class="fa-solid fa-eraser"></i></button>
|
|
</div>
|
|
<div id="error-address-{{ address_row }}-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% if custom_field.type == 'date' %}
|
|
<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
|
<label for="input-address-{{ address_row }}-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
|
<div class="col-sm-10">
|
|
<div class="input-group">
|
|
<input type="text" name="address[{{ address_row }}][custom_field][{{ custom_field.custom_field_id }}]" value="{{ address.custom_field[custom_field.custom_field_id] ? address.custom_field[custom_field.custom_field_id] : custom_field.value }}" placeholder="{{ custom_field.name }}" id="input-address-{{ address_row }}-custom-field-{{ custom_field.custom_field_id }}" class="form-control date"/>
|
|
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
|
</div>
|
|
<div id="error-address-{{ address_row }}-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% if custom_field.type == 'time' %}
|
|
<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
|
<label for="input-address-{{ address_row }}-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
|
<div class="col-sm-10">
|
|
<div class="input-group">
|
|
<input type="text" name="address[{{ address_row }}][custom_field][{{ custom_field.custom_field_id }}]" value="{{ address.custom_field[custom_field.custom_field_id] ? address.custom_field[custom_field.custom_field_id] : custom_field.value }}" placeholder="{{ custom_field.name }}" id="input-address-{{ address_row }}-custom-field-{{ custom_field.custom_field_id }}" class="form-control time"/>
|
|
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
|
</div>
|
|
<div id="error-address-{{ address_row }}-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% if custom_field.type == 'datetime' %}
|
|
<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">
|
|
<label for="input-address-{{ address_row }}-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name }}</label>
|
|
<div class="col-sm-10">
|
|
<div class="input-group">
|
|
<input type="text" name="address[{{ address_row }}][custom_field][{{ custom_field.custom_field_id }}]" value="{{ address.custom_field[custom_field.custom_field_id] ? address.custom_field[custom_field.custom_field_id] : custom_field.value }}" placeholder="{{ custom_field.name }}" id="input-address-{{ address_row }}-custom-field-{{ custom_field.custom_field_id }}" class="form-control datetime"/>
|
|
<div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>
|
|
</div>
|
|
<div id="error-address-{{ address_row }}-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% endif %}
|
|
|
|
{% endfor %}
|
|
|
|
<div class="row mb-3">
|
|
<label for="input-address-{{ address_row }}-default" class="col-sm-2 col-form-label">{{ entry_default }}</label>
|
|
<div class="col-sm-10">
|
|
<div class="form-check">
|
|
<input type="radio" name="address[{{ address_row }}][default]" value="1" id="input-address-{{ address_row }}-default" class="form-check-input"{% if address.default %} checked{% endif %}/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<input type="hidden" name="address[{{ address_row }}][address_id]" value="{{ address.address_id }}"/>
|
|
</fieldset>
|
|
{% set address_row = address_row + 1 %}
|
|
{% endfor %}
|
|
<div class="text-end">
|
|
<button type="button" id="button-address" class="btn btn-primary"><i class="fa-solid fa-plus-circle"></i> {{ button_address_add }}</button>
|
|
</div>
|
|
<input type="hidden" name="customer_id" value="{{ customer_id }}" id="input-customer-id"/>
|
|
</div>
|
|
|
|
<div id="tab-payment" class="tab-pane">
|
|
<fieldset>
|
|
<legend>{{ text_payment_method }}</legend>
|
|
<div id="payment-method">{{ payment_method }}</div>
|
|
</fieldset>
|
|
</div>
|
|
<div id="tab-history" class="tab-pane">
|
|
<fieldset>
|
|
<legend>{{ text_history }}</legend>
|
|
<div id="history">{{ history }}</div>
|
|
</fieldset>
|
|
<fieldset>
|
|
<legend>{{ text_history_add }}</legend>
|
|
<div class="row mb-3">
|
|
<label for="input-history" class="col-sm-2 col-form-label">{{ entry_comment }}</label>
|
|
<div class="col-sm-10">
|
|
<textarea name="comment" rows="8" placeholder="{{ entry_comment }}" id="input-history" class="form-control"></textarea>
|
|
</div>
|
|
</div>
|
|
<div class="text-end">
|
|
<button type="button" id="button-history" class="btn btn-primary"><i class="fa-solid fa-plus-circle"></i> {{ button_history_add }}</button>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
|
|
<div id="tab-transaction" class="tab-pane">
|
|
<fieldset>
|
|
<legend>{{ text_transaction }}</legend>
|
|
<div id="transaction">{{ transaction }}</div>
|
|
</fieldset>
|
|
<fieldset>
|
|
<legend>{{ text_transaction_add }}</legend>
|
|
<div class="row mb-3">
|
|
<label for="input-transaction" class="col-sm-2 col-form-label">{{ entry_description }}</label>
|
|
<div class="col-sm-10">
|
|
<input type="text" name="description" value="" placeholder="{{ entry_description }}" id="input-transaction" class="form-control"/>
|
|
</div>
|
|
</div>
|
|
<div class="row mb-3">
|
|
<label for="input-amount" class="col-sm-2 col-form-label">{{ entry_amount }}</label>
|
|
<div class="col-sm-10">
|
|
<input type="text" name="amount" value="" placeholder="{{ entry_amount }}" id="input-amount" class="form-control"/>
|
|
</div>
|
|
</div>
|
|
<div class="text-end">
|
|
<button type="button" id="button-transaction" class="btn btn-primary"><i class="fa-solid fa-plus-circle"></i> {{ button_transaction_add }}</button>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
<div id="tab-reward" class="tab-pane">
|
|
<fieldset>
|
|
<legend>{{ text_reward }}</legend>
|
|
<div id="reward">{{ reward }}</div>
|
|
</fieldset>
|
|
<fieldset>
|
|
<legend>{{ text_reward_add }}</legend>
|
|
<div class="row mb-3">
|
|
<label for="input-reward" class="col-sm-2 col-form-label">{{ entry_description }}</label>
|
|
<div class="col-sm-10">
|
|
<input type="text" name="description" value="" placeholder="{{ entry_description }}" id="input-reward" class="form-control"/>
|
|
</div>
|
|
</div>
|
|
<div class="row mb-3">
|
|
<label for="input-points" class="col-sm-2 col-form-label">{{ entry_points }}</label>
|
|
<div class="col-sm-10">
|
|
<input type="text" name="points" value="" placeholder="{{ entry_points }}" id="input-points" class="form-control"/>
|
|
<div class="form-text">{{ help_points }}</div>
|
|
</div>
|
|
</div>
|
|
<div class="text-end">
|
|
<button type="button" id="button-reward" class="btn btn-primary"><i class="fa-solid fa-plus-circle"></i> {{ button_reward_add }}</button>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
<div id="tab-ip" class="tab-pane">
|
|
<fieldset>
|
|
<legend>{{ text_ip }}</legend>
|
|
<div id="ip">{{ ip }}</div>
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<script type="text/javascript"><!--
|
|
$('#input-customer-group').on('change', function () {
|
|
$.ajax({
|
|
url: 'index.php?route=customer/customer.customfield&user_token={{ user_token }}&customer_group_id=' + this.value,
|
|
dataType: 'json',
|
|
success: function (json) {
|
|
$('.custom-field').hide();
|
|
$('.custom-field').removeClass('required');
|
|
|
|
for (i = 0; i < json.length; i++) {
|
|
custom_field = json[i];
|
|
|
|
$('.custom-field-' + custom_field['custom_field_id']).show();
|
|
|
|
if (custom_field['required']) {
|
|
$('.custom-field-' + custom_field['custom_field_id']).addClass('required');
|
|
}
|
|
}
|
|
},
|
|
error: function (xhr, ajaxOptions, thrownError) {
|
|
console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
|
|
}
|
|
});
|
|
});
|
|
|
|
$('#input-customer-group').trigger('change');
|
|
|
|
var address_row = {{ address_row }};
|
|
|
|
$('#button-address').on('click', function (e) {
|
|
e.preventDefault();
|
|
|
|
html = '<fieldset id="address-row-' + address_row + '">';
|
|
html += ' <legend>{{ text_address }} ' + (address_row + 1) + ' <button type="button" onclick="$(\'#address-row-' + address_row + '\').remove();" data-bs-toggle="tooltip" title="{{ button_remove|escape('js') }}" class="btn btn-danger btn-sm float-end"><i class="fa-solid fa-minus-circle"></i></button></legend>';
|
|
html += ' <input type="hidden" name="address[' + address_row + '][address_id]" value="" />';
|
|
|
|
html += ' <div class="row mb-3 required">';
|
|
html += ' <label for="input-address-' + address_row + '-firstname" class="col-sm-2 col-form-label">{{ entry_firstname|escape('js') }}</label>';
|
|
html += ' <div class="col-sm-10">';
|
|
html += ' <input type="text" name="address[' + address_row + '][firstname]" value="" placeholder="{{ entry_firstname|escape('js') }}" id="input-address-' + address_row + '-firstname" class="form-control"/>';
|
|
html += ' <div id="error-address-' + address_row + '-firstname" class="invalid-feedback"></div>';
|
|
html += ' </div>';
|
|
html += ' </div>';
|
|
|
|
html += ' <div class="row mb-3 required">';
|
|
html += ' <label for="input-address-' + address_row + '-lastname" class="col-sm-2 col-form-label">{{ entry_lastname|escape('js') }}</label>';
|
|
html += ' <div class="col-sm-10">';
|
|
html += ' <input type="text" name="address[' + address_row + '][lastname]" value="" placeholder="{{ entry_lastname|escape('js') }}" id="input-address-' + address_row + '-lastname" class="form-control"/>';
|
|
html += ' <div id="error-address-' + address_row + '-lastname" class="invalid-feedback"></div>';
|
|
html += ' </div>';
|
|
html += ' </div>';
|
|
|
|
html += ' <div class="row mb-3">';
|
|
html += ' <label for="input-address-' + address_row + '-company" class="col-sm-2 col-form-label">{{ entry_company|escape('js') }}</label>';
|
|
html += ' <div class="col-sm-10"><input type="text" name="address[' + address_row + '][company]" value="" placeholder="{{ entry_company|escape('js') }}" id="input-address-' + address_row + '-company" class="form-control"/></div>';
|
|
html += ' </div>';
|
|
|
|
html += ' <div class="row mb-3 required">';
|
|
html += ' <label for="input-address-' + address_row + '-address-1" class="col-sm-2 col-form-label">{{ entry_address_1|escape('js') }}</label>';
|
|
html += ' <div class="col-sm-10">';
|
|
html += ' <input type="text" name="address[' + address_row + '][address_1]" value="" placeholder="{{ entry_address_1|escape('js') }}" id="input-address-' + address_row + '-address-1" class="form-control"/>';
|
|
html += ' <div id="error-address-' + address_row + '-address-1" class="invalid-feedback"></div>';
|
|
html += ' </div>';
|
|
html += ' </div>';
|
|
|
|
html += ' <div class="row mb-3">';
|
|
html += ' <label for="input-address-' + address_row + '-address-2" class="col-sm-2 col-form-label">{{ entry_address_2|escape('js') }}</label>';
|
|
html += ' <div class="col-sm-10"><input type="text" name="address[' + address_row + '][address_2]" value="" placeholder="{{ entry_address_2|escape('js') }}" id="input-address-' + address_row + '-address-2" class="form-control"/></div>';
|
|
html += ' </div>';
|
|
|
|
html += ' <div class="row mb-3 required">';
|
|
html += ' <label for="input-address-' + address_row + '-city" class="col-sm-2 col-form-label">{{ entry_city|escape('js') }}</label>';
|
|
html += ' <div class="col-sm-10">';
|
|
html += ' <input type="text" name="address[' + address_row + '][city]" value="" placeholder="{{ entry_city|escape('js') }}" id="input-address-' + address_row + '-city" class="form-control"/>';
|
|
html += ' <div id="error-address-' + address_row + '-city" class="invalid-feedback"></div>';
|
|
html += ' </div>';
|
|
html += ' </div>';
|
|
|
|
html += ' <div class="row mb-3 required">';
|
|
html += ' <label for="input-address-' + address_row + '-postcode" class="col-sm-2 col-form-label">{{ entry_postcode|escape('js') }}</label>';
|
|
html += ' <div class="col-sm-10">';
|
|
html += ' <input type="text" name="address[' + address_row + '][postcode]" value="" placeholder="{{ entry_postcode|escape('js') }}" id="input-address-' + address_row + '-postcode" class="form-control"/>';
|
|
html += ' <div id="error-address-' + address_row + '-postcode" class="invalid-feedback"></div>';
|
|
html += ' </div>';
|
|
html += ' </div>';
|
|
|
|
html += ' <div class="row mb-3 required">';
|
|
html += ' <label for="input-address-' + address_row + '-country" class="col-sm-2 col-form-label">{{ entry_country|escape('js') }}</label>';
|
|
html += ' <div class="col-sm-10">';
|
|
html += ' <select name="address[' + address_row + '][country_id]" id="input-address-' + address_row + '-country" data-address-row="' + address_row + '" data-zone-id="0" class="form-select" disabled>';
|
|
html += ' <option value="0">{{ text_select|escape('js') }}</option>';
|
|
{% for country in countries %}
|
|
html += ' <option value="{{ country.country_id }}">{{ country.name|escape('js') }}</option>';
|
|
{% endfor %}
|
|
html += ' </select>';
|
|
html += ' <div id="error-address-' + address_row + '-country" class="invalid-feedback"></div>';
|
|
html += ' </div>';
|
|
html += ' </div>';
|
|
|
|
html += ' <div class="row mb-3 required">';
|
|
html += ' <label for="input-address-' + address_row + '-zone" class="col-sm-2 col-form-label">{{ entry_zone|escape('js') }}</label>';
|
|
html += ' <div class="col-sm-10">';
|
|
html += ' <select name="address[' + address_row + '][zone_id]" id="input-address-' + address_row + '-zone" class="form-select" disabled><option value="">{{ text_none|escape('js') }}</option></select>';
|
|
html += ' <div id="error-address-' + address_row + '-zone" class="invalid-feedback"></div>';
|
|
html += ' </div>';
|
|
html += ' </div>';
|
|
|
|
// Custom Fields
|
|
{% for custom_field in custom_fields %}
|
|
{% if custom_field.location == 'address' %}
|
|
{% if custom_field.type == 'select' %}
|
|
|
|
html += '<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">';
|
|
html += ' <label for="input-address-' + address_row + '-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name|escape('js') }}</label>';
|
|
html += ' <div class="col-sm-10">';
|
|
html += ' <select name="address[' + address_row + '][custom_field][{{ custom_field.custom_field_id }}]" id="input-address-' + address_row + '-custom-field-{{ custom_field.custom_field_id }}" class="form-select">';
|
|
html += ' <option value="">{{ text_select|escape('js') }}</option>';
|
|
|
|
{% for custom_field_value in custom_field.custom_field_value %}
|
|
html += ' <option value="{{ custom_field_value.custom_field_value_id }}">{{ custom_field_value.name|escape('js') }}</option>';
|
|
{% endfor %}
|
|
|
|
html += ' </select>';
|
|
html += ' <div id="error-address-' + address_row + '-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>';
|
|
html += ' </div>';
|
|
html += '</div>';
|
|
{% endif %}
|
|
|
|
{% if custom_field.type == 'radio' %}
|
|
html += '<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">';
|
|
html += ' <label class="col-sm-2 col-form-label">{{ custom_field.name|escape('js') }}</label>';
|
|
html += ' <div class="col-sm-10">';
|
|
html += ' <div id="input-address-' + address_row + '-custom-field-{{ custom_field.custom_field_id }}" class="form-control" style="height: 150px; overflow: auto;">';
|
|
|
|
{% for custom_field_value in custom_field.custom_field_value %}
|
|
html += ' <div class="form-check">';
|
|
html += ' <input type="radio" name="address[' + address_row + '][custom_field][{{ custom_field.custom_field_id }}]" value="{{ custom_field_value.custom_field_value_id }}" id="input-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-input"/>';
|
|
html += ' <label for="input-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-label">{{ custom_field_value.name|escape('js') }}</label>';
|
|
html += ' </div>';
|
|
{% endfor %}
|
|
|
|
html += ' </div>';
|
|
html += ' <div id="error-address-' + address_row + '-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>';
|
|
html += ' </div>';
|
|
html += '</div>';
|
|
{% endif %}
|
|
|
|
{% if custom_field.type == 'checkbox' %}
|
|
html += '<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">';
|
|
html += ' <label class="col-sm-2 col-form-label">{{ custom_field.name|escape('js') }}</label>';
|
|
html += ' <div class="col-sm-10">';
|
|
html += ' <div id="input-address-' + address_row + '-custom-field-{{ custom_field.custom_field_id }}" class="form-control" style="height: 150px; overflow: auto;">';
|
|
|
|
{% for custom_field_value in custom_field.custom_field_value %}
|
|
html += ' <div class="form-check">';
|
|
html += ' <input type="checkbox" name="address[{{ address_row }}][custom_field][{{ custom_field.custom_field_id }}][]" value="{{ custom_field_value.custom_field_value_id }}" id="input-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-input"/>';
|
|
html += ' <label for="input-custom-value-{{ custom_field_value.custom_field_value_id }}" class="form-check-label">{{ custom_field_value.name|escape('js') }}</label>';
|
|
html += ' </div>';
|
|
{% endfor %}
|
|
|
|
html += ' </div>';
|
|
html += ' <div id="error-address-' + address_row + '-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>';
|
|
html += ' </div>';
|
|
html += '</div>';
|
|
{% endif %}
|
|
|
|
{% if custom_field.type == 'text' %}
|
|
html += '<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">';
|
|
html += ' <label for="input-address-' + address_row + '-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name|escape('js') }}</label>';
|
|
html += ' <div class="col-sm-10">';
|
|
html += ' <input type="text" name="address[' + address_row + '][custom_field][{{ custom_field.custom_field_id }}]" value="{{ custom_field.value|escape('js') }}" placeholder="{{ custom_field.name|escape('js') }}" id="input-address-' + address_row + '-custom-field-{{ custom_field.custom_field_id }}" class="form-control"/>';
|
|
html += ' </div>';
|
|
html += ' <div id="error-address-' + address_row + '-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>';
|
|
html += '</div>';
|
|
{% endif %}
|
|
|
|
{% if custom_field.type == 'textarea' %}
|
|
html += '<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">';
|
|
html += ' <label for="input-address-' + address_row + '-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name|escape('js') }}</label>';
|
|
html += ' <div class="col-sm-10">';
|
|
html += ' <textarea name="address[' + address_row + '][custom_field][{{ custom_field.custom_field_id }}]" rows="5" placeholder="{{ custom_field.name|escape('js') }}" id="input-address-' + address_row + '-custom-field-{{ custom_field.custom_field_id }}" class="form-control">{{ custom_field.value|escape('js') }}</textarea>';
|
|
html += ' <div id="error-address-' + address_row + '-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>';
|
|
html += ' </div>';
|
|
html += '</div>';
|
|
{% endif %}
|
|
|
|
{% if custom_field.type == 'file' %}
|
|
html += '<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">';
|
|
html += ' <label class="col-sm-2 col-form-label">{{ custom_field.name|escape('js') }}</label>';
|
|
html += ' <div class="col-sm-10">';
|
|
html += ' <div class="input-group">';
|
|
html += ' <button type="button" data-oc-toggle="upload" data-oc-url="{{ upload }}" data-oc-target="#input-address-' + address_row + '-custom-field-{{ custom_field.custom_field_id }}" data-oc-size-max="{{ config_file_max_size }}" data-oc-size-error="{{ error_upload_size|escape('js') }}" class="btn btn-primary"><i class="fa-solid fa-upload"></i> {{ button_upload|escape('js') }}</button>';
|
|
html += ' <input type="text" name="address[' + address_row + '][custom_field][{{ custom_field.custom_field_id }}]" value="" id="input-address-' + address_row + '-custom-field-{{ custom_field.custom_field_id }}" class="form-control" readonly/>';
|
|
html += ' <button type="button" data-oc-toggle="download" data-oc-target="#input-address-' + address_row + '-custom-field-{{ custom_field.custom_field_id }}" class="btn btn-outline-secondary" disabled><i class="fa-solid fa-download"></i> {{ button_download|escape('js') }}</button>';
|
|
html += ' <button type="button" data-oc-toggle="clear" data-bs-toggle="tooltip" title="{{ button_clear|escape('js') }}" data-oc-target="#input-address-' + address_row + '-custom-field-{{ custom_field.custom_field_id }}" class="btn btn-outline-danger" disabled><i class="fa-solid fa-eraser"></i></button>';
|
|
html += ' </div>';
|
|
html += ' <div id="error-address-' + address_row + '-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>';
|
|
html += ' </div>';
|
|
html += '</div>';
|
|
{% endif %}
|
|
|
|
{% if custom_field.type == 'date' %}
|
|
html += '<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">';
|
|
html += ' <label for="input-address-' + address_row + '-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name|escape('js') }}</label>';
|
|
html += ' <div class="col-sm-10">';
|
|
html += ' <div class="input-group">';
|
|
html += ' <input type="text" name="address[' + address_row + '][custom_field][{{ custom_field.custom_field_id }}]" value="{{ custom_field.value|escape('js') }}" placeholder="{{ custom_field.name|escape('js') }}" id="input-address-' + address_row + '-custom-field-{{ custom_field.custom_field_id }}" class="form-control date"/><div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>';
|
|
html += ' </div>';
|
|
html += ' <div id="error-address-' + address_row + '-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>';
|
|
html += ' </div>';
|
|
html += '</div>';
|
|
{% endif %}
|
|
|
|
{% if custom_field.type == 'time' %}
|
|
html += '<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">';
|
|
html += ' <label for="input-address-' + address_row + '-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name|escape('js') }}</label>';
|
|
html += ' <div class="col-sm-10">';
|
|
html += ' <div class="input-group">';
|
|
html += ' <input type="text" name="address[' + address_row + '][custom_field][{{ custom_field.custom_field_id }}]" value="{{ custom_field.value|escape('js') }}" placeholder="{{ custom_field.name|escape('js') }}" id="input-address-' + address_row + '-custom-field-{{ custom_field.custom_field_id }}" class="form-control time"/><div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>';
|
|
html += ' </div>';
|
|
html += ' <div id="error-address-' + address_row + '-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>';
|
|
html += ' </div>';
|
|
html += '</div>';
|
|
{% endif %}
|
|
|
|
{% if custom_field.type == 'datetime' %}
|
|
html += '<div class="row mb-3 custom-field custom-field-{{ custom_field.custom_field_id }}">';
|
|
html += ' <label for="input-address-' + address_row + '-custom-field-{{ custom_field.custom_field_id }}" class="col-sm-2 col-form-label">{{ custom_field.name|escape('js') }}</label>';
|
|
html += ' <div class="col-sm-10">';
|
|
html += ' <div class="input-group">';
|
|
html += ' <input type="text" name="address[' + address_row + '][custom_field][{{ custom_field.custom_field_id }}]" value="{{ custom_field.value|escape('js') }}" placeholder="{{ custom_field.name|escape('js') }}" id="input-address-' + address_row + '-custom-field-{{ custom_field.custom_field_id }}" class="form-control datetime"/><div class="input-group-text"><i class="fa-regular fa-calendar"></i></div>';
|
|
html += ' </div>';
|
|
html += ' <div id="error-address-' + address_row + '-custom-field-{{ custom_field.custom_field_id }}" class="invalid-feedback"></div>';
|
|
html += ' </div>';
|
|
html += '</div>';
|
|
{% endif %}
|
|
|
|
{% endif %}
|
|
{% endfor %}
|
|
|
|
html += '<div class="row mb-3">';
|
|
html += ' <label for="input-address-' + address_row + '-default" class="col-sm-2 col-form-label">{{ entry_default|escape('js') }}</label>';
|
|
html += ' <div class="col-sm-10">';
|
|
html += ' <div class="form-check"><input type="radio" name="address[' + address_row + '][default]" value="1" id="input-address-' + address_row + '-default" class="form-check-label"/></div>';
|
|
html += ' </div>';
|
|
html += '</div>';
|
|
|
|
html += '</fieldset>';
|
|
|
|
$(this).parent().before(html);
|
|
|
|
$('#input-customer-group').trigger('change');
|
|
|
|
$('select[name=\'address[' + address_row + '][country_id]\']').trigger('change');
|
|
|
|
address_row++;
|
|
});
|
|
|
|
var zone = [];
|
|
|
|
$('#tab-address').on('change', 'select[name$=\'[country_id]\']', function () {
|
|
var element = this;
|
|
|
|
$(element).prop('disabled', true);
|
|
|
|
$('select[name=\'address[' + $(element).attr('data-address-row') + '][zone_id]\']').prop('disabled', false);
|
|
|
|
if (!zone[$(element).val()]) {
|
|
$.ajax({
|
|
url: 'index.php?route=localisation/country.country&user_token={{ user_token }}&country_id=' + $(element).val(),
|
|
dataType: 'json',
|
|
beforeSend: function () {
|
|
$(element).prop('disabled', true);
|
|
},
|
|
complete: function () {
|
|
$(element).prop('disabled', false);
|
|
},
|
|
success: function (json) {
|
|
zone[$(element).val()] = json;
|
|
|
|
if (json['postcode_required'] == '1') {
|
|
$('#input-address-' + $(element).attr('data-address-row') + '-postcode').parent().parent().addClass('required');
|
|
} else {
|
|
$('#input-address-' + $(element).attr('data-address-row') + '-postcode').parent().parent().removeClass('required');
|
|
}
|
|
|
|
html = '<option value="">{{ text_select|escape('js') }}</option>';
|
|
|
|
if (json['zone'] && json['zone'] != '') {
|
|
for (i = 0; i < json['zone'].length; i++) {
|
|
html += '<option value="' + json['zone'][i]['zone_id'] + '"';
|
|
|
|
if (json['zone'][i]['zone_id'] == $(element).attr('data-zone-id')) {
|
|
html += ' selected';
|
|
}
|
|
|
|
html += '>' + json['zone'][i]['name'] + '</option>';
|
|
}
|
|
} else {
|
|
html += '<option value="0" selected>{{ text_none|escape('js') }}</option>';
|
|
}
|
|
|
|
$('#tab-address select[name=\'address[' + $(element).attr('data-address-row') + '][zone_id]\']').html(html);
|
|
|
|
$('#tab-address select[name=\'address[' + $(element).attr('data-address-row') + '][zone_id]\']').prop('disabled', false);
|
|
|
|
$(element).prop('disabled', false);
|
|
|
|
$('#tab-address select[name$=\'[country_id]\']:disabled:first').trigger('change');
|
|
},
|
|
error: function (xhr, ajaxOptions, thrownError) {
|
|
console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
|
|
}
|
|
});
|
|
} else {
|
|
html = '<option value="">{{ text_select|escape('js') }}</option>';
|
|
|
|
if (zone[$(element).val()]['zone'] && zone[$(element).val()]['zone'] != '') {
|
|
for (i = 0; i < zone[$(element).val()]['zone'].length; i++) {
|
|
html += '<option value="' + zone[$(element).val()]['zone'][i]['zone_id'] + '"';
|
|
|
|
if (zone[$(element).val()]['zone'][i]['zone_id'] == $(element).attr('data-zone-id')) {
|
|
html += ' selected';
|
|
}
|
|
|
|
html += '>' + zone[$(element).val()]['zone'][i]['name'] + '</option>';
|
|
}
|
|
} else {
|
|
html += '<option value="0">{{ text_none|escape('js') }}</option>';
|
|
}
|
|
|
|
$('#tab-address select[name=\'address[' + $(element).attr('data-address-row') + '][zone_id]\']').html(html);
|
|
|
|
$('#tab-address select[name=\'address[' + $(element).attr('data-address-row') + '][zone_id]\']').prop('disabled', false);
|
|
|
|
$(element).prop('disabled', false);
|
|
|
|
$('#tab-address select[name$=\'[country_id]\']:disabled:first').trigger('change');
|
|
}
|
|
});
|
|
|
|
$('#tab-address select[name$=\'[country_id]\']:first').trigger('change');
|
|
|
|
$('#payment-method').on('click', '.pagination a', function (e) {
|
|
e.preventDefault();
|
|
|
|
$('#payment-method').load(this.href);
|
|
});
|
|
|
|
$('#payment-method').on('click', 'button', function (e) {
|
|
e.preventDefault();
|
|
|
|
var element = this;
|
|
|
|
$.ajax({
|
|
url: $(element).val(),
|
|
dataType: 'json',
|
|
contentType: 'application/x-www-form-urlencoded',
|
|
beforeSend: function () {
|
|
$(element).button('loading');
|
|
},
|
|
complete: function () {
|
|
$(element).button('reset');
|
|
},
|
|
success: function (json) {
|
|
$('.alert-dismissible').remove();
|
|
|
|
if (json['error']) {
|
|
$('#alert').prepend('<div class="alert alert-danger alert-dismissible"><i class="fa-solid fa-circle-exclamation"></i> ' + json['error'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
|
}
|
|
|
|
if (json['success']) {
|
|
$('#alert').prepend('<div class="alert alert-success alert-dismissible"><i class="fa-solid fa-check-circle"></i> ' + json['success'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
|
|
|
$('#payment-method').load('index.php?route=customer/customer.getPayment&user_token={{ user_token }}&customer_id=' + $('#input-customer-id').val());
|
|
}
|
|
},
|
|
error: function (xhr, ajaxOptions, thrownError) {
|
|
console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
|
|
}
|
|
});
|
|
});
|
|
|
|
$('#payment-method').on('change', 'input[name=\'status\']', function (e) {
|
|
e.preventDefault();
|
|
|
|
var element = this;
|
|
|
|
$.ajax({
|
|
url: 'index.php?route=customer/customer.disablePayment&user_token={{ user_token }}&customer_id=' + $('#input-customer-id').val(),
|
|
dataType: 'json',
|
|
contentType: 'application/x-www-form-urlencoded',
|
|
beforeSend: function () {
|
|
$(element).prop('disabled', true);
|
|
},
|
|
complete: function () {
|
|
$(element).prop('disabled', false);
|
|
},
|
|
success: function (json) {
|
|
$('.alert-dismissible').remove();
|
|
|
|
if (json['error']) {
|
|
$('#alert').prepend('<div class="alert alert-danger alert-dismissible"><i class="fa-solid fa-circle-exclamation"></i> ' + json['error'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
|
}
|
|
|
|
if (json['success']) {
|
|
$('#alert').prepend('<div class="alert alert-success alert-dismissible"><i class="fa-solid fa-check-circle"></i> ' + json['success'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
|
|
|
$('#payment-method').load('index.php?route=customer/customer.getPayment&user_token={{ user_token }}&customer_id=' + $('#input-customer-id').val());
|
|
}
|
|
},
|
|
error: function (xhr, ajaxOptions, thrownError) {
|
|
console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
|
|
}
|
|
});
|
|
});
|
|
|
|
$('#history').on('click', '.pagination a', function (e) {
|
|
e.preventDefault();
|
|
|
|
$('#history').load(this.href);
|
|
});
|
|
|
|
$('#button-history').on('click', function (e) {
|
|
e.preventDefault();
|
|
|
|
$.ajax({
|
|
url: 'index.php?route=customer/customer.addHistory&user_token={{ user_token }}&customer_id=' + $('#input-customer-id').val(),
|
|
type: 'post',
|
|
data: 'comment=' + encodeURIComponent($('#input-history').val()),
|
|
dataType: 'json',
|
|
contentType: 'application/x-www-form-urlencoded',
|
|
beforeSend: function () {
|
|
$('#button-history').button('loading');
|
|
},
|
|
complete: function () {
|
|
$('#button-history').button('reset');
|
|
},
|
|
success: function (json) {
|
|
$('.alert-dismissible').remove();
|
|
|
|
if (json['error']) {
|
|
$('#alert').prepend('<div class="alert alert-danger alert-dismissible"><i class="fa-solid fa-circle-exclamation"></i> ' + json['error'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
|
}
|
|
|
|
if (json['success']) {
|
|
$('#alert').prepend('<div class="alert alert-success alert-dismissible"><i class="fa-solid fa-check-circle"></i> ' + json['success'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
|
|
|
$('#history').load('index.php?route=customer/customer.history&user_token={{ user_token }}&customer_id=' + $('#input-customer-id').val());
|
|
|
|
$('#input-history').val('');
|
|
}
|
|
},
|
|
error: function (xhr, ajaxOptions, thrownError) {
|
|
console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
|
|
}
|
|
});
|
|
});
|
|
|
|
$('#transaction').on('click', '.pagination a', function (e) {
|
|
e.preventDefault();
|
|
|
|
$('#transaction').load(this.href);
|
|
});
|
|
|
|
$('#button-transaction').on('click', function (e) {
|
|
e.preventDefault();
|
|
|
|
$.ajax({
|
|
url: 'index.php?route=customer/customer.addTransaction&user_token={{ user_token }}&customer_id=' + $('#input-customer-id').val(),
|
|
type: 'post',
|
|
data: 'description=' + encodeURIComponent($('#input-transaction').val()) + '&amount=' + $('#input-amount').val(),
|
|
dataType: 'json',
|
|
contentType: 'application/x-www-form-urlencoded',
|
|
beforeSend: function () {
|
|
$('#button-transaction').button('loading');
|
|
},
|
|
complete: function () {
|
|
$('#button-transaction').button('reset');
|
|
},
|
|
success: function (json) {
|
|
$('.alert-dismissible').remove();
|
|
|
|
if (json['error']) {
|
|
$('#alert').prepend('<div class="alert alert-danger alert-dismissible"><i class="fa-solid fa-circle-exclamation"></i> ' + json['error'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
|
}
|
|
|
|
if (json['success']) {
|
|
$('#alert').prepend('<div class="alert alert-success alert-dismissible"><i class="fa-solid fa-check-circle"></i> ' + json['success'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
|
|
|
$('#transaction').load('index.php?route=customer/customer.transaction&user_token={{ user_token }}&customer_id=' + $('#input-customer-id').val());
|
|
|
|
$('#input-transaction').val('');
|
|
$('#input-amount').val('');
|
|
}
|
|
},
|
|
error: function (xhr, ajaxOptions, thrownError) {
|
|
console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
|
|
}
|
|
});
|
|
});
|
|
|
|
$('#reward').on('click', '.pagination a', function (e) {
|
|
e.preventDefault();
|
|
|
|
$('#reward').load(this.href);
|
|
});
|
|
|
|
$('#button-reward').on('click', function (e) {
|
|
e.preventDefault();
|
|
|
|
$.ajax({
|
|
url: 'index.php?route=customer/customer.addReward&user_token={{ user_token }}&customer_id=' + $('#input-customer-id').val(),
|
|
type: 'post',
|
|
data: 'description=' + encodeURIComponent($('#input-reward').val()) + '&points=' + $('#input-points').val(),
|
|
dataType: 'json',
|
|
contentType: 'application/x-www-form-urlencoded',
|
|
beforeSend: function () {
|
|
$('#button-reward').button('loading');
|
|
},
|
|
complete: function () {
|
|
$('#button-reward').button('reset');
|
|
},
|
|
success: function (json) {
|
|
$('.alert-dismissible').remove();
|
|
|
|
if (json['error']) {
|
|
$('#alert').prepend('<div class="alert alert-danger alert-dismissible"><i class="fa-solid fa-circle-exclamation"></i> ' + json['error'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
|
}
|
|
|
|
if (json['success']) {
|
|
$('#alert').prepend('<div class="alert alert-success alert-dismissible"><i class="fa-solid fa-check-circle"></i> ' + json['success'] + ' <button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>');
|
|
|
|
$('#reward').load('index.php?route=customer/customer.reward&user_token={{ user_token }}&customer_id=' + $('#input-customer-id').val());
|
|
|
|
$('#input-reward').val('');
|
|
$('#input-points').val('');
|
|
}
|
|
},
|
|
error: function (xhr, ajaxOptions, thrownError) {
|
|
console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
|
|
}
|
|
});
|
|
});
|
|
|
|
$('#ip').on('click', '.pagination a', function (e) {
|
|
e.preventDefault();
|
|
|
|
$('#ip').load(this.href);
|
|
});
|
|
//--></script>
|
|
{{ footer }}
|