mirror of
https://github.com/opensourcepos/opensourcepos.git
synced 2025-12-24 01:57:51 -05:00
Bootstrap 5 WIP
- work in progress build of conversion from bootstrap 3 to 5
This commit is contained in:
@@ -1,6 +1,10 @@
|
||||
<p align="center"><img src="https://raw.githubusercontent.com/opensourcepos/opensourcepos/master/branding/emblem.svg" alt="Open Source Point of Sale Logo" width="auto" height="200"></p>
|
||||
<h3 align="center">Open Source Point of Sale</h3>
|
||||
|
||||
## ☢️ Bootstrap 5 conversion WIP
|
||||
|
||||
This is a heavily under construction build converting OSPOS from Bootstrap 3 to Bootstrap 5. Please do not use!
|
||||
|
||||
<p align="center">
|
||||
<a href="#-introduction">Introduction</a> · <a href="#-live-demo">Demo</a> · <a href="#-installation">Installation</a> ·
|
||||
<a href="#-contributing">Contributing</a> · <a href="#-reporting-bugs">Bugs</a> · <a href="#-faq">FAQ</a> ·
|
||||
|
||||
@@ -80,7 +80,7 @@ class Config extends Secure_Controller
|
||||
$npmDev = false;
|
||||
$license = [];
|
||||
|
||||
$license[$i]['title'] = 'Open Source Point Of Sale ' . config('App')->application_version;
|
||||
$license[$i]['title'] = 'Open Source Point of Sale ' . config('App')->application_version;
|
||||
|
||||
if (file_exists('license/LICENSE')) {
|
||||
$license[$i]['text'] = file_get_contents('license/LICENSE', false, null, 0, 3000);
|
||||
@@ -363,8 +363,6 @@ class Config extends Secure_Controller
|
||||
public function postSaveGeneral(): void
|
||||
{
|
||||
$batch_save_data = [
|
||||
'theme' => $this->request->getPost('theme'),
|
||||
'login_form' => $this->request->getPost('login_form'),
|
||||
'default_sales_discount_type' => $this->request->getPost('default_sales_discount_type') != null,
|
||||
'default_sales_discount' => parse_decimals($this->request->getPost('default_sales_discount')),
|
||||
'default_receivings_discount_type' => $this->request->getPost('default_receivings_discount_type') != null,
|
||||
@@ -372,8 +370,6 @@ class Config extends Secure_Controller
|
||||
'enforce_privacy' => $this->request->getPost('enforce_privacy') != null,
|
||||
'receiving_calculate_average_price' => $this->request->getPost('receiving_calculate_average_price') != null,
|
||||
'lines_per_page' => $this->request->getPost('lines_per_page', FILTER_SANITIZE_NUMBER_INT),
|
||||
'notify_horizontal_position' => $this->request->getPost('notify_horizontal_position'),
|
||||
'notify_vertical_position' => $this->request->getPost('notify_vertical_position'),
|
||||
'image_max_width' => $this->request->getPost('image_max_width', FILTER_SANITIZE_NUMBER_INT),
|
||||
'image_max_height' => $this->request->getPost('image_max_height', FILTER_SANITIZE_NUMBER_INT),
|
||||
'image_max_size' => $this->request->getPost('image_max_size', FILTER_SANITIZE_NUMBER_INT),
|
||||
@@ -410,6 +406,26 @@ class Config extends Secure_Controller
|
||||
echo json_encode(['success' => $success, 'message' => lang('Config.saved_' . ($success ? '' : 'un') . 'successfully')]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves Appearance configuration. Used in app/Views/configs/appearance_config.php
|
||||
*/
|
||||
public function postSaveAppearance(): void
|
||||
{
|
||||
$batch_save_data = [
|
||||
'theme' => $this->request->getPost('theme'),
|
||||
'login_form' => $this->request->getPost('login_form'),
|
||||
'notify_horizontal_position' => $this->request->getPost('notify_horizontal_position'),
|
||||
'notify_vertical_position' => $this->request->getPost('notify_vertical_position'),
|
||||
'color_mode' => $this->request->getPost('color_mode'),
|
||||
'config_menu_position' => $this->request->getPost('config_menu_position'),
|
||||
'responsive_design' => $this->request->getPost('responsive_design') != null
|
||||
];
|
||||
|
||||
$success = $this->appconfig->batch_save($batch_save_data);
|
||||
|
||||
echo json_encode(['success' => $success, 'message' => lang('Config.saved_' . ($success ? '' : 'un') . 'successfully')]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks a number against the currently selected locale. Used in app/Views/configs/locale_config.php
|
||||
*
|
||||
@@ -462,6 +478,7 @@ class Config extends Secure_Controller
|
||||
'currency_code' => $this->request->getPost('currency_code'),
|
||||
'language_code' => $exploded[0],
|
||||
'language' => $exploded[1],
|
||||
'rtl_language' => $this->request->getPost('rtl_language') != null,
|
||||
'timezone' => $this->request->getPost('timezone'),
|
||||
'dateformat' => $this->request->getPost('dateformat'),
|
||||
'timeformat' => $this->request->getPost('timeformat'),
|
||||
|
||||
@@ -79,10 +79,14 @@ INSERT INTO `ospos_app_config` (`key`, `value`) VALUES
|
||||
('smtp_timeout', '5'),
|
||||
('smtp_crypto', 'ssl'),
|
||||
('receipt_template', 'receipt_default'),
|
||||
('theme', 'flatly'),
|
||||
('theme', 'bootstrap'),
|
||||
('statistics', '1'),
|
||||
('language', 'english'),
|
||||
('language_code', 'en');
|
||||
('language_code', 'en'),
|
||||
('rtl_language', '0'),
|
||||
('color_mode', 'light'),
|
||||
('config_menu_position', 'start'),
|
||||
('responsive_design', '1');
|
||||
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
@@ -8,6 +8,11 @@
|
||||
|
||||
<?= view('partial/header') ?>
|
||||
|
||||
<?php
|
||||
$title_info['config_title'] = 'Attributes';
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() {
|
||||
<?= view('partial/bootstrap_tables_locale') ?>
|
||||
@@ -21,16 +26,16 @@
|
||||
});
|
||||
</script>
|
||||
|
||||
<div id="title_bar" class="btn-toolbar print_hide">
|
||||
<button class="btn btn-info btn-sm pull-right modal-dlg" data-btn-submit="<?= lang('Common.submit') ?>" data-href="<?= esc("$controller_name/view") ?>" title="<?= lang(ucfirst($controller_name) . ".new") ?>">
|
||||
<i class="bi bi-star icon-spacing"></i><?= lang(ucfirst($controller_name) . ".new") ?>
|
||||
<div class="d-flex gap-2 justify-content-end d-print-none">
|
||||
<button type="button" class="btn btn-primary" data-btn-submit="<?= lang('Common.submit') ?>" data-href="<?= esc('$controller_name/view') ?>" title="<?= lang(ucfirst($controller_name). '.new') ?>">
|
||||
<i class="bi bi-star me-2"></i><?= lang(ucfirst($controller_name). '.new') ?>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div id="toolbar">
|
||||
<div class="pull-left form-inline" role="toolbar">
|
||||
<button id="delete" class="btn btn-default btn-sm print_hide">
|
||||
<i class="bi bi-trash icon-spacing"></i><?= lang('Common.delete') ?>
|
||||
<div class="d-flex gap-2">
|
||||
<button type="button" class="btn btn-secondary d-print-none">
|
||||
<i class="bi bi-trash"></i><span class="d-none d-sm-inline ms-2"><?= lang('Common.delete') ?></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -9,6 +9,11 @@
|
||||
|
||||
<?= view('partial/header') ?>
|
||||
|
||||
<?php
|
||||
$title_info['config_title'] = 'Cashups';
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() {
|
||||
// When any filter is clicked and the dropdown window is closed
|
||||
@@ -43,29 +48,26 @@
|
||||
|
||||
<?= view('partial/print_receipt', ['print_after_sale' => false, 'selected_printer' => 'takings_printer']) ?>
|
||||
|
||||
<div id="title_bar" class="print_hide btn-toolbar">
|
||||
<button onclick="javascript:printdoc()" class="btn btn-info btn-sm pull-right">
|
||||
<i class="bi bi-printer icon-spacing"></i><?= lang('Common.print') ?>
|
||||
<div class="d-flex gap-2 justify-content-end d-print-none">
|
||||
<button type="button" class="btn btn-primary" data-btn-submit="<?= lang('Common.submit') ?>" data-href="<?= '$controller_name/view' ?>" title="<?= lang(esc(ucfirst($controller_name)) . '.new') //TODO: String Interpolation ?>">
|
||||
<i class="bi bi-journal-check me-2"></i><?= lang(esc(ucfirst($controller_name)) . '.new') //TODO: String Interpolation ?>
|
||||
</button>
|
||||
<button class="btn btn-info btn-sm pull-right modal-dlg" data-btn-submit="<?= lang('Common.submit') ?>" data-href="<?= "$controller_name/view" ?>" title="<?= lang(ucfirst($controller_name) . ".new") ?>">
|
||||
<i class="bi bi-journal-check icon-spacing"></i><?= lang(esc(ucfirst($controller_name)) . '.new') // TODO: String Interpolation ?>
|
||||
<button type="button" class="btn btn-primary" onclick="window.print()" title="<?= lang('Common.print') ?>">
|
||||
<i class="bi bi-printer me-2"></i><?= lang('Common.print') ?>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div id="toolbar">
|
||||
<div class="pull-left form-inline" role="toolbar">
|
||||
<button id="delete" class="btn btn-default btn-sm print_hide">
|
||||
<i class="bi bi-trash icon-spacing"></i><?= lang('Common.delete') ?>
|
||||
<div class="d-flex gap-2">
|
||||
<button type="button" class="btn btn-secondary d-print-none">
|
||||
<i class="bi bi-trash"></i><span class="d-none d-sm-inline ms-2"><?= lang('Common.delete') ?></span>
|
||||
</button>
|
||||
<?= form_input(['name' => 'daterangepicker', 'class' => 'form-control input-sm', 'id' => 'daterangepicker']) ?>
|
||||
<?= form_multiselect('filters[]', $filters, [''], [
|
||||
'id' => 'filters',
|
||||
'data-none-selected-text' => lang('Common.none_selected_text'),
|
||||
'class' => 'selectpicker show-menu-arrow',
|
||||
'data-selected-text-format' => 'count > 1',
|
||||
'data-style' => 'btn-default btn-sm',
|
||||
'data-width' => 'fit'
|
||||
]) ?>
|
||||
<input type="text" class="form-control" name="daterangepicker" id="daterangepicker">
|
||||
<select id="filters" name="filters[]" class="selectpicker show-menu-arrow" data-none-selected-text="<?= lang('Common.none_selected_text') ?>" data-selected-text-format="count > 1" data-style="btn-secondary" data-width="fit" multiple>
|
||||
<?php foreach ($filters as $key => $value): ?>
|
||||
<option value="<?= esc($key) ?>"><?= esc($value) ?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
124
app/Views/configs/appearance_config.php
Normal file
124
app/Views/configs/appearance_config.php
Normal file
@@ -0,0 +1,124 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
*/
|
||||
|
||||
$beta = '<sup><span class="badge bg-secondary">BETA</span></sup>';
|
||||
?>
|
||||
|
||||
<?= form_open('config/saveAppearance/', ['id' => 'appearance_config_form']) ?>
|
||||
|
||||
<?php
|
||||
$title_info['config_title'] = 'Appearance';
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<ul id="appearance_error_message_box" class="error_message_box"></ul>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="theme-change" class="form-label"><?= lang('Config.theme'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<label class="input-group-text"><i class="bi bi-binoculars"></i></label>
|
||||
<select class="form-select" name="theme" id="theme-change">
|
||||
<?php foreach ($themes as $value => $display): ?>
|
||||
<option value="<?= $value ?>" <?= $config['theme'] == $value ? 'selected' : '' ?>><?= $display ?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="login_form" class="form-label"><?= lang('Config.login_form'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<label class="input-group-text"><i class="bi bi-view-stacked"></i></label>
|
||||
<select class="form-select" name="login_form">
|
||||
<option value="floating_labels" <?= $config['login_form'] == 'floating_labels' ? 'selected' : '' ?>><?= lang('Config.floating_labels') ?></option>
|
||||
<option value="input_groups" <?= $config['login_form'] == 'input_groups' ? 'selected' : '' ?>><?= lang('Config.input_groups') ?></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="color_mode" class="form-label">Color Mode <?= $beta; ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text" id="color-mode-icon"><i class="bi bi-palette"></i></span>
|
||||
<select class="form-select" id="color_mode" name="color_mode" aria-describedby="color-mode-icon">
|
||||
<option value="light" <?= $config['color_mode'] == 'light' ? 'selected' : '' ?>>Light</option>
|
||||
<option value="dark" <?= $config['color_mode'] == 'dark' ? 'selected' : '' ?>>Dark</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="notify_position" class="form-label"><?= lang('Config.notify_alignment'); ?></label>
|
||||
<div class="row" id="notify_position">
|
||||
<div class="col-6 mb-3">
|
||||
<div class="input-group">
|
||||
<label class="input-group-text"><i class="bi bi-arrow-down-up"></i></label>
|
||||
<select class="form-select" name="notify_vertical_position">
|
||||
<option value="top" <?= $config['notify_vertical_position'] == 'top' ? 'selected' : '' ?>><?= lang('Config.top') ?></option>
|
||||
<option value="bottom" <?= $config['notify_vertical_position'] == 'bottom' ? 'selected' : '' ?>><?= lang('Config.bottom') ?></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 mb-3">
|
||||
<div class="input-group">
|
||||
<label class="input-group-text"><i class="bi bi-arrow-left-right"></i></label>
|
||||
<select class="form-select" name="notify_horizontal_position">
|
||||
<option value="left" <?= $config['notify_horizontal_position'] == 'left' ? 'selected' : '' ?>><?= lang('Config.left') ?></option>
|
||||
<option value="center" <?= $config['notify_horizontal_position'] == 'center' ? 'selected' : '' ?>><?= lang('Config.center') ?></option>
|
||||
<option value="right" <?= $config['notify_horizontal_position'] == 'right' ? 'selected' : '' ?>><?= lang('Config.right') ?></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="config_menu_position" class="form-label">Configuration Menu Position</label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text" id="config-menu-position-icon"><i class="bi bi-distribute-horizontal"></i></span>
|
||||
<select class="form-select" id="config_menu_position" name="config_menu_position" aria-describedby="config-menu-position-icon">
|
||||
<option value="start" <?= $config['config_menu_position'] == 'start' ? 'selected' : '' ?>>Start</option>
|
||||
<option value="end" <?= $config['config_menu_position'] == 'end' ? 'selected' : '' ?>>End</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-check form-switch mb-3">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="responsive_design" name="responsive_design" value="responsive_design" <?= $config['responsive_design'] == 1 ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="responsive_design">Responsive Design <?= $beta; ?></label>
|
||||
</div>
|
||||
|
||||
<div class="d-flex justify-content-end">
|
||||
<button class="btn btn-primary" name="submit_appearance"><?= lang('Common.submit'); ?></button>
|
||||
</div>
|
||||
|
||||
<?= form_close() ?>
|
||||
|
||||
<script type="application/javascript">
|
||||
// Validation and submit handling
|
||||
$(document).ready(function() {
|
||||
$('#appearance_config_form').validate($.extend(form_support.handler, {
|
||||
submitHandler: function(form) {
|
||||
$(form).ajaxSubmit({
|
||||
success: function(response) {
|
||||
$.notify({
|
||||
icon: 'bi bi-bell-fill',
|
||||
message: response.message + ' <em>Click to refresh.</em>',
|
||||
url: 'javascript:window.location.reload();',
|
||||
target: '_self'
|
||||
}, {
|
||||
type: response.success ? 'success' : 'danger'
|
||||
})
|
||||
},
|
||||
dataType: 'json'
|
||||
});
|
||||
},
|
||||
|
||||
errorLabelContainer: '#appearance_error_message_box'
|
||||
}));
|
||||
});
|
||||
</script>
|
||||
@@ -6,251 +6,194 @@
|
||||
*/
|
||||
?>
|
||||
|
||||
<?= form_open('config/saveBarcode/', ['id' => 'barcode_config_form', 'class' => 'form-horizontal']) ?>
|
||||
<div id="config_wrapper">
|
||||
<fieldset id="config_info">
|
||||
<?= form_open('config/saveBarcode/', ['id' => 'barcode_config_form']) ?>
|
||||
|
||||
<div id="required_fields_message"><?= lang('Common.fields_required_message') ?></div>
|
||||
<ul id="barcode_error_message_box" class="error_message_box"></ul>
|
||||
<?php
|
||||
$title_info['config_title'] = lang('Config.barcode_configuration');
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.barcode_type'), 'barcode_type', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_dropdown(
|
||||
'barcode_type',
|
||||
$support_barcode,
|
||||
$config['barcode_type'],
|
||||
'class="form-control input-sm"'
|
||||
) ?>
|
||||
</div>
|
||||
<ul id="barcode_error_message_box" class="error_message_box"></ul>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="barcode_type" class="form-label"><?= lang('Config.barcode_type'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-braces"></i></span>
|
||||
<select class="form-select" name="barcode_type" id="barcode_type">
|
||||
<?php foreach ($support_barcode as $key => $value): ?>
|
||||
<option value="<?= $key ?>" <?= $config['barcode_type'] == $key ? 'selected' : '' ?>><?= $value ?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.barcode_width'), 'barcode_width', ['class' => 'control-label col-xs-2 required']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_input([
|
||||
'step' => '5',
|
||||
'max' => '350',
|
||||
'min' => '60',
|
||||
'type' => 'number',
|
||||
'name' => 'barcode_width',
|
||||
'id' => 'barcode_width',
|
||||
'class' => 'form-control input-sm required',
|
||||
'value' => $config['barcode_width']
|
||||
]) ?>
|
||||
</div>
|
||||
<div class="col-6 col-lg-3">
|
||||
<label for="barcode_width" class="form-label"><?= lang('Config.barcode_width'); ?><sup><span class="badge text-primary"><i class="bi bi-asterisk"></i></span></sup></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-arrows"></i></span>
|
||||
<input type="number" class="form-control" step="5" max="350" min="60" name="barcode_width" id="barcode_width" value="<?= $config['barcode_width'] ?>" required>
|
||||
<span class="input-group-text">px</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.barcode_height'), 'barcode_height', ['class' => 'control-label col-xs-2 required']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_input([
|
||||
'type' => 'number',
|
||||
'min' => 10,
|
||||
'max' => 120,
|
||||
'name' => 'barcode_height',
|
||||
'id' => 'barcode_height',
|
||||
'class' => 'form-control input-sm required',
|
||||
'value' => $config['barcode_height']
|
||||
]) ?>
|
||||
</div>
|
||||
<div class="col-6 col-lg-3">
|
||||
<label for="barcode_height" class="form-label"><?= lang('Config.barcode_height'); ?><sup><span class="badge text-primary"><i class="bi bi-asterisk"></i></span></sup></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-arrows-vertical"></i></span>
|
||||
<input type="number" class="form-control" min="10" max="120" name="barcode_height" id="barcode_height" value="<?= $config['barcode_height'] ?>" required>
|
||||
<span class="input-group-text">px</span>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.barcode_font'), 'barcode_font', ['class' => 'control-label col-xs-2 required']) ?>
|
||||
<div class="col-sm-2">
|
||||
<?= form_dropdown(
|
||||
'barcode_font',
|
||||
$barcode_fonts,
|
||||
$config['barcode_font'],
|
||||
'class="form-control input-sm" required'
|
||||
) ?>
|
||||
</div>
|
||||
<div class="col-sm-2">
|
||||
<?= form_input([
|
||||
'type' => 'number',
|
||||
'min' => '1',
|
||||
'max' => '30',
|
||||
'name' => 'barcode_font_size',
|
||||
'id' => 'barcode_font_size',
|
||||
'class' => 'form-control input-sm required',
|
||||
'value' => $config['barcode_font_size']
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.allow_duplicate_barcodes'), 'allow_duplicate_barcodes', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-1">
|
||||
<?= form_checkbox([
|
||||
'name' => 'allow_duplicate_barcodes',
|
||||
'id' => 'allow_duplicate_barcodes',
|
||||
'value' => 'allow_duplicate_barcodes',
|
||||
'checked' => $config['allow_duplicate_barcodes'] == 1
|
||||
]) ?>
|
||||
|
||||
<label class="control-label">
|
||||
<span class="bi bi-exclamation-triangle" data-toggle="tooltip" data-placement="right" title="<?= lang('Config.barcode_tooltip') ?>"></span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.barcode_content'), 'barcode_content', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-8">
|
||||
<label class="radio-inline">
|
||||
<?= form_radio([
|
||||
'name' => 'barcode_content',
|
||||
'value' => 'id',
|
||||
'checked' => $config['barcode_content'] == 'id'
|
||||
]) ?>
|
||||
<?= lang('Config.barcode_id') ?>
|
||||
</label>
|
||||
<label class="radio-inline">
|
||||
<?= form_radio([
|
||||
'name' => 'barcode_content',
|
||||
'value' => 'number',
|
||||
'checked' => $config['barcode_content'] == 'number'
|
||||
]) ?>
|
||||
<?= lang('Config.barcode_number') ?>
|
||||
</label>
|
||||
|
||||
|
||||
<label class="checkbox-inline">
|
||||
<?= form_checkbox([
|
||||
'name' => 'barcode_generate_if_empty',
|
||||
'value' => 'barcode_generate_if_empty',
|
||||
'checked' => $config['barcode_generate_if_empty'] == 1
|
||||
]) ?>
|
||||
<?= lang('Config.barcode_generate_if_empty') ?>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.barcode_formats'), 'barcode_formats', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-4">
|
||||
<?php
|
||||
$barcode_formats = json_decode(config('OSPOS')->settings['barcode_formats']);
|
||||
echo form_dropdown([
|
||||
'name' => 'barcode_formats[]',
|
||||
'id' => 'barcode_formats',
|
||||
'options' => !empty($barcode_formats) ? array_combine($barcode_formats, $barcode_formats) : [],
|
||||
'multiple' => 'multiple',
|
||||
'data-role' => 'tagsinput'
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.barcode_layout'), 'barcode_layout', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-sm-10">
|
||||
<div class="form-group form-group-sm row">
|
||||
<label class="control-label col-sm-1"><?= lang('Config.barcode_first_row') . ' ' ?></label>
|
||||
<div class="col-sm-2">
|
||||
<?= form_dropdown(
|
||||
'barcode_first_row',
|
||||
[
|
||||
'not_show' => lang('Config.none'),
|
||||
'name' => lang('Items.name'),
|
||||
'category' => lang('Items.category'),
|
||||
'cost_price' => lang('Items.cost_price'),
|
||||
'unit_price' => lang('Items.unit_price'),
|
||||
'company_name' => lang('Suppliers.company_name')
|
||||
],
|
||||
$config['barcode_first_row'],
|
||||
['class' => 'form-control input-sm']
|
||||
); ?>
|
||||
</div>
|
||||
<label class="control-label col-sm-1"><?= lang('Config.barcode_second_row') . ' ' ?></label>
|
||||
<div class="col-sm-2">
|
||||
<?= form_dropdown(
|
||||
'barcode_second_row',
|
||||
[
|
||||
'not_show' => lang('Config.none'),
|
||||
'name' => lang('Items.name'),
|
||||
'category' => lang('Items.category'),
|
||||
'cost_price' => lang('Items.cost_price'),
|
||||
'unit_price' => lang('Items.unit_price'),
|
||||
'item_code' => lang('Items.item_number'),
|
||||
'company_name' => lang('Suppliers.company_name')
|
||||
],
|
||||
$config['barcode_second_row'],
|
||||
['class' => 'form-control input-sm']
|
||||
) ?>
|
||||
</div>
|
||||
<label class="control-label col-sm-1"><?= lang('Config.barcode_third_row') . ' ' ?></label>
|
||||
<div class="col-sm-2">
|
||||
<?= form_dropdown(
|
||||
'barcode_third_row',
|
||||
[
|
||||
'not_show' => lang('Config.none'),
|
||||
'name' => lang('Items.name'),
|
||||
'category' => lang('Items.category'),
|
||||
'cost_price' => lang('Items.cost_price'),
|
||||
'unit_price' => lang('Items.unit_price'),
|
||||
'item_code' => lang('Items.item_number'),
|
||||
'company_name' => lang('Suppliers.company_name')
|
||||
],
|
||||
$config['barcode_third_row'],
|
||||
['class' => 'form-control input-sm']
|
||||
) ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.barcode_number_in_row'), 'barcode_num_in_row', ['class' => 'control-label col-xs-2 required']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_input([
|
||||
'name' => 'barcode_num_in_row',
|
||||
'id' => 'barcode_num_in_row',
|
||||
'class' => 'form-control input-sm required',
|
||||
'value' => $config['barcode_num_in_row']
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.barcode_page_width'), 'barcode_page_width', ['class' => 'control-label col-xs-2 required']) ?>
|
||||
<div class="col-sm-2">
|
||||
<div class="input-group">
|
||||
<?= form_input([
|
||||
'name' => 'barcode_page_width',
|
||||
'id' => 'barcode_page_width',
|
||||
'class' => 'form-control input-sm required',
|
||||
'value' => $config['barcode_page_width']
|
||||
]) ?>
|
||||
<span class="input-group-addon input-sm">%</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.barcode_page_cellspacing'), 'barcode_page_cellspacing', ['class' => 'control-label col-xs-2 required']) ?>
|
||||
<div class="col-sm-2">
|
||||
<div class="input-group">
|
||||
<?= form_input([
|
||||
'name' => 'barcode_page_cellspacing',
|
||||
'id' => 'barcode_page_cellspacing',
|
||||
'class' => 'form-control input-sm required',
|
||||
'value' => $config['barcode_page_cellspacing']
|
||||
]) ?>
|
||||
<span class="input-group-addon input-sm">px</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?= form_submit([
|
||||
'name' => 'submit_barcode',
|
||||
'id' => 'submit_barcode',
|
||||
'value' => lang('Common.submit'),
|
||||
'class' => 'btn btn-primary btn-sm pull-right'
|
||||
]) ?>
|
||||
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-6 col-lg-3">
|
||||
<label for="barcode_font" class="form-label"><?= lang('Config.barcode_font'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-fonts"></i></span>
|
||||
<select class="form-select" id="barcode_font" name="barcode_font" required>
|
||||
<?php foreach ($barcode_fonts as $key => $value): ?>
|
||||
<option value="<?= $key ?>" <?= $config['barcode_font'] == $key ? 'selected' : '' ?>><?= $value ?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-6 col-lg-3">
|
||||
<label for="barcode_font_size" class="form-label">Font Size<sup><span class="badge text-primary"><i class="bi bi-asterisk"></i></span></sup></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-arrows-angle-expand"></i></span>
|
||||
<input type="number" class="form-control" min="1" max="30" name="barcode_font_size" id="barcode_font_size" value="<?= $config['barcode_font_size'] ?>" required>
|
||||
<span class="input-group-text">px</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-check form-switch mb-3">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="allow_duplicate_barcodes" name="allow_duplicate_barcodes" value="allow_duplicate_barcodes" <?= $config['allow_duplicate_barcodes'] == 1 ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="allow_duplicate_barcodes"><?= lang('Config.allow_duplicate_barcodes'); ?></label>
|
||||
<div class="form-text"><i class="bi bi-info-square pe-1"></i><?= lang('Config.barcode_tooltip') ?></div>
|
||||
</div>
|
||||
|
||||
<label for="barcode_content" class="form-label"><?= lang('Config.barcode_content'); ?></label>
|
||||
<div class="row mb-3">
|
||||
<div class="col-12">
|
||||
<div class="form-check form-check-inline">
|
||||
<input class="form-check-input" type="radio" name="barcode_content" id="barcode_content_id" value="id" <?= $config['barcode_content'] == 'id' ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="barcode_content_id"><?= lang('Config.barcode_id') ?></label>
|
||||
</div>
|
||||
|
||||
<div class="form-check form-check-inline">
|
||||
<input class="form-check-input" type="radio" name="barcode_content" id="barcode_content_number" value="number" <?= $config['barcode_content'] == 'number' ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="barcode_content_number"><?= lang('Config.barcode_number') ?></label>
|
||||
</div>
|
||||
|
||||
<div class="form-check form-check-inline form-switch">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="barcode_generate_if_empty" name="barcode_generate_if_empty" value="barcode_generate_if_empty" <?= $config['barcode_generate_if_empty'] == 1 ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="barcode_generate_if_empty"><?= lang('Config.barcode_generate_if_empty'); ?></label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="barcode_formats" class="form-label"><?= lang('Config.barcode_formats'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-code-square"></i></span>
|
||||
<!-- <?php
|
||||
$barcode_formats = json_decode(config('OSPOS')->settings['barcode_formats']);
|
||||
$options = !empty($barcode_formats) ? array_combine($barcode_formats, $barcode_formats) : [];
|
||||
?>
|
||||
<select class="form-select" id="barcode_formats" name="barcode_formats[]" data-role="tagsinput" multiple>
|
||||
<?php foreach ($options as $value): ?>
|
||||
<option value="<?= $value ?>" <?= in_array($value, $barcode_formats) ? 'selected' : '' ?>><?= $value ?></option>
|
||||
<?php endforeach; ?>
|
||||
</select> -->
|
||||
<input type="text" class="form-control" disabled>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<label for="barcode_layout" class="form-label"><?= lang('Config.barcode_layout'); ?></label>
|
||||
<div class="col-6 col-lg-3">
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-1-square"></i></span>
|
||||
<select name="barcode_first_row" class="form-select">
|
||||
<option value="not_show" <?= $config['barcode_first_row'] == 'not_show' ? 'selected' : '' ?>><?= lang('Config.none') ?></option>
|
||||
<option value="name" <?= $config['barcode_first_row'] == 'name' ? 'selected' : '' ?>><?= lang('Items.name') ?></option>
|
||||
<option value="category" <?= $config['barcode_first_row'] == 'category' ? 'selected' : '' ?>><?= lang('Items.category') ?></option>
|
||||
<option value="cost_price" <?= $config['barcode_first_row'] == 'cost_price' ? 'selected' : '' ?>><?= lang('Items.cost_price') ?></option>
|
||||
<option value="unit_price" <?= $config['barcode_first_row'] == 'unit_price' ? 'selected' : '' ?>><?= lang('Items.unit_price') ?></option>
|
||||
<option value="company_name" <?= $config['barcode_first_row'] == 'company_name' ? 'selected' : '' ?>><?= lang('Suppliers.company_name') ?></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-6 col-lg-3">
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-2-square"></i></span>
|
||||
<select name="barcode_second_row" class="form-select">
|
||||
<option value="not_show" <?= $config['barcode_second_row'] == 'not_show' ? 'selected' : '' ?>><?= lang('Config.none') ?></option>
|
||||
<option value="name" <?= $config['barcode_second_row'] == 'name' ? 'selected' : '' ?>><?= lang('Items.name') ?></option>
|
||||
<option value="category" <?= $config['barcode_second_row'] == 'category' ? 'selected' : '' ?>><?= lang('Items.category') ?></option>
|
||||
<option value="cost_price" <?= $config['barcode_second_row'] == 'cost_price' ? 'selected' : '' ?>><?= lang('Items.cost_price') ?></option>
|
||||
<option value="unit_price" <?= $config['barcode_second_row'] == 'unit_price' ? 'selected' : '' ?>><?= lang('Items.unit_price') ?></option>
|
||||
<option value="item_code" <?= $config['barcode_second_row'] == 'item_code' ? 'selected' : '' ?>><?= lang('Items.item_number') ?></option>
|
||||
<option value="company_name" <?= $config['barcode_second_row'] == 'company_name' ? 'selected' : '' ?>><?= lang('Suppliers.company_name') ?></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-6 col-lg-3">
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-3-square"></i></span>
|
||||
<select name="barcode_third_row" class="form-select">
|
||||
<option value="not_show" <?= $config['barcode_third_row'] == 'not_show' ? 'selected' : '' ?>><?= lang('Config.none') ?></option>
|
||||
<option value="name" <?= $config['barcode_third_row'] == 'name' ? 'selected' : '' ?>><?= lang('Items.name') ?></option>
|
||||
<option value="category" <?= $config['barcode_third_row'] == 'category' ? 'selected' : '' ?>><?= lang('Items.category') ?></option>
|
||||
<option value="cost_price" <?= $config['barcode_third_row'] == 'cost_price' ? 'selected' : '' ?>><?= lang('Items.cost_price') ?></option>
|
||||
<option value="unit_price" <?= $config['barcode_third_row'] == 'unit_price' ? 'selected' : '' ?>><?= lang('Items.unit_price') ?></option>
|
||||
<option value="item_code" <?= $config['barcode_third_row'] == 'item_code' ? 'selected' : '' ?>><?= lang('Items.item_number') ?></option>
|
||||
<option value="company_name" <?= $config['barcode_third_row'] == 'company_name' ? 'selected' : '' ?>><?= lang('Suppliers.company_name') ?></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-6 col-lg-3">
|
||||
<label for="barcode_num_in_row" class="form-label"><?= lang('Config.barcode_number_in_row'); ?><sup><span class="badge text-primary"><i class="bi bi-asterisk"></i></span></sup></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-123"></i></span>
|
||||
<input type="number" min="1" max="100" name="barcode_num_in_row" id="barcode_num_in_row" class="form-control" value="<?= $config['barcode_num_in_row'] ?>" required>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-6 col-lg-3">
|
||||
<label for="barcode_page_width" class="form-label"><?= lang('Config.barcode_page_width'); ?><sup><span class="badge text-primary"><i class="bi bi-asterisk"></i></span></sup></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-arrows"></i></span>
|
||||
<input type="number" min="0" max="100" name="barcode_page_width" id="barcode_page_width" class="form-control" value="<?= $config['barcode_page_width'] ?>" required>
|
||||
<span class="input-group-text"><i class="bi bi-percent"></i></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-6 col-lg-3">
|
||||
<label for="barcode_page_cellspacing" class="form-label"><?= lang('Config.barcode_page_cellspacing'); ?><sup><span class="badge text-primary"><i class="bi bi-asterisk"></i></span></sup></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-distribute-horizontal"></i></span>
|
||||
<input type="number" min="1" max="100" name="barcode_page_cellspacing" id="barcode_page_cellspacing" class="form-control" value="<?= $config['barcode_page_cellspacing'] ?>" required>
|
||||
<span class="input-group-text">px</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="d-flex justify-content-end">
|
||||
<button class="btn btn-primary" type="submit" name="submit_barcode"><?= lang('Common.submit'); ?></button>
|
||||
</div>
|
||||
|
||||
<?= form_close() ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
5
app/Views/configs/config_header.php
Normal file
5
app/Views/configs/config_header.php
Normal file
@@ -0,0 +1,5 @@
|
||||
<div class="d-flex">
|
||||
<h4 class="flex-grow-1 fw-bold"><?= $config_title; ?></h4>
|
||||
<h5 class="link-secondary d-print-none" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Learn more in our docs"><i class="bi bi-journal-arrow-up"></i></h5>
|
||||
</div>
|
||||
<hr class="mt-0 d-print-none">
|
||||
@@ -3,137 +3,85 @@
|
||||
* @var array $config
|
||||
*/
|
||||
?>
|
||||
<?= form_open('config/saveEmail/', ['id' => 'email_config_form', 'enctype' => 'multipart/form-data']) ?>
|
||||
|
||||
<?= form_open('config/saveEmail/', ['id' => 'email_config_form', 'enctype' => 'multipart/form-data', 'class' => 'form-horizontal']) ?>
|
||||
<div id="config_wrapper">
|
||||
<fieldset id="config_info">
|
||||
<?php
|
||||
$title_info['config_title'] = lang('Config.email_configuration');
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<div id="required_fields_message"><?= lang('Common.fields_required_message') ?></div>
|
||||
<ul id="email_error_message_box" class="error_message_box"></ul>
|
||||
<ul id="email_error_message_box" class="error_message_box"></ul>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.email_protocol'), 'protocol', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_dropdown(
|
||||
'protocol',
|
||||
[
|
||||
'mail' => 'mail',
|
||||
'sendmail' => 'sendmail',
|
||||
'smtp' => 'smtp'
|
||||
],
|
||||
$config['protocol'],
|
||||
'class="form-control input-sm" id="protocol"'
|
||||
) ?>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="protocol" class="form-label"><?= lang('Config.email_protocol'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<label class="input-group-text"><i class="bi bi-mailbox"></i></label>
|
||||
<?= form_dropdown('protocol', array('mail' => 'Mail', 'sendmail' => 'Sendmail', 'smtp' => 'SMTP'), $config['protocol'], array('class' => 'form-select', 'id' => 'protocol')); ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.email_mailpath'), 'mailpath', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-4">
|
||||
<?= form_input([
|
||||
'name' => 'mailpath',
|
||||
'id' => 'mailpath',
|
||||
'class' => 'form-control input-sm',
|
||||
'value' => $config['mailpath']
|
||||
]) ?>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="mailpath" class="form-label"><?= lang('Config.email_mailpath'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<label class="input-group-text"><i class="bi bi-braces"></i></label>
|
||||
<input type="text" name="mailpath" class="form-control" id="mailpath" value="<?= $config['mailpath']; ?>">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.email_smtp_host'), 'smtp_host', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_input([
|
||||
'name' => 'smtp_host',
|
||||
'id' => 'smtp_host',
|
||||
'class' => 'form-control input-sm',
|
||||
'value' => $config['smtp_host']
|
||||
]) ?>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="smtp_host" class="form-label"><?= lang('Config.email_smtp_host'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<label class="input-group-text"><i class="bi bi-database"></i></label>
|
||||
<input type="text" name="smtp_host" class="form-control" id="smtp_host" value="<?= $config['smtp_host']; ?>">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.email_smtp_port'), 'smtp_port', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_input([
|
||||
'name' => 'smtp_port',
|
||||
'id' => 'smtp_port',
|
||||
'class' => 'form-control input-sm',
|
||||
'value' => $config['smtp_port']
|
||||
]) ?>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="smtp_port" class="form-label"><?= lang('Config.email_smtp_port'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<label class="input-group-text"><i class="bi bi-door-open"></i></label>
|
||||
<input type="number" name="smtp_port" class="form-control" id="smtp_port" value="<?= $config['smtp_port']; ?>">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.email_smtp_crypto'), 'smtp_crypto', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_dropdown(
|
||||
'smtp_crypto',
|
||||
[
|
||||
'' => 'None',
|
||||
'tls' => 'TLS',
|
||||
'ssl' => 'SSL'
|
||||
],
|
||||
$config['smtp_crypto'],
|
||||
'class="form-control input-sm" id="smtp_crypto"'
|
||||
) ?>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="smtp_crypto" class="form-label"><?= lang('Config.email_smtp_crypto'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<label class="input-group-text"><i class="bi bi-shield-lock"></i></label>
|
||||
<?= form_dropdown('smtp_crypto', array('' => 'None', 'tls' => 'TLS', 'ssl' => 'SSL'), $config['smtp_crypto'], array('class' => 'form-select', 'id' => 'smtp_crypto')); ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.email_smtp_timeout'), 'smtp_timeout', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_input([
|
||||
'name' => 'smtp_timeout',
|
||||
'id' => 'smtp_timeout',
|
||||
'class' => 'form-control input-sm',
|
||||
'value' => $config['smtp_timeout']
|
||||
]) ?>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="smtp_timeout" class="form-label"><?= lang('Config.email_smtp_timeout'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<label class="input-group-text"><i class="bi bi-stopwatch"></i></label>
|
||||
<input type="number" name="smtp_timeout" class="form-control" id="smtp_timeout" value="<?= $config['smtp_timeout']; ?>">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.email_smtp_user'), 'smtp_user', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-4">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon input-sm">
|
||||
<i class="bi bi-person"></i>
|
||||
</span>
|
||||
<?= form_input([
|
||||
'name' => 'smtp_user',
|
||||
'id' => 'smtp_user',
|
||||
'class' => 'form-control input-sm',
|
||||
'value' => $config['smtp_user']
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="smtp_user" class="form-label"><?= lang('Config.email_smtp_user'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<label class="input-group-text"><i class="bi bi-person"></i></label>
|
||||
<input type="text" name="smtp_user" class="form-control" id="smtp_user" value="<?= $config['smtp_user']; ?>">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.email_smtp_pass'), 'smtp_pass', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-4">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon input-sm">
|
||||
<i class="bi bi-lock"></i>
|
||||
</span>
|
||||
<?= form_password([
|
||||
'name' => 'smtp_pass',
|
||||
'id' => 'smtp_pass',
|
||||
'class' => 'form-control input-sm',
|
||||
'value' => $config['smtp_pass']
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="smtp_pass" class="form-label"><?= lang('Config.email_smtp_pass'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<label class="input-group-text"><i class="bi bi-lock"></i></label>
|
||||
<input type="password" name="smtp_pass" class="form-control" id="smtp_pass" value="<?= $config['smtp_pass']; ?>">
|
||||
</div>
|
||||
|
||||
<?= form_submit([
|
||||
'name' => 'submit_email',
|
||||
'id' => 'submit_email',
|
||||
'value' => lang('Common.submit'),
|
||||
'class' => 'btn btn-primary btn-sm pull-right'
|
||||
]) ?>
|
||||
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="d-flex justify-content-end">
|
||||
<button class="btn btn-primary" name="submit_email"><?= lang('Common.submit'); ?></button>
|
||||
</div>
|
||||
|
||||
<?= form_close() ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
@@ -162,6 +110,7 @@
|
||||
},
|
||||
success: function(response) {
|
||||
$.notify({
|
||||
icon: 'bi bi-bell-fill',
|
||||
message: response.message
|
||||
}, {
|
||||
type: response.success ? 'success' : 'danger'
|
||||
|
||||
@@ -9,459 +9,210 @@
|
||||
*/
|
||||
?>
|
||||
|
||||
<?= form_open('config/saveGeneral/', ['id' => 'general_config_form', 'enctype' => 'multipart/form-data', 'class' => 'form-horizontal']) ?>
|
||||
<div id="config_wrapper">
|
||||
<fieldset id="config_info">
|
||||
|
||||
<div id="required_fields_message"><?= lang('Common.fields_required_message') ?></div>
|
||||
<ul id="general_error_message_box" class="error_message_box"></ul>
|
||||
<?= form_open('config/saveGeneral/', ['id' => 'general_config_form', 'enctype' => 'multipart/form-data']) ?>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.theme'), 'theme', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-sm-10">
|
||||
<div class="form-group form-group-sm row">
|
||||
<div class="col-sm-3">
|
||||
<?= form_dropdown(
|
||||
'theme',
|
||||
$themes,
|
||||
$config['theme'],
|
||||
'class="form-control input-sm" id="theme-change"'
|
||||
) ?>
|
||||
</div>
|
||||
<div class="col-sm-7">
|
||||
<a href="<?= 'https://bootswatch.com/3/' . ('bootstrap' == ($config['theme']) ? 'default' : esc($config['theme'])) ?>" target="_blank" rel=”noopener”>
|
||||
<span><?= lang('Config.theme_preview') . ' ' . ucfirst(esc($config['theme'])) . ' ' ?></span>
|
||||
<i class="bi bi-box-arrow-up-right"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
$title_info['config_title'] = lang('Config.general_configuration');
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<ul id="general_error_message_box" class="error_message_box"></ul>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12 col-sm-6 col-xxl-3">
|
||||
<label for="default_sales_discount" class="form-label"><?= lang('Config.default_sales_discount') ?><sup><span class="badge text-primary"><i class="bi bi-asterisk"></i></span></sup></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-cart-dash"></i></span>
|
||||
<input class="form-control" type="number" min="0" max="100" name="default_sales_discount" id="default_sales_discount" value="<?= $config['default_sales_discount'] ?>" required>
|
||||
<input type="radio" class="btn-check" name="default_sales_discount_type" id="dsd_type_1" value="1" <?= $config['default_sales_discount_type'] == 1 ? 'checked' : '' ?>>
|
||||
<label class="btn btn-outline-primary fw-semibold" for="dsd_type_1"><?= $config['currency_symbol'] ?></label>
|
||||
<input type="radio" class="btn-check" name="default_sales_discount_type" id="dsd_type_0" value="0" <?= $config['default_sales_discount_type'] == 0 ? 'checked' : '' ?>>
|
||||
<label class="btn btn-outline-primary fw-semibold" for="dsd_type_0">%</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.login_form'), 'login_form', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_dropdown(
|
||||
'login_form',
|
||||
[
|
||||
'floating_labels' => lang('Config.floating_labels'),
|
||||
'input_groups' => lang('Config.input_groups')
|
||||
],
|
||||
$config['login_form'],
|
||||
'class="form-control input-sm"'
|
||||
) ?>
|
||||
</div>
|
||||
<div class="col-12 col-sm-6 col-xxl-3">
|
||||
<label for="default_receivings_discount" class="form-label"><?= lang('Config.default_receivings_discount') ?><sup><span class="badge text-primary"><i class="bi bi-asterisk"></i></span></sup></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-bag-dash"></i></span>
|
||||
<input class="form-control" type="number" min="0" max="100" name="default_receivings_discount" id="default_receivings_discount" value="<?= $config['default_receivings_discount'] ?>" required>
|
||||
<input type="radio" class="btn-check" name="default_receivings_discount_type" id="drd_type_1" value="1" <?= $config['default_receivings_discount_type'] == 1 ? 'checked' : '' ?>>
|
||||
<label class="btn btn-outline-primary fw-semibold" for="drd_type_1"><?= $config['currency_symbol'] ?></label>
|
||||
<input type="radio" class="btn-check" name="default_receivings_discount_type" id="drd_type_0" value="0" <?= $config['default_receivings_discount_type'] == 0 ? 'checked' : '' ?>>
|
||||
<label class="btn btn-outline-primary fw-semibold" for="drd_type_0">%</label>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.default_sales_discount'), 'default_sales_discount', ['class' => 'control-label col-xs-2 required']) ?>
|
||||
<div class="col-xs-2">
|
||||
<div class="input-group">
|
||||
<?= form_input([
|
||||
'name' => 'default_sales_discount',
|
||||
'id' => 'default_sales_discount',
|
||||
'class' => 'form-control input-sm required',
|
||||
'type' => 'number',
|
||||
'min' => 0,
|
||||
'max' => 100,
|
||||
'value' => $config['default_sales_discount']
|
||||
]) ?>
|
||||
<span class="input-group-btn">
|
||||
<?= form_checkbox([
|
||||
'id' => 'default_sales_discount_type',
|
||||
'name' => 'default_sales_discount_type',
|
||||
'value' => 1,
|
||||
'data-toggle' => 'toggle',
|
||||
'data-size' => 'normal',
|
||||
'data-onstyle' => 'success',
|
||||
'data-on' => '<b>' . $config['currency_symbol'] . '</b>',
|
||||
'data-off' => '<b>%</b>',
|
||||
'checked' => $config['default_sales_discount_type'] == 1
|
||||
]) ?>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.default_receivings_discount'), 'default_receivings_discount', ['class' => 'control-label col-xs-2 required']) ?>
|
||||
<div class="col-xs-2">
|
||||
<div class="input-group">
|
||||
<?= form_input([
|
||||
'name' => 'default_receivings_discount',
|
||||
'id' => 'default_receivings_discount',
|
||||
'class' => 'form-control input-sm required',
|
||||
'type' => 'number',
|
||||
'min' => 0,
|
||||
'max' => 100,
|
||||
'value' => $config['default_receivings_discount']
|
||||
]) ?>
|
||||
<span class="input-group-btn">
|
||||
<?= form_checkbox([
|
||||
'id' => 'default_receivings_discount_type',
|
||||
'name' => 'default_receivings_discount_type',
|
||||
'value' => 1,
|
||||
'data-toggle' => 'toggle',
|
||||
'data-size' => 'normal',
|
||||
'data-onstyle' => 'success',
|
||||
'data-on' => '<b>' . $config['currency_symbol'] . '</b>',
|
||||
'data-off' => '<b>%</b>',
|
||||
'checked' => $config['default_receivings_discount_type'] == 1
|
||||
]) ?>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.enforce_privacy'), 'enforce_privacy', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-1">
|
||||
<?= form_checkbox([
|
||||
'name' => 'enforce_privacy',
|
||||
'id' => 'enforce_privacy',
|
||||
'value' => 'enforce_privacy',
|
||||
'checked' => $config['enforce_privacy'] == 1
|
||||
]) ?>
|
||||
|
||||
<label class="control-label">
|
||||
<span class="bi bi-info-circle" data-toggle="tooltip" data-placement="right" title="<?= lang('Config.enforce_privacy_tooltip') ?>"></span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.receiving_calculate_average_price'), 'receiving_calculate_average_price', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-1">
|
||||
<?= form_checkbox([
|
||||
'name' => 'receiving_calculate_average_price',
|
||||
'id' => 'receiving_calculate_average_price',
|
||||
'value' => 'receiving_calculate_average_price',
|
||||
'checked' => $config['receiving_calculate_average_price'] == 1
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.lines_per_page'), 'lines_per_page', ['class' => 'control-label col-xs-2 required']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_input([
|
||||
'name' => 'lines_per_page',
|
||||
'id' => 'lines_per_page',
|
||||
'class' => 'form-control input-sm required',
|
||||
'type' => 'number',
|
||||
'min' => 10,
|
||||
'max' => 1000,
|
||||
'value' => $config['lines_per_page']
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.notify_alignment'), 'notify_horizontal_position', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-sm-10">
|
||||
<div class="form-group form-group-sm row">
|
||||
<div class="col-sm-2">
|
||||
<?= form_dropdown(
|
||||
'notify_vertical_position',
|
||||
[
|
||||
'top' => lang('Config.top'),
|
||||
'bottom' => lang('Config.bottom')
|
||||
],
|
||||
$config['notify_vertical_position'],
|
||||
'class="form-control input-sm"'
|
||||
) ?>
|
||||
</div>
|
||||
<div class="col-sm-2">
|
||||
<?= form_dropdown(
|
||||
'notify_horizontal_position',
|
||||
[
|
||||
'left' => lang('Config.left'),
|
||||
'center' => lang('Config.center'),
|
||||
'right' => lang('Config.right')
|
||||
],
|
||||
$config['notify_horizontal_position'],
|
||||
'class="form-control input-sm"'
|
||||
) ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.image_restrictions'), 'image_restrictions', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-sm-10">
|
||||
<div class="form-group form-group-sm row">
|
||||
<div class="col-sm-2">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon input-sm">
|
||||
<i class="bi bi-arrows"></i>
|
||||
</span>
|
||||
<?= form_input([
|
||||
'name' => 'image_max_width',
|
||||
'id' => 'image_max_width',
|
||||
'class' => 'form-control input-sm required',
|
||||
'type' => 'number',
|
||||
'min' => 128,
|
||||
'max' => 3840,
|
||||
'value' => $config['image_max_width'],
|
||||
'data-toggle' => 'tooltip',
|
||||
'data-placement' => 'top',
|
||||
'title' => lang('Config.image_max_width_tooltip')
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-2">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon input-sm">
|
||||
<i class="bi bi-arrows-vertical"></i>
|
||||
</span>
|
||||
<?= form_input([
|
||||
'name' => 'image_max_height',
|
||||
'id' => 'image_max_height',
|
||||
'class' => 'form-control input-sm required',
|
||||
'type' => 'number',
|
||||
'min' => 128,
|
||||
'max' => 3840,
|
||||
'value' => $config['image_max_height'],
|
||||
'data-toggle' => 'tooltip',
|
||||
'data-placement' => 'top',
|
||||
'title' => lang('Config.image_max_height_tooltip')
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-2">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon input-sm">
|
||||
<i class="bi bi-hdd"></i>
|
||||
</span>
|
||||
<?= form_input([
|
||||
'name' => 'image_max_size',
|
||||
'id' => 'image_max_size',
|
||||
'class' => 'form-control input-sm required',
|
||||
'type' => 'number',
|
||||
'min' => 128,
|
||||
'max' => 2048,
|
||||
'value' => $config['image_max_size'],
|
||||
'data-toggle' => 'tooltip',
|
||||
'data-placement' => 'top',
|
||||
'title' => lang('Config.image_max_size_tooltip')
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-4">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon input-sm"><?= lang('Config.image_allowed_file_types') ?></span>
|
||||
<?= form_multiselect([
|
||||
'name' => 'image_allowed_types[]',
|
||||
'options' => $image_allowed_types,
|
||||
'selected' => $selected_image_allowed_types,
|
||||
'id' => 'image_allowed_types',
|
||||
'class' => 'selectpicker show-menu-arrow',
|
||||
'data-none-selected-text' => lang('Common.none_selected_text'),
|
||||
'data-selected-text-format' => 'count > 1',
|
||||
'data-style' => 'btn-default btn-sm',
|
||||
'data-width' => '100%'
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.gcaptcha_enable'), 'gcaptcha_enable', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-1">
|
||||
<?= form_checkbox([
|
||||
'name' => 'gcaptcha_enable',
|
||||
'id' => 'gcaptcha_enable',
|
||||
'value' => 'gcaptcha_enable',
|
||||
'checked' => $config['gcaptcha_enable'] == 1
|
||||
]) ?>
|
||||
<label class="control-label">
|
||||
<a href="https://www.google.com/recaptcha/admin" target="_blank">
|
||||
<span class="bi bi-info-circle" data-toggle="tooltip" data-placement="right" title="<?= lang('Config.gcaptcha_tooltip') ?>"></span>
|
||||
</a>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.gcaptcha_site_key'), 'config_gcaptcha_site_key', ['class' => 'required control-label col-xs-2', 'id' => 'config_gcaptcha_site_key']) ?>
|
||||
<div class="col-xs-4">
|
||||
<?= form_input([
|
||||
'name' => 'gcaptcha_site_key',
|
||||
'id' => 'gcaptcha_site_key',
|
||||
'class' => 'form-control input-sm required',
|
||||
'value' => $config['gcaptcha_site_key']
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.gcaptcha_secret_key'), 'config_gcaptcha_secret_key', ['class' => 'required control-label col-xs-2', 'id' => 'config_gcaptcha_secret_key']) ?>
|
||||
<div class="col-xs-4">
|
||||
<?= form_input([
|
||||
'name' => 'gcaptcha_secret_key',
|
||||
'id' => 'gcaptcha_secret_key',
|
||||
'class' => 'form-control input-sm required',
|
||||
'value' => $config['gcaptcha_secret_key']
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.suggestions_layout'), 'suggestions_layout', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-sm-10">
|
||||
<div class="form-group form-group-sm row">
|
||||
<div class="col-sm-3">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon input-sm"><?= lang('Config.suggestions_first_column') ?></span>
|
||||
<?= form_dropdown(
|
||||
'suggestions_first_column',
|
||||
[
|
||||
'name' => lang('Items.name'),
|
||||
'item_number' => lang('Items.number_information'),
|
||||
'unit_price' => lang('Items.unit_price'),
|
||||
'cost_price' => lang('Items.cost_price')
|
||||
],
|
||||
$config['suggestions_first_column'],
|
||||
'class="form-control input-sm"'
|
||||
) ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon input-sm"><?= lang('Config.suggestions_second_column') ?></span>
|
||||
<?= form_dropdown(
|
||||
'suggestions_second_column',
|
||||
[
|
||||
'' => lang('Config.none'),
|
||||
'name' => lang('Items.name'),
|
||||
'item_number' => lang('Items.number_information'),
|
||||
'unit_price' => lang('Items.unit_price'),
|
||||
'cost_price' => lang('Items.cost_price')
|
||||
],
|
||||
$config['suggestions_second_column'],
|
||||
'class="form-control input-sm"'
|
||||
) ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon input-sm"><?= lang('Config.suggestions_third_column') ?></span>
|
||||
<?= form_dropdown(
|
||||
'suggestions_third_column',
|
||||
[
|
||||
'' => lang('Config.none'),
|
||||
'name' => lang('Items.name'),
|
||||
'item_number' => lang('Items.number_information'),
|
||||
'unit_price' => lang('Items.unit_price'),
|
||||
'cost_price' => lang('Items.cost_price')
|
||||
],
|
||||
$config['suggestions_third_column'],
|
||||
'class="form-control input-sm"'
|
||||
) ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.giftcard_number'), 'giftcard_number', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-8">
|
||||
<label class="radio-inline">
|
||||
<?= form_radio([
|
||||
'name' => 'giftcard_number',
|
||||
'value' => 'series',
|
||||
'checked' => $config['giftcard_number'] == 'series'
|
||||
]) ?>
|
||||
<?= lang('Config.giftcard_series') ?>
|
||||
</label>
|
||||
<label class="radio-inline">
|
||||
<?= form_radio([
|
||||
'name' => 'giftcard_number',
|
||||
'value' => 'random',
|
||||
'checked' => $config['giftcard_number'] == 'random'
|
||||
]) ?>
|
||||
<?= lang('Config.giftcard_random') ?>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.derive_sale_quantity'), 'derive_sale_quantity', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-1">
|
||||
<?= form_checkbox([
|
||||
'name' => 'derive_sale_quantity',
|
||||
'id' => 'derive_sale_quantity',
|
||||
'value' => 'derive_sale_quantity',
|
||||
'checked' => $config['derive_sale_quantity'] == 1
|
||||
]) ?>
|
||||
|
||||
<label class="control-label">
|
||||
<span class="bi bi-info-circle" data-toggle="tooltip" data-placement="right" title="<?= lang('Config.derive_sale_quantity_tooltip') ?>"></span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.show_office_group'), 'show_office_group', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-1">
|
||||
<?= form_checkbox([
|
||||
'name' => 'show_office_group',
|
||||
'id' => 'show_office_group',
|
||||
'value' => 'show_office_group',
|
||||
'checked' => $show_office_group > 0
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.multi_pack_enabled'), 'multi_pack_enabled', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-1">
|
||||
<?= form_checkbox([
|
||||
'name' => 'multi_pack_enabled',
|
||||
'id' => 'multi_pack_enabled',
|
||||
'value' => 'multi_pack_enabled',
|
||||
'checked' => $config['multi_pack_enabled'] == 1
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.include_hsn'), 'include_hsn', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-1">
|
||||
<?= form_checkbox([
|
||||
'name' => 'include_hsn',
|
||||
'id' => 'include_hsn',
|
||||
'value' => 'include_hsn',
|
||||
'checked' => $config['include_hsn'] == 1
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.category_dropdown'), 'category_dropdown', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-1">
|
||||
<?= form_checkbox([
|
||||
'name' => 'category_dropdown',
|
||||
'id' => 'category_dropdown',
|
||||
'value' => 'category_dropdown',
|
||||
'checked' => $config['category_dropdown'] == 1
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?= form_submit([
|
||||
'name' => 'submit_general',
|
||||
'id' => 'submit_general',
|
||||
'value' => lang('Common.submit'),
|
||||
'class' => 'btn btn-primary btn-sm pull-right'
|
||||
]) ?>
|
||||
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12 col-sm-6 col-xxl-3">
|
||||
<label for="lines_per_page" class="form-label"><?= lang('Config.lines_per_page'); ?><sup><span class="badge text-primary"><i class="bi bi-asterisk"></i></span></sup></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-list"></i></span>
|
||||
<input type="number" min="10" max="1000" name="lines_per_page" class="form-control" id="lines_per_page" value="<?= $config['lines_per_page']; ?>" required>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-check form-switch mb-3">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="enforce_privacy" name="enforce_privacy" <?= $config['enforce_privacy'] == 1 ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="enforce_privacy"><?= lang('Config.enforce_privacy'); ?></label>
|
||||
<div class="form-text"><i class="bi bi-info-square pe-1"></i><?= lang('Config.enforce_privacy_tooltip') ?></div>
|
||||
</div>
|
||||
|
||||
<div class="form-check form-switch mb-3">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="receiving_calculate_average_price" name="receiving_calculate_average_price" <?= $config['receiving_calculate_average_price'] == 1 ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="receiving_calculate_average_price"><?= lang('Config.receiving_calculate_average_price'); ?></label>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<label class="form-label"><?= lang('Config.image_restrictions'); ?></label>
|
||||
<div class="col-12 col-sm-6 col-xl-3">
|
||||
<div class="input-group mb-3" data-bs-toggle="tooltip" title="<?= lang('Config.image_max_width_tooltip'); ?>">
|
||||
<span class="input-group-text"><i class="bi bi-arrows"></i></span>
|
||||
<input type="number" min="128" max="3840" name="image_max_width" id="image_max_width" class="form-control" value="<?= $config['image_max_width']; ?>" required>
|
||||
<span class="input-group-text">px</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-sm-6 col-xl-3">
|
||||
<div class="input-group mb-3" data-bs-toggle="tooltip" title="<?= lang('Config.image_max_height_tooltip'); ?>">
|
||||
<span class="input-group-text"><i class="bi bi-arrows-vertical"></i></span>
|
||||
<input type="number" min="128" max="3840" name="image_max_height" id="image_max_height" class="form-control" value="<?= $config['image_max_height']; ?>" required>
|
||||
<span class="input-group-text">px</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-sm-6 col-xl-3">
|
||||
<div class="input-group mb-3" data-bs-toggle="tooltip" title="<?= lang('Config.image_max_size_tooltip'); ?>">
|
||||
<span class="input-group-text"><i class="bi bi-hdd"></i></span>
|
||||
<input type="number" min="128" max="2048" name="image_max_size" id="image_max_size" class="form-control" value="<?= $config['image_max_size']; ?>" required>
|
||||
<span class="input-group-text">kb</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-sm-6 col-xl-3">
|
||||
<div class="input-group mb-3" data-bs-toggle="tooltip" title="<?= lang('Config.image_allowed_file_types'); ?>">
|
||||
<label class="input-group-text"><i class="bi bi-images"></i></label>
|
||||
<select name="image_allowed_types[]" id="image_allowed_types" class="form-select" multiple placeholder="<?= lang('Config.image_allowed_file_types'); ?>" required>
|
||||
<?php foreach($image_allowed_types as $type): ?>
|
||||
<option value="<?= $type; ?>" <?= in_array($type, $selected_image_allowed_types) ? 'selected' : ''; ?>>
|
||||
<?= $type; ?>
|
||||
</option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-check form-switch mb-3">
|
||||
<input class="form-check-input" type="checkbox" name="gcaptcha_enable" id="gcaptcha_enable" value="gcaptcha_enable" <?= $config['gcaptcha_enable'] == 1 ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="gcaptcha_enable"><?= lang('Config.gcaptcha_enable') ?></label>
|
||||
<a class="d-inline-block" href="https://google.com/recaptcha/admin" target="_blank" rel="noopener"><i class="bi bi-link-45deg link-secondary"></i></a>
|
||||
<div class="form-text"><i class="bi bi-info-square pe-1"></i><?= lang('Config.gcaptcha_tooltip') ?></div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="gcaptcha_site_key" class="form-label"><?= lang('Config.gcaptcha_site_key') ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-key"></i></span>
|
||||
<input type="text" class="form-control" name="gcaptcha_site_key" id="gcaptcha_site_key" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="gcaptcha_secret_key" class="form-label"><?= lang('Config.gcaptcha_secret_key') ?></label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text"><i class="bi bi-stars"></i></span>
|
||||
<input type="text" class="form-control" name="gcaptcha_secret_key" id="gcaptcha_secret_key" required>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row" id="suggestions_layout">
|
||||
<label for="suggestions_layout" class="form-label"><?= lang('Config.suggestions_layout'); ?></label>
|
||||
<div class="col-12 col-sm-6 col-xl-4 col-xxl-3 mb-3">
|
||||
<div class="input-group">
|
||||
<label class="input-group-text"><i class="bi bi-layout-three-columns"></i> 1.</label>
|
||||
<select class="form-select" name="suggestions_first_column">
|
||||
<option value="name" <?= $config['suggestions_first_column'] == 'name' ? 'selected' : '' ?>><?= lang('Items.name') ?></option>
|
||||
<option value="item_number" <?= $config['suggestions_first_column'] == 'item_number' ? 'selected' : '' ?>><?= lang('Items.number_information') ?></option>
|
||||
<option value="unit_price" <?= $config['suggestions_first_column'] == 'unit_price' ? 'selected' : '' ?>><?= lang('Items.unit_price') ?></option>
|
||||
<option value="cost_price" <?= $config['suggestions_first_column'] == 'cost_price' ? 'selected' : '' ?>><?= lang('Items.cost_price') ?></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-sm-6 col-xl-4 col-xxl-3 mb-3">
|
||||
<div class="input-group">
|
||||
<label class="input-group-text"><i class="bi bi-layout-three-columns"></i> 2.</label>
|
||||
<select class="form-select" name="suggestions_second_column">
|
||||
<option value="" <?= $config['suggestions_second_column'] == null ? 'selected' : '' ?>><?= lang('Config.none') ?></option>
|
||||
<option value="name" <?= $config['suggestions_second_column'] == 'name' ? 'selected' : '' ?>><?= lang('Items.name') ?></option>
|
||||
<option value="item_number" <?= $config['suggestions_second_column'] == 'item_number' ? 'selected' : '' ?>><?= lang('Items.number_information') ?></option>
|
||||
<option value="unit_price" <?= $config['suggestions_second_column'] == 'unit_price' ? 'selected' : '' ?>><?= lang('Items.unit_price') ?></option>
|
||||
<option value="cost_price" <?= $config['suggestions_second_column'] == 'cost_price' ? 'selected' : '' ?>><?= lang('Items.cost_price') ?></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-sm-6 col-xl-4 col-xxl-3 mb-3">
|
||||
<div class="input-group">
|
||||
<label class="input-group-text"><i class="bi bi-layout-three-columns"></i> 3.</label>
|
||||
<select class="form-select" name="suggestions_third_column">
|
||||
<option value="" <?= $config['suggestions_third_column'] == null ? 'selected' : '' ?>><?= lang('Config.none') ?></option>
|
||||
<option value="name" <?= $config['suggestions_third_column'] == 'name' ? 'selected' : '' ?>><?= lang('Items.name') ?></option>
|
||||
<option value="item_number" <?= $config['suggestions_third_column'] == 'item_number' ? 'selected' : '' ?>><?= lang('Items.number_information') ?></option>
|
||||
<option value="unit_price" <?= $config['suggestions_third_column'] == 'unit_price' ? 'selected' : '' ?>><?= lang('Items.unit_price') ?></option>
|
||||
<option value="cost_price" <?= $config['suggestions_third_column'] == 'cost_price' ? 'selected' : '' ?>><?= lang('Items.cost_price') ?></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<label for="giftcard_number" class="form-label"><?= lang('Config.giftcard_number'); ?></label>
|
||||
<div class="form-group form-group-sm mb-3">
|
||||
<div class="form-check form-check-inline">
|
||||
<input class="form-check-input" type="radio" name="giftcard_number" id="giftcard_series" value="series" <?= $config['giftcard_number'] == 'series' ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="giftcard_series"><?= lang('Config.giftcard_series') ?></label>
|
||||
</div>
|
||||
<div class="form-check form-check-inline">
|
||||
<input class="form-check-input" type="radio" name="giftcard_number" id="giftcard_random" value="random" <?= $config['giftcard_number'] == 'random' ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="giftcard_random"><?= lang('Config.giftcard_random') ?></label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-check form-switch mb-3">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="derive_sale_quantity" name="derive_sale_quantity" value="derive_sale_quantity" <?= $config['derive_sale_quantity'] == 1 ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="derive_sale_quantity"><?= lang('Config.derive_sale_quantity'); ?></label>
|
||||
<div class="form-text"><i class="bi bi-info-square pe-1"></i><?= lang('Config.derive_sale_quantity_tooltip') ?></div>
|
||||
</div>
|
||||
|
||||
<div class="form-check form-switch mb-3">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="show_office_group" name="show_office_group" value="show_office_group" <?= $show_office_group > 0 ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="show_office_group"><?= lang('Config.show_office_group'); ?></label>
|
||||
</div>
|
||||
|
||||
<div class="form-check form-switch mb-3">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="multi_pack_enabled" name="multi_pack_enabled" value="multi_pack_enabled" <?= $config['multi_pack_enabled'] == 1 ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="multi_pack_enabled"><?= lang('Config.multi_pack_enabled'); ?></label>
|
||||
</div>
|
||||
|
||||
<div class="form-check form-switch mb-3">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="include_hsn" name="include_hsn" value="include_hsn" <?= $config['include_hsn'] == 1 ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="include_hsn"><?= lang('Config.include_hsn'); ?></label>
|
||||
</div>
|
||||
|
||||
<div class="form-check form-switch mb-3">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="category_dropdown" name="category_dropdown" value="category_dropdown" <?= $config['category_dropdown'] == 1 ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="category_dropdown"><?= lang('Config.category_dropdown'); ?></label>
|
||||
</div>
|
||||
|
||||
<div class="d-flex justify-content-end">
|
||||
<button class="btn btn-primary" type="submit" name="submit_general"><?= lang('Common.submit'); ?></button>
|
||||
</div>
|
||||
|
||||
<?= form_close() ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
@@ -528,6 +279,7 @@
|
||||
},
|
||||
success: function(response) {
|
||||
$.notify({
|
||||
icon: 'bi bi-bell-fill',
|
||||
message: response.message
|
||||
}, {
|
||||
type: response.success ? 'success' : 'danger'
|
||||
|
||||
@@ -6,152 +6,110 @@
|
||||
*/
|
||||
?>
|
||||
|
||||
<?= form_open('config/saveInfo/', ['id' => 'info_config_form', 'enctype' => 'multipart/form-data', 'class' => 'form-horizontal']) ?>
|
||||
<div id="config_wrapper">
|
||||
<fieldset id="config_info">
|
||||
<?= form_open('config/saveInfo/', ['id' => 'info_config_form', 'enctype' => 'multipart/form-data', 'class' => 'needs-validation']) ?> <!-- TODO-BS5 add is-invalid and invalid-feeback from BS5 to boxes -->
|
||||
|
||||
<div id="required_fields_message"><?= lang('Common.fields_required_message') ?></div>
|
||||
<ul id="info_error_message_box" class="error_message_box"></ul>
|
||||
<?php
|
||||
$title_info['config_title'] = lang('Config.info_configuration');
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.company'), 'company', ['class' => 'control-label col-xs-2 required']) ?>
|
||||
<div class="col-xs-6">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon input-sm">
|
||||
<i class="bi bi-shop-window"></i>
|
||||
</span>
|
||||
<?= form_input([
|
||||
'name' => 'company',
|
||||
'id' => 'company',
|
||||
'class' => 'form-control input-sm required',
|
||||
'value' => $config['company']
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
<ul id="info_error_message_box" class="error_message_box"></ul>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="info-company" class="form-label"><?= lang('Config.company'); ?><sup><span class="badge text-primary"><i class="bi bi-asterisk"></i></span></sup></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-shop-window"></i></span>
|
||||
<input type="text" class="form-control" name="company" id="info-company" value="<?= $config['company']; ?>" required> <!-- TODO-BS5 invalid-feedback makes input borders not rounded? -->
|
||||
<div class="invalid-feedback"><?= lang('Config.company_required') ?></div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.company_logo'), 'company_logo', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-6">
|
||||
<div class="fileinput <?= $logo_exists ? 'fileinput-exists' : 'fileinput-new' ?>" data-provides="fileinput">
|
||||
<div class="fileinput-new thumbnail" style="width: 200px; height: 200px;"></div>
|
||||
<div class="fileinput-preview fileinput-exists thumbnail" style="max-width: 200px; max-height: 200px;">
|
||||
<img data-src="holder.js/100%x100%" alt="<?= lang('Config.company_logo') ?>" src="<?php if ($logo_exists) echo base_url('uploads/' . $config['company_logo']); else echo '' ?>" style="max-height: 100%; max-width: 100%;">
|
||||
</div>
|
||||
<div>
|
||||
<span class="btn btn-default btn-sm btn-file">
|
||||
<span class="fileinput-new"><?= lang('Config.company_select_image') ?></span>
|
||||
<span class="fileinput-exists"><?= lang('Config.company_change_image') ?></span>
|
||||
<input type="file" name="company_logo">
|
||||
</span>
|
||||
<a href="#" class="btn btn-default btn-sm fileinput-exists" data-dismiss="fileinput"><?= lang('Config.company_remove_image') ?></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.address'), 'address', ['class' => 'control-label col-xs-2 required']) ?>
|
||||
<div class="col-xs-6">
|
||||
<?= form_textarea([
|
||||
'name' => 'address',
|
||||
'id' => 'address',
|
||||
'class' => 'form-control input-sm required',
|
||||
'value' => $config['address']
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.website'), 'website', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-6">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon input-sm">
|
||||
<i class="bi bi-globe"></i>
|
||||
</span>
|
||||
<?= form_input([
|
||||
'name' => 'website',
|
||||
'id' => 'website',
|
||||
'class' => 'form-control input-sm',
|
||||
'value' => $config['website']
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Common.email'), 'email', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-6">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon input-sm">
|
||||
<i class="bi bi-at"></i>
|
||||
</span>
|
||||
<?= form_input([
|
||||
'name' => 'email',
|
||||
'id' => 'email',
|
||||
'type' => 'email',
|
||||
'class' => 'form-control input-sm',
|
||||
'value' => $config['email']
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.phone'), 'phone', ['class' => 'control-label col-xs-2 required']) ?>
|
||||
<div class="col-xs-6">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon input-sm">
|
||||
<i class="bi bi-telephone"></i>
|
||||
</span>
|
||||
<?= form_input([
|
||||
'name' => 'phone',
|
||||
'id' => 'phone',
|
||||
'class' => 'form-control input-sm required',
|
||||
'value' => $config['phone']
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.fax'), 'fax', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-6">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon input-sm">
|
||||
<i class="bi bi-printer"></i>
|
||||
</span>
|
||||
<?= form_input([
|
||||
'name' => 'fax',
|
||||
'id' => 'fax',
|
||||
'class' => 'form-control input-sm',
|
||||
'value' => $config['fax']
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Common.return_policy'), 'return_policy', ['class' => 'control-label col-xs-2 required']) ?>
|
||||
<div class="col-xs-6">
|
||||
<?= form_textarea([
|
||||
'name' => 'return_policy',
|
||||
'id' => 'return_policy',
|
||||
'class' => 'form-control input-sm required',
|
||||
'value' => $config['return_policy']
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?= form_submit([
|
||||
'name' => 'submit_info',
|
||||
'id' => 'submit_info',
|
||||
'value' => lang('Common.submit'),
|
||||
'class' => 'btn btn-primary btn-sm pull-right'
|
||||
]) ?>
|
||||
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="info-company_logo" class="form-label"><?= lang('Config.company_logo'); ?></label>
|
||||
<div class="col-12 col-lg-6">
|
||||
<div id="info-company_logo" class="w-100 fileinput <?= $logo_exists ? 'fileinput-exists' : 'fileinput-new'; ?>" data-provides="fileinput">
|
||||
<div class="input-group mb-3" aria-describedby="company-logo-desc">
|
||||
<span class="input-group-text"><i class="bi bi-image"></i></span>
|
||||
<div class="fileinput-new form-control rounded-end mb-0" style="height: 200px; cursor: default;"></div>
|
||||
<div class="fileinput-exists fileinput-preview img-thumbnail form-control rounded-end mb-0 bg-light mh-100" style="height: 200px; cursor: default; background-size: 40px 40px; background-position: 0 0, 20px 20px; background-image: linear-gradient(45deg, white 25%, transparent 25%, transparent 75%, white 75%, white), linear-gradient(45deg, white 25%, transparent 25%, transparent 75%, white 75%, white);">
|
||||
<img class="mh-100 mw-100" data-src="holder.js/100%x100%" alt="<?= lang('Config.company_logo') ?>" src="<?php if($logo_exists) echo base_url('uploads/' . $config['company_logo']); else echo '' ?>">
|
||||
</div>
|
||||
</div>
|
||||
<div type="button" class="btn btn-secondary btn-file me-2">
|
||||
<span class="fileinput-new"><i class="bi bi-hand-index me-2"></i><?= lang('Config.company_select_image') ?></span>
|
||||
<span class="fileinput-exists"><i class="bi bi-images me-2"></i><?= lang('Config.company_change_image') ?></span>
|
||||
<input type="file" name="company_logo">
|
||||
</div>
|
||||
<button type="button" class="btn btn-outline-secondary fileinput-exists" data-dismiss="fileinput">
|
||||
<i class="bi bi-eraser me-2"></i><?= lang('Config.company_remove_image') ?>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6 form-text d-none d-lg-block" id="company-logo-desc">
|
||||
<ul class="list-unstyled">
|
||||
<li>» Supported file formats; gif, png, jpg</li> <!-- TODO-BS5 add to translations -->
|
||||
<li>» Max upload size of 100kb</li> <!-- TODO-BS5 add to translations -->
|
||||
<li>» Max dimensions of 200x200px</li> <!-- TODO-BS5 add to translations -->
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<label for="info-address" class="form-label"><?= lang('Config.address'); ?><sup><span class="badge text-primary"><i class="bi bi-asterisk"></i></span></sup></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-house"></i></span>
|
||||
<textarea class="form-control" name="address" id="info-address" rows="10" required><?= $config['address']; ?></textarea>
|
||||
<div class="invalid-feedback"><?= lang('Config.address_required') ?></div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="info-website" class="form-label"><?= lang('Config.website'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-globe"></i></span>
|
||||
<input type="url" class="form-control" name="website" id="info-website" value="<?= $config['website']; ?>">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="info-email" class="form-label"><?= lang('Config.email'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-at"></i></span>
|
||||
<input type="email" class="form-control" name="email" id="info-email" value="<?= $config['email']; ?>">
|
||||
<div class="invalid-feedback"><?= lang('Common.email_invalid_format') ?></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="info-phone" class="form-label"><?= lang('Config.phone'); ?><sup><span class="badge text-primary"><i class="bi bi-asterisk"></i></span></sup></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-telephone"></i></span>
|
||||
<input type="tel" class="form-control" name="phone" id="info-phone" value="<?= $config['phone']; ?>" required>
|
||||
<div class="invalid-feedback"><?= lang('Config.phone_required') ?></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="info-fax" class="form-label"><?= lang('Config.fax'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-printer"></i></span>
|
||||
<input type="tel" class="form-control" name="fax" id="info-fax" value="<?= $config['fax']; ?>">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<label for="info-return_policy" class="form-label"><?= lang('Common.return_policy'); ?><sup><span class="badge text-primary"><i class="bi bi-asterisk"></i></span></sup></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-box-arrow-in-down-left"></i></span>
|
||||
<textarea class="form-control" name="return_policy" id="info-return_policy" rows="10" required><?= $config['return_policy']; ?></textarea>
|
||||
<div class="invalid-feedback"><?= lang('Config.return_policy_required') ?></div>
|
||||
</div>
|
||||
|
||||
<div class="d-flex justify-content-end">
|
||||
<button class="btn btn-primary" type="submit" name="submit_info"><?= lang('Common.submit'); ?></button>
|
||||
</div>
|
||||
|
||||
<?= form_close() ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
@@ -4,65 +4,55 @@
|
||||
* @var string $controller_name
|
||||
*/
|
||||
?>
|
||||
<?= form_open('config/saveMailchimp/', ['id' => 'mailchimp_config_form', 'enctype' => 'multipart/form-data']) ?>
|
||||
|
||||
<?= form_open('config/saveMailchimp/', ['id' => 'mailchimp_config_form', 'enctype' => 'multipart/form-data', 'class' => 'form-horizontal']) ?>
|
||||
<div id="config_wrapper">
|
||||
<fieldset id="config_info">
|
||||
<?php
|
||||
$title_info['config_title'] = lang('Config.integrations_configuration');
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<div id="required_fields_message"><?= lang('Common.fields_required_message') ?></div>
|
||||
<div id="integrations_header"><?= lang('Config.mailchimp_configuration') ?></div>
|
||||
<ul id="mailchimp_error_message_box" class="error_message_box"></ul>
|
||||
<legend class="fs-5"><?= lang('Config.mailchimp_configuration') ?></legend>
|
||||
<ul id="mailchimp_error_message_box" class="error_message_box"></ul>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.mailchimp_api_key'), 'mailchimp_api_key', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-4">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon input-sm">
|
||||
<i class="bi bi-key"></i>
|
||||
</span>
|
||||
<?= form_input([
|
||||
'name' => 'mailchimp_api_key',
|
||||
'id' => 'mailchimp_api_key',
|
||||
'class' => 'form-control input-sm',
|
||||
'value' => $mailchimp['api_key']
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-1">
|
||||
<label class="control-label">
|
||||
<a href="https://eepurl.com/b9a05b" target="_blank">
|
||||
<span class="bi bi-info-circle" data-toggle="tooltip" data-placement="right" title="<?= lang('Config.mailchimp_tooltip') ?>"></span>
|
||||
</a>
|
||||
</label>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="mailchimp_api_key" class="form-label">
|
||||
<?= lang('Config.mailchimp_api_key'); ?>
|
||||
<!--<a href="https://eepurl.com/dyijVH" target="_blank" rel="noopener">
|
||||
<i class="bi bi-info-circle-fill text-secondary" data-bs-toggle="tooltip" title="<?= lang('Config.mailchimp_tooltip'); ?>"></i>
|
||||
</a>-->
|
||||
</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text" id="mailchimp-api-key-icon"><i class="bi bi-key"></i></span>
|
||||
<input type="text" class="form-control" name="mailchimp_api_key" id="mailchimp_api_key" aria-describedby="mailchimp-api-key-icon" value="<?= $mailchimp['api_key']; ?>">
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.mailchimp_lists'), 'mailchimp_list_id', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-4">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon input-sm">
|
||||
<i class="bi bi-list-stars"></i>
|
||||
</span>
|
||||
<?= form_dropdown(
|
||||
'mailchimp_list_id',
|
||||
$mailchimp['lists'],
|
||||
$mailchimp['list_id'],
|
||||
'id="mailchimp_list_id" class="form-control input-sm"'
|
||||
) ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-text mb-3">
|
||||
<a class="link-secondary" href="https://eepurl.com/dyijVH" target="_blank" rel="noopener">
|
||||
<i class="bi bi-info-square pe-1"></i><?= lang('Config.mailchimp_tooltip') ?>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?= form_submit([
|
||||
'name' => 'submit_mailchimp',
|
||||
'id' => 'submit_mailchimp',
|
||||
'value' => lang('Common.submit'),
|
||||
'class' => 'btn btn-primary btn-sm pull-right'
|
||||
]) ?>
|
||||
|
||||
</fieldset>
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="mailchimp_list_id" class="form-label"><?= lang('Config.mailchimp_lists'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text" id="mailchimp-lists-icon"><i class="bi bi-list-stars"></i></span>
|
||||
<select class="form-select" id="mailchimp_list_id" aria-describedby="mailchimp-lists-icon" <?= $mailchimp['api_key'] == null ? 'disabled' : '' ?>>
|
||||
<option>Choose...</option>
|
||||
<?php foreach($mailchimp['lists'] as $value => $display_text): ?>
|
||||
<option value="<?= $value; ?>" <?= $value == $mailchimp['list_id'] ? 'selected' : ''; ?>>
|
||||
<?= $display_text; ?>
|
||||
</option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="d-flex justify-content-end">
|
||||
<button class="btn btn-primary" name="sumbit_mailchimp"><?= lang('Common.submit'); ?></button>
|
||||
</div>
|
||||
|
||||
<?= form_close() ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
@@ -74,6 +64,7 @@
|
||||
},
|
||||
function(response) {
|
||||
$.notify({
|
||||
icon: 'bi bi-bell-fill',
|
||||
message: response.message
|
||||
}, {
|
||||
type: response.success ? 'success' : 'danger'
|
||||
|
||||
@@ -6,193 +6,135 @@
|
||||
*/
|
||||
?>
|
||||
|
||||
<?= form_open('config/saveInvoice/', ['id' => 'invoice_config_form', 'class' => 'form-horizontal']) ?>
|
||||
<div id="config_wrapper">
|
||||
<fieldset id="config_info">
|
||||
<?= form_open('config/saveInvoice/', ['id' => 'invoice_config_form']) ?>
|
||||
|
||||
<div id="required_fields_message"><?= lang('Common.fields_required_message') ?></div>
|
||||
<ul id="invoice_error_message_box" class="error_message_box"></ul>
|
||||
<?php
|
||||
$title_info['config_title'] = lang('Config.invoice_configuration');
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.invoice_enable'), 'invoice_enable', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-1">
|
||||
<?= form_checkbox([
|
||||
'name' => 'invoice_enable',
|
||||
'value' => 'invoice_enable',
|
||||
'id' => 'invoice_enable',
|
||||
'checked' => $config['invoice_enable'] == 1
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
<ul id="invoice_error_message_box" class="error_message_box"></ul>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.invoice_type'), 'invoice_type', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-3">
|
||||
<?= form_dropdown(
|
||||
'invoice_type',
|
||||
$invoice_type_options,
|
||||
$config['invoice_type'],
|
||||
'class="form-control input-sm"'
|
||||
) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.recv_invoice_format'), 'recv_invoice_format', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_input([
|
||||
'name' => 'recv_invoice_format',
|
||||
'id' => 'recv_invoice_format',
|
||||
'class' => 'form-control input-sm',
|
||||
'value' => $config['recv_invoice_format']
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.invoice_default_comments'), 'invoice_default_comments', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-5">
|
||||
<?= form_textarea([
|
||||
'name' => 'invoice_default_comments',
|
||||
'id' => 'invoice_default_comments',
|
||||
'class' => 'form-control input-sm',
|
||||
'value' => $config['invoice_default_comments']
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.invoice_email_message'), 'invoice_email_message', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-5">
|
||||
<?= form_textarea([
|
||||
'name' => 'invoice_email_message',
|
||||
'id' => 'invoice_email_message',
|
||||
'class' => 'form-control input-sm',
|
||||
'value' => $config['invoice_email_message']
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.line_sequence'), 'line_sequence', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_dropdown(
|
||||
'line_sequence',
|
||||
$line_sequence_options,
|
||||
$config['line_sequence'],
|
||||
'class="form-control input-sm"'
|
||||
) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.sales_invoice_format'), 'sales_invoice_format', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_input([
|
||||
'name' => 'sales_invoice_format',
|
||||
'id' => 'sales_invoice_format',
|
||||
'class' => 'form-control input-sm',
|
||||
'value' => $config['sales_invoice_format']
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.last_used_invoice_number'), 'last_used_invoice_number', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_input([
|
||||
'type' => 'number',
|
||||
'name' => 'last_used_invoice_number',
|
||||
'id' => 'last_used_invoice_number',
|
||||
'class' => 'form-control input-sm required',
|
||||
'value' => $config['last_used_invoice_number']
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.sales_quote_format'), 'sales_quote_format', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_input([
|
||||
'name' => 'sales_quote_format',
|
||||
'id' => 'sales_quote_format',
|
||||
'class' => 'form-control input-sm',
|
||||
'value' => $config['sales_quote_format']
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.last_used_quote_number'), 'last_used_quote_number', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_input([
|
||||
'type' => 'number',
|
||||
'name' => 'last_used_quote_number',
|
||||
'id' => 'last_used_quote_number',
|
||||
'class' => 'form-control input-sm required',
|
||||
'value' => $config['last_used_quote_number']
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.quote_default_comments'), 'quote_default_comments', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-5">
|
||||
<?= form_textarea([
|
||||
'name' => 'quote_default_comments',
|
||||
'id' => 'quote_default_comments',
|
||||
'class' => 'form-control input-sm',
|
||||
'value' => $config['quote_default_comments']
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.work_order_enable'), 'work_order_enable', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-1">
|
||||
<?= form_checkbox([
|
||||
'name' => 'work_order_enable',
|
||||
'value' => 'work_order_enable',
|
||||
'id' => 'work_order_enable',
|
||||
'checked' => $config['work_order_enable'] == 1
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.work_order_format'), 'work_order_format', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_input([
|
||||
'name' => 'work_order_format',
|
||||
'id' => 'work_order_format',
|
||||
'class' => 'form-control input-sm',
|
||||
'value' => $config['work_order_format']
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.last_used_work_order_number'), 'last_used_work_order_number', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_input([
|
||||
'type' => 'number',
|
||||
'name' => 'last_used_work_order_number',
|
||||
'id' => 'last_used_work_order_number',
|
||||
'class' => 'form-control input-sm required',
|
||||
'value' => $config['last_used_work_order_number']
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?= form_submit([
|
||||
'name' => 'submit_invoice',
|
||||
'id' => 'submit_invoice',
|
||||
'value' => lang('Common.submit'),
|
||||
'class' => 'btn btn-primary btn-sm pull-right'
|
||||
]) ?>
|
||||
|
||||
</fieldset>
|
||||
<div class="form-check form-switch mb-3">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="invoice_enable" name="invoice_enable" value="invoice_enable" <?= $config['invoice_enable'] == 1 ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="invoice_enable"><?= lang('Config.invoice_enable'); ?></label>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="invoice_type" class="form-label"><?= lang('Config.invoice_type'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-file-code"></i></span>
|
||||
<select class="form-select" name="invoice_type">
|
||||
<?php foreach ($invoice_type_options as $key => $value): ?>
|
||||
<option value="<?= $key ?>" <?= $key == $config['invoice_type'] ? 'selected' : '' ?>><?= $value ?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="recv_invoice_format" class="form-label"><?= lang('Config.recv_invoice_format'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-braces"></i></span>
|
||||
<input type="text" class="form-control" name="recv_invoice_format" id="recv_invoice_format" value="<?= $config['recv_invoice_format']; ?>">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<label for="invoice_default_comments" class="form-label"><?= lang('Config.invoice_default_comments'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-file-text"></i></span>
|
||||
<textarea class="form-control" name="invoice_default_comments" id="invoice_default_comments" rows="10" required><?= $config['invoice_default_comments']; ?></textarea>
|
||||
</div>
|
||||
|
||||
<label for="invoice_email_message" class="form-label"><?= lang('Config.invoice_email_message'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-envelope-paper"></i></span>
|
||||
<textarea class="form-control" name="invoice_email_message" id="invoice_email_message" rows="10" required><?= $config['invoice_email_message']; ?></textarea>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="line_sequence" class="form-label"><?= lang('Config.line_sequence'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-list-ol"></i></span>
|
||||
<select class="form-select" name="line_sequence">
|
||||
<?php foreach ($line_sequence_options as $key => $value): ?>
|
||||
<option value="<?= $key ?>" <?= $key == $config['line_sequence'] ? 'selected' : '' ?>><?= $value ?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="sales_invoice_format" class="form-label"><?= lang('Config.sales_invoice_format'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-braces"></i></span>
|
||||
<input type="text" class="form-control" name="sales_invoice_format" id="sales_invoice_format" value="<?= $config['sales_invoice_format']; ?>">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="last_used_invoice_number" class="form-label"><?= lang('Config.last_used_invoice_number'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-123"></i></span>
|
||||
<input type="number" class="form-control" name="last_used_invoice_number" id="last_used_invoice_number" value="<?= $config['last_used_invoice_number']; ?>">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="sales_quote_format" class="form-label"><?= lang('Config.sales_quote_format'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-braces"></i></span>
|
||||
<input type="text" class="form-control" name="sales_quote_format" id="sales_quote_format" value="<?= $config['sales_quote_format']; ?>">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="last_used_quote_number" class="form-label"><?= lang('Config.last_used_quote_number'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-123"></i></span>
|
||||
<input type="number" class="form-control" name="last_used_quote_number" id="last_used_quote_number" value="<?= $config['last_used_quote_number']; ?>">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<label for="quote_default_comments" class="form-label"><?= lang('Config.quote_default_comments'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-file-text"></i></span>
|
||||
<textarea class="form-control" name="quote_default_comments" id="quote_default_comments" rows="10" required><?= $config['quote_default_comments']; ?></textarea>
|
||||
</div>
|
||||
|
||||
<div class="form-check form-switch mb-3">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="work_order_enable" name="work_order_enable" value="work_order_enable" <?= $config['work_order_enable'] == 1 ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="work_order_enable"><?= lang('Config.work_order_enable'); ?></label>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="work_order_format" class="form-label"><?= lang('Config.work_order_format'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-braces"></i></span>
|
||||
<input type="text" class="form-control" name="work_order_format" id="work_order_format" value="<?= $config['work_order_format']; ?>">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="last_used_work_order_number" class="form-label"><?= lang('Config.last_used_work_order_number'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-123"></i></span>
|
||||
<input type="number" class="form-control" name="last_used_work_order_number" id="last_used_work_order_number" value="<?= $config['last_used_work_order_number']; ?>">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="d-flex justify-content-end">
|
||||
<button class="btn btn-primary" type="submit" name="submit_invoice"><?= lang('Common.submit'); ?></button>
|
||||
</div>
|
||||
|
||||
<?= form_close() ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
@@ -235,6 +177,7 @@
|
||||
},
|
||||
success: function(response) {
|
||||
$.notify({
|
||||
icon: 'bi bi-bell-fill',
|
||||
message: response.message
|
||||
}, {
|
||||
type: response.success ? 'success' : 'danger'
|
||||
|
||||
@@ -4,29 +4,25 @@
|
||||
*/
|
||||
?>
|
||||
|
||||
<?= form_open('', ['id' => 'license_config_form', 'enctype' => 'multipart/form-data', 'class' => 'form-horizontal']) ?>
|
||||
<div id="config_wrapper">
|
||||
<fieldset>
|
||||
<?= form_open('', ['id' => 'license_config_form', 'enctype' => 'multipart/form-data']) ?>
|
||||
|
||||
<?php
|
||||
$counter = 0;
|
||||
foreach ($licenses as $license) {
|
||||
?>
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label($license['title'], 'license', ['class' => 'control-label col-xs-3']) ?>
|
||||
<div class="col-xs-6">
|
||||
<?= form_textarea([
|
||||
'name' => 'license',
|
||||
'id' => 'license_' . $counter++, // TODO: String Interpolation
|
||||
'class' => 'form-control font-monospace',
|
||||
'rows' => '14',
|
||||
'readonly' => '',
|
||||
'value' => $license['text']
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<?php
|
||||
$title_info['config_title'] = lang('Config.license_configuration');
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<?php
|
||||
$license_i = 0;
|
||||
foreach ($licenses as $license) {
|
||||
?>
|
||||
|
||||
<div class="mb-3 mx-3 mx-lg-0">
|
||||
<label for="license_<?= $license_i; ?>" class="form-label"><?= $license['title']; ?></label>
|
||||
<textarea name="license" rows="10" id="license_<?= $license_i; ?>" class="form-control font-monospace" style="font-size: .875rem;" readonly><?= $license['text']; ?></textarea>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
$license_i++; // Increment counter
|
||||
} ?>
|
||||
|
||||
</fieldset>
|
||||
</div>
|
||||
<?= form_close() ?>
|
||||
|
||||
@@ -5,285 +5,246 @@
|
||||
* @var string $controller_name
|
||||
* @var array $config
|
||||
*/
|
||||
|
||||
$beta = '<sup><span class="badge bg-secondary">BETA</span></sup>';
|
||||
?>
|
||||
|
||||
<?= form_open('config/saveLocale/', ['id' => 'locale_config_form', 'class' => 'form-horizontal']) ?>
|
||||
<div id="config_wrapper">
|
||||
<fieldset id="config_info">
|
||||
<?= form_open('config/saveLocale/', ['id' => 'locale_config_form']) ?>
|
||||
|
||||
<div id="required_fields_message"><?= lang('Common.fields_required_message') ?></div>
|
||||
<ul id="locale_error_message_box" class="error_message_box"></ul>
|
||||
<?php
|
||||
$title_info['config_title'] = lang('Config.locale_configuration');
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.number_locale'), 'number_locale', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-1">
|
||||
<?= form_input([
|
||||
'name' => 'number_locale',
|
||||
'id' => 'number_locale',
|
||||
'class' => 'form-control input-sm',
|
||||
'value' => $config['number_locale']
|
||||
]) ?>
|
||||
<?= form_hidden(['name' => 'save_number_locale', 'value' => $config['number_locale']]) ?>
|
||||
</div>
|
||||
<div class="col-xs-2">
|
||||
<label class="control-label">
|
||||
<a href="https://github.com/opensourcepos/opensourcepos/wiki/Localisation-support" target="_blank">
|
||||
<span class="bi bi-info-circle" data-toggle="tooltip" data-placement="right" title="<?= lang('Config.number_locale_tooltip') ?>"></span>
|
||||
</a>
|
||||
<span id="number_locale_example">
|
||||
<?= to_currency(1234567890.12300) ?>
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
<ul id="locale_error_message_box" class="error_message_box"></ul>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12 col-sm-6 col-xxl-3">
|
||||
<label for="number_locale" class="form-label"><?= lang('Config.number_locale') ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-globe-americas"></i></span>
|
||||
<input type="text" class="form-control" name="number_locale" id="number_locale" value="<?= $config['number_locale'] ?>">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.thousands_separator'), 'thousands_separator', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_checkbox([
|
||||
'name' => 'thousands_separator',
|
||||
'id' => 'thousands_separator',
|
||||
'value' => 'thousands_separator',
|
||||
'checked' => $config['thousands_separator'] == 1
|
||||
]) ?>
|
||||
</div>
|
||||
<div class="col-12 col-sm-6 col-xxl-3">
|
||||
<label for="number_locale_example" class="form-label">Localization Example</label>
|
||||
<div class="mb-3" id="number_locale_example">
|
||||
<?= to_currency(1234567890.12300) ?>
|
||||
<a href="https://github.com/opensourcepos/opensourcepos/wiki/Localisation-support" target="_blank" rel="noopener">
|
||||
<i class="bi bi-link-45deg link-secondary" data-bs-toggle="tooltip" title="<?= lang('Config.number_locale_tooltip'); ?>"></i>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.currency_symbol'), 'currency_symbol', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-1">
|
||||
<?= form_input([
|
||||
'name' => 'currency_symbol',
|
||||
'id' => 'currency_symbol',
|
||||
'class' => 'form-control input-sm number_locale',
|
||||
'value' => $config['currency_symbol']
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.currency_code'), 'currency_code', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-1">
|
||||
<?= form_input([
|
||||
'name' => 'currency_code',
|
||||
'id' => 'currency_code',
|
||||
'class' => 'form-control input-sm number_locale',
|
||||
'value' => $currency_code
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.currency_decimals'), 'currency_decimals', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_dropdown(
|
||||
'currency_decimals',
|
||||
[
|
||||
'0' => '0',
|
||||
'1' => '1',
|
||||
'2' => '2'
|
||||
],
|
||||
$config['currency_decimals'],
|
||||
['class' => 'form-control input-sm']
|
||||
) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.tax_decimals'), 'tax_decimals', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_dropdown(
|
||||
'tax_decimals',
|
||||
[
|
||||
'0' => '0',
|
||||
'1' => '1',
|
||||
'2' => '2',
|
||||
'3' => '3',
|
||||
'4' => '4'
|
||||
],
|
||||
$config['tax_decimals'],
|
||||
['class' => 'form-control input-sm']
|
||||
) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.quantity_decimals'), 'quantity_decimals', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_dropdown(
|
||||
'quantity_decimals',
|
||||
[
|
||||
'0' => '0',
|
||||
'1' => '1',
|
||||
'2' => '2',
|
||||
'3' => '3'
|
||||
],
|
||||
$config['quantity_decimals'],
|
||||
['class' => 'form-control input-sm']
|
||||
) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.cash_decimals'), 'cash_decimals', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_dropdown(
|
||||
'cash_decimals',
|
||||
[
|
||||
'-1' => '-1',
|
||||
'0' => '0',
|
||||
'1' => '1',
|
||||
'2' => '2'
|
||||
],
|
||||
$config['cash_decimals'],
|
||||
['class' => 'form-control input-sm']
|
||||
) ?>
|
||||
</div>
|
||||
<div class="col-xs-1">
|
||||
<label class="control-label">
|
||||
<span class="bi bi-info-circle" data-toggle="tooltip" data-placement="right" title="<?= lang('Config.cash_decimals_tooltip') ?>"></span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.cash_rounding'), 'cash_rounding_code', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_dropdown(
|
||||
'cash_rounding_code',
|
||||
$rounding_options,
|
||||
$config['cash_rounding_code'],
|
||||
'class="form-control input-sm"'
|
||||
) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.payment_options_order'), 'payment_options_order', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-4">
|
||||
<?= form_dropdown(
|
||||
'payment_options_order',
|
||||
[
|
||||
'cashdebitcredit' => lang('Sales.cash') . ' / ' . lang('Sales.debit') . ' / ' . lang('Sales.credit'),
|
||||
'debitcreditcash' => lang('Sales.debit') . ' / ' . lang('Sales.credit') . ' / ' . lang('Sales.cash'),
|
||||
'debitcashcredit' => lang('Sales.debit') . ' / ' . lang('Sales.cash') . ' / ' . lang('Sales.credit'),
|
||||
'creditdebitcash' => lang('Sales.credit') . ' / ' . lang('Sales.debit') . ' / ' . lang('Sales.cash'),
|
||||
'creditcashdebit' => lang('Sales.credit') . ' / ' . lang('Sales.cash') . ' / ' . lang('Sales.debit')
|
||||
],
|
||||
$config['payment_options_order'],
|
||||
'class="form-control input-sm"'
|
||||
) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.country_codes'), 'country_codes', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-1">
|
||||
<?= form_input([
|
||||
'name' => 'country_codes',
|
||||
'class' => 'form-control input-sm',
|
||||
'value' => $config['country_codes']
|
||||
]) ?>
|
||||
</div>
|
||||
<div class="col-xs-1">
|
||||
<label class="control-label">
|
||||
<a href="https://wiki.openstreetmap.org/wiki/Nominatim/Country_Codes" target="_blank">
|
||||
<span class="bi bi-info-circle" data-toggle="tooltip" data-placement="right" title="<?= lang('Config.country_codes_tooltip'); ?>"></span>
|
||||
</a>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.language'), 'language', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-4">
|
||||
<?= form_dropdown(
|
||||
'language',
|
||||
get_languages(),
|
||||
current_language_code(true) . ':' . current_language(true),
|
||||
['class' => 'form-control input-sm']
|
||||
) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.timezone'), 'timezone', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-4">
|
||||
<?= form_dropdown(
|
||||
'timezone',
|
||||
get_timezones(),
|
||||
$config['timezone'] ? $config['timezone'] : date_default_timezone_get(),
|
||||
['class' => 'form-control input-sm']
|
||||
) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.datetimeformat'), 'datetimeformat', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-sm-2">
|
||||
<?= form_dropdown(
|
||||
'dateformat',
|
||||
get_dateformats(),
|
||||
$config['dateformat'],
|
||||
['class' => 'form-control input-sm']
|
||||
) ?>
|
||||
</div>
|
||||
<div class="col-sm-2">
|
||||
<?= form_dropdown(
|
||||
'timeformat',
|
||||
get_timeformats(),
|
||||
$config['timeformat'],
|
||||
['class' => 'form-control input-sm']
|
||||
) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.date_or_time_format'), 'date_or_time_format', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_checkbox([
|
||||
'name' => 'date_or_time_format',
|
||||
'id' => 'date_or_time_format',
|
||||
'value' => 'date_or_time_format',
|
||||
'checked' => $config['date_or_time_format'] == 1
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.financial_year'), 'financial_year', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_dropdown(
|
||||
'financial_year',
|
||||
[
|
||||
'1' => lang('Config.financial_year_jan'),
|
||||
'2' => lang('Config.financial_year_feb'),
|
||||
'3' => lang('Config.financial_year_mar'),
|
||||
'4' => lang('Config.financial_year_apr'),
|
||||
'5' => lang('Config.financial_year_may'),
|
||||
'6' => lang('Config.financial_year_jun'),
|
||||
'7' => lang('Config.financial_year_jul'),
|
||||
'8' => lang('Config.financial_year_aug'),
|
||||
'9' => lang('Config.financial_year_sep'),
|
||||
'10' => lang('Config.financial_year_oct'),
|
||||
'11' => lang('Config.financial_year_nov'),
|
||||
'12' => lang('Config.financial_year_dec')
|
||||
],
|
||||
$config['financial_year'],
|
||||
['class' => 'form-control input-sm']
|
||||
) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?= form_submit([
|
||||
'name' => 'submit_locale',
|
||||
'id' => 'submit_locale',
|
||||
'value' => lang('Common.submit'),
|
||||
'class' => 'btn btn-primary btn-sm pull-right'
|
||||
]) ?>
|
||||
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-check form-switch mb-3">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="thousands_separator" name="thousands_separator" value="thousands_separator" <?= $config['thousands_separator'] == 1 ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="thousands_separator"><?= lang('Config.thousands_separator'); ?></label>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12 col-sm-6 col-xxl-3">
|
||||
<label for="currency_symbol" class="form-label"><?= lang('Config.currency_symbol') ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-currency-exchange"></i></span>
|
||||
<input type="text" class="form-control" name="currency_symbol" id="currency_symbol" value="<?= $config['currency_symbol'] ?>">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-sm-6 col-xxl-3">
|
||||
<label for="currency_code" class="form-label"><?= lang('Config.currency_code') ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-cash"></i></span>
|
||||
<input type="text" class="form-control" name="currency_code" id="currency_code" value="<?= $currency_code ?>">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12 col-sm-6 col-xxl-3">
|
||||
<label for="currency_decimals" class="form-label"><?= lang('Config.currency_decimals') ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<label class="input-group-text"><i class="bi bi-coin"></i></label>
|
||||
<select class="form-select" name="currency_decimals">
|
||||
<option value="0" <?= $config['currency_decimals'] == '0' ? 'selected' : '' ?>>0</option>
|
||||
<option value="1" <?= $config['currency_decimals'] == '1' ? 'selected' : '' ?>>1</option>
|
||||
<option value="2" <?= $config['currency_decimals'] == '2' ? 'selected' : '' ?>>2</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-sm-6 col-xxl-3">
|
||||
<label for="tax_decimals" class="form-label"><?= lang('Config.tax_decimals') ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<label class="input-group-text"><i class="bi bi-archive"></i></label>
|
||||
<select class="form-select" name="tax_decimals">
|
||||
<option value="0" <?= $config['tax_decimals'] == '0' ? 'selected' : '' ?>>0</option>
|
||||
<option value="1" <?= $config['tax_decimals'] == '1' ? 'selected' : '' ?>>1</option>
|
||||
<option value="2" <?= $config['tax_decimals'] == '2' ? 'selected' : '' ?>>2</option>
|
||||
<option value="3" <?= $config['tax_decimals'] == '3' ? 'selected' : '' ?>>3</option>
|
||||
<option value="4" <?= $config['tax_decimals'] == '4' ? 'selected' : '' ?>>4</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-sm-6 col-xxl-3">
|
||||
<label for="quantity_decimals" class="form-label"><?= lang('Config.quantity_decimals') ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<label class="input-group-text"><i class="bi bi-123"></i></label>
|
||||
<select class="form-select" name="quantity_decimals">
|
||||
<option value="0" <?= $config['quantity_decimals'] == '0' ? 'selected' : '' ?>>0</option>
|
||||
<option value="1" <?= $config['quantity_decimals'] == '1' ? 'selected' : '' ?>>1</option>
|
||||
<option value="2" <?= $config['quantity_decimals'] == '2' ? 'selected' : '' ?>>2</option>
|
||||
<option value="3" <?= $config['quantity_decimals'] == '3' ? 'selected' : '' ?>>3</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-sm-6 col-xxl-3">
|
||||
<label for="cash_decimals" class="form-label"><?= lang('Config.cash_decimals') ?>
|
||||
<i class="bi bi-info-circle-fill text-secondary" data-bs-toggle="tooltip" title="<?= lang('Config.cash_decimals_tooltip'); ?>"></i>
|
||||
</label>
|
||||
<div class="input-group mb-3">
|
||||
<label class="input-group-text"><i class="bi bi-cash-coin"></i></label>
|
||||
<select class="form-select" name="cash_decimals">
|
||||
<option value="0" <?= $config['cash_decimals'] == '0' ? 'selected' : '' ?>>0</option>
|
||||
<option value="1" <?= $config['cash_decimals'] == '1' ? 'selected' : '' ?>>1</option>
|
||||
<option value="2" <?= $config['cash_decimals'] == '2' ? 'selected' : '' ?>>2</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-sm-6 col-xxl-3">
|
||||
<label for="cash_rounding_code" class="form-label"><?= lang('Config.cash_rounding') ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<label class="input-group-text"><i class="bi bi-arrow-repeat"></i></label>
|
||||
<select class="form-select" name="cash_rounding_code">
|
||||
<?php foreach ($rounding_options as $code => $label): ?>
|
||||
<option value="<?= $code ?>" <?= $config['cash_rounding_code'] == $code ? 'selected' : '' ?>><?= $label ?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="payment_options_order" class="form-label"><?= lang('Config.payment_options_order') ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<label class="input-group-text"><i class="bi bi-credit-card"></i></label>
|
||||
<select class="form-select" name="payment_options_order" id="payment_options_order">
|
||||
<option value="cashdebitcredit" <?= $config['payment_options_order'] == 'cashdebitcredit' ? 'selected' : '' ?>><?= lang('Sales.cash') ?> / <?= lang('Sales.debit') ?> / <?= lang('Sales.credit') ?></option>
|
||||
<option value="debitcreditcash" <?= $config['payment_options_order'] == 'debitcreditcash' ? 'selected' : '' ?>><?= lang('Sales.debit') ?> / <?= lang('Sales.credit') ?> / <?= lang('Sales.cash') ?></option>
|
||||
<option value="debitcashcredit" <?= $config['payment_options_order'] == 'debitcashcredit' ? 'selected' : '' ?>><?= lang('Sales.debit') ?> / <?= lang('Sales.cash') ?> / <?= lang('Sales.credit') ?></option>
|
||||
<option value="creditdebitcash" <?= $config['payment_options_order'] == 'creditdebitcash' ? 'selected' : '' ?>><?= lang('Sales.credit') ?> / <?= lang('Sales.debit') ?> / <?= lang('Sales.cash') ?></option>
|
||||
<option value="creditcashdebit" <?= $config['payment_options_order'] == 'creditcashdebit' ? 'selected' : '' ?>><?= lang('Sales.credit') ?> / <?= lang('Sales.cash') ?> / <?= lang('Sales.debit') ?></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="country_codes" class="form-label">
|
||||
<?= lang('Config.country_codes') ?>
|
||||
<a href="https://wiki.openstreetmap.org/wiki/Nominatim/Country_Codes" target="_blank" rel="noopener">
|
||||
<i class="bi bi-link-45deg text-secondary" data-bs-toggle="tooltip" title="<?= lang('Config.country_codes_tooltip'); ?>"></i>
|
||||
</a>
|
||||
</label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-code"></i></span>
|
||||
<input type="text" class="form-control" name="country_codes" id="country_codes" value="<?= $config['country_codes'] ?>">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="language" class="form-label"><?= lang('Config.language') ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<label class="input-group-text"><i class="bi bi-translate"></i></label>
|
||||
<?= form_dropdown(
|
||||
'language',
|
||||
get_languages(),
|
||||
current_language_code(true) . ':' . current_language(true),
|
||||
['class' => 'form-select']
|
||||
) ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-check form-switch mb-3">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="rtl_language" name="rtl_language" value="rtl_language" <?= $config['rtl_language'] == 1 ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="rtl_language">RTL Language <?= $beta; ?></label>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="timezone" class="form-label"><?= lang('Config.timezone') ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<label class="input-group-text"><i class="bi bi-clock"></i></label>
|
||||
<?= form_dropdown(
|
||||
'timezone',
|
||||
get_timezones(),
|
||||
$config['timezone'] ? $config['timezone'] : date_default_timezone_get(),
|
||||
['class' => 'form-select']
|
||||
) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="datetimeformat" class="form-label"><?= lang('Config.datetimeformat') ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<label class="input-group-text"><i class="bi bi-calendar2"></i></label>
|
||||
<?= form_dropdown(
|
||||
'dateformat',
|
||||
get_dateformats(),
|
||||
$config['dateformat'],
|
||||
['class' => 'form-select']
|
||||
) ?>
|
||||
<?= form_dropdown(
|
||||
'timeformat',
|
||||
get_timeformats(),
|
||||
$config['timeformat'],
|
||||
['class' => 'form-select']
|
||||
) ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-check form-switch mb-3">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="date_or_time_format" name="date_or_time_format" value="date_or_time_format" <?= $config['date_or_time_format'] == 1 ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="date_or_time_format"><?= lang('Config.date_or_time_format'); ?></label>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="financial_year" class="form-label"><?= lang('Config.financial_year') ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<label class="input-group-text"><i class="bi bi-calendar2-month"></i></label>
|
||||
<select class="form-select" name="financial_year" id="financial_year">
|
||||
<option value="1" <?= ($config['financial_year'] == '1' ? 'selected' : ''); ?>><?= lang('Config.financial_year_jan'); ?></option>
|
||||
<option value="2" <?= ($config['financial_year'] == '2' ? 'selected' : ''); ?>><?= lang('Config.financial_year_feb'); ?></option>
|
||||
<option value="3" <?= ($config['financial_year'] == '3' ? 'selected' : ''); ?>><?= lang('Config.financial_year_mar'); ?></option>
|
||||
<option value="4" <?= ($config['financial_year'] == '4' ? 'selected' : ''); ?>><?= lang('Config.financial_year_apr'); ?></option>
|
||||
<option value="5" <?= ($config['financial_year'] == '5' ? 'selected' : ''); ?>><?= lang('Config.financial_year_may'); ?></option>
|
||||
<option value="6" <?= ($config['financial_year'] == '6' ? 'selected' : ''); ?>><?= lang('Config.financial_year_jun'); ?></option>
|
||||
<option value="7" <?= ($config['financial_year'] == '7' ? 'selected' : ''); ?>><?= lang('Config.financial_year_jul'); ?></option>
|
||||
<option value="8" <?= ($config['financial_year'] == '8' ? 'selected' : ''); ?>><?= lang('Config.financial_year_aug'); ?></option>
|
||||
<option value="9" <?= ($config['financial_year'] == '9' ? 'selected' : ''); ?>><?= lang('Config.financial_year_sep'); ?></option>
|
||||
<option value="10" <?= ($config['financial_year'] == '10' ? 'selected' : ''); ?>><?= lang('Config.financial_year_oct'); ?></option>
|
||||
<option value="11" <?= ($config['financial_year'] == '11' ? 'selected' : ''); ?>><?= lang('Config.financial_year_nov'); ?></option>
|
||||
<option value="12" <?= ($config['financial_year'] == '12' ? 'selected' : ''); ?>><?= lang('Config.financial_year_dec'); ?></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="d-flex justify-content-end">
|
||||
<button class="btn btn-primary" type="submit" name="submit_locale"><?= lang('Common.submit'); ?></button>
|
||||
</div>
|
||||
|
||||
<?= form_close() ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
@@ -1,79 +1,203 @@
|
||||
<?= view('partial/header') ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
dialog_support.init("a.modal-dlg");
|
||||
</script>
|
||||
<!-- Scripts only used in Configuration screen -->
|
||||
<script type="text/javascript" src="resources/clipboard/clipboard.min.js"></script>
|
||||
|
||||
<ul class="nav nav-tabs" data-tabs="tabs">
|
||||
<li class="active" role="presentation">
|
||||
<a data-toggle="tab" href="#info_tab" title="<?= lang('Config.info_configuration') ?>"><?= lang('Config.info') ?></a>
|
||||
</li>
|
||||
<li role="presentation">
|
||||
<a data-toggle="tab" href="#general_tab" title="<?= lang('Config.general_configuration') ?>"><?= lang('Config.general') ?></a>
|
||||
</li>
|
||||
<li role="presentation">
|
||||
<a data-toggle="tab" href="#tax_tab" title="<?= lang('Config.tax_configuration') ?>"><?= lang('Config.tax') ?></a>
|
||||
</li>
|
||||
<li role="presentation">
|
||||
<a data-toggle="tab" href="#locale_tab" title="<?= lang('Config.locale_configuration') ?>"><?= lang('Config.locale') ?></a>
|
||||
</li>
|
||||
<li role="presentation">
|
||||
<a data-toggle="tab" href="#barcode_tab" title="<?= lang('Config.barcode_configuration') ?>"><?= lang('Config.barcode') ?></a>
|
||||
</li>
|
||||
<li role="presentation">
|
||||
<a data-toggle="tab" href="#stock_tab" title="<?= lang('Config.location_configuration') ?>"><?= lang('Config.location') ?></a>
|
||||
</li>
|
||||
<li role="presentation">
|
||||
<a data-toggle="tab" href="#receipt_tab" title="<?= lang('Config.receipt_configuration') ?>"><?= lang('Config.receipt') ?></a>
|
||||
</li>
|
||||
<li role="presentation">
|
||||
<a data-toggle="tab" href="#invoice_tab" title="<?= lang('Config.invoice_configuration') ?>"><?= lang('Config.invoice') ?></a>
|
||||
</li>
|
||||
<li role="presentation">
|
||||
<a data-toggle="tab" href="#reward_tab" title="<?= lang('Config.reward_configuration') ?>"><?= lang('Config.reward') ?></a>
|
||||
</li>
|
||||
<li role="presentation">
|
||||
<a data-toggle="tab" href="#table_tab" title="<?= lang('Config.table_configuration') ?>"><?= lang('Config.table') ?></a>
|
||||
</li>
|
||||
<li role="presentation">
|
||||
<a data-toggle="tab" href="#system_tab" title="<?= lang('Config.system_conf') ?>"><?= lang('Config.system_conf') ?></a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="row">
|
||||
<div class="col-lg-3 <?= $config['config_menu_position'] == 'start' ? '' : 'order-lg-2' ?>">
|
||||
<div class="list-group d-none d-lg-block" role="tablist">
|
||||
<button class="list-group-item list-group-item-action text-truncate active" id="info-tab" data-bs-toggle="tab" href="#info" title="<?= lang('Config.info_configuration'); ?>" type="button" role="tab">
|
||||
<i class="bi bi-shop me-2"></i><?= lang('Config.info'); ?>
|
||||
</button>
|
||||
<button type="button" class="list-group-item list-group-item-action text-truncate" id="general-tab" data-bs-toggle="tab" href="#general" title="<?= lang('Config.general_configuration'); ?>" type="button" role="tab">
|
||||
<i class="bi bi-sliders me-2"></i><?= lang('Config.general'); ?>
|
||||
</button>
|
||||
<button type="button" class="list-group-item list-group-item-action text-truncate" id="appearance-tab" data-bs-toggle="tab" href="#appearance" title="Appearance Configuration" type="button" role="tab">
|
||||
<i class="bi bi-eye me-2"></i>Appearance
|
||||
</button>
|
||||
<button type="button" class="list-group-item list-group-item-action text-truncate" id="locale-tab" data-bs-toggle="tab" href="#locale" title="<?= lang('Config.locale_configuration'); ?>" type="button" role="tab">
|
||||
<i class="bi bi-translate me-2"></i><?= lang('Config.locale'); ?>
|
||||
</button>
|
||||
<button type="button" class="list-group-item list-group-item-action text-truncate" id="tax-tab" data-bs-toggle="tab" href="#tax" title="<?= lang('Config.tax_configuration'); ?>" type="button" role="tab">
|
||||
<i class="bi bi-piggy-bank me-2"></i><?= lang('Config.tax'); ?>
|
||||
</button>
|
||||
<button type="button" class="list-group-item list-group-item-action text-truncate" id="barcode-tab" data-bs-toggle="tab" href="#barcode" title="<?= lang('Config.barcode_configuration'); ?>" type="button" role="tab">
|
||||
<i class="bi bi-upc-scan me-2"></i><?= lang('Config.barcode'); ?>
|
||||
</button>
|
||||
<button type="button" class="list-group-item list-group-item-action text-truncate" id="stock-tab" data-bs-toggle="tab" href="#stock" title="<?= lang('Config.location_configuration'); ?>" type="button" role="tab">
|
||||
<i class="bi bi-truck me-2"></i><?= lang('Config.location'); ?>
|
||||
</button>
|
||||
<button type="button" class="list-group-item list-group-item-action text-truncate" id="receipt-tab" data-bs-toggle="tab" href="#receipt" title="<?= lang('Config.receipt_configuration'); ?>" type="button" role="tab">
|
||||
<i class="bi bi-receipt me-2"></i><?= lang('Config.receipt'); ?>
|
||||
</button>
|
||||
<button type="button" class="list-group-item list-group-item-action text-truncate" id="invoice-tab" data-bs-toggle="tab" href="#invoice" title="<?= lang('Config.invoice_configuration'); ?>" type="button" role="tab">
|
||||
<i class="bi bi-file-text me-2"></i><?= lang('Config.invoice'); ?>
|
||||
</button>
|
||||
<button type="button" class="list-group-item list-group-item-action text-truncate" id="reward-tab" data-bs-toggle="tab" href="#reward" title="<?= lang('Config.reward_configuration'); ?>" type="button" role="tab">
|
||||
<i class="bi bi-trophy me-2"></i><?= lang('Config.reward'); ?>
|
||||
</button>
|
||||
<button type="button" class="list-group-item list-group-item-action text-truncate" id="table-tab" data-bs-toggle="tab" href="#table" title="<?= lang('Config.table_configuration'); ?>" type="button" role="tab">
|
||||
<i class="bi bi-cup-straw me-2"></i><?= lang('Config.table'); ?>
|
||||
</button>
|
||||
<button type="button" class="list-group-item list-group-item-action text-truncate" id="email-tab" data-bs-toggle="tab" href="#email" title="<?= lang('Config.email_configuration'); ?>" type="button" role="tab">
|
||||
<i class="bi bi-envelope me-2"></i><?= lang('Config.email'); ?>
|
||||
</button>
|
||||
<button type="button" class="list-group-item list-group-item-action text-truncate" id="message-tab" data-bs-toggle="tab" href="#message" title="<?= lang('Config.message_configuration'); ?>" type="button" role="tab">
|
||||
<i class="bi bi-chat me-2"></i><?= lang('Config.message'); ?>
|
||||
</button>
|
||||
<button type="button" class="list-group-item list-group-item-action text-truncate" id="integrations-tab" data-bs-toggle="tab" href="#integrations" title="<?= lang('Config.integrations_configuration'); ?>" type="button" role="tab">
|
||||
<i class="bi bi-gear-wide-connected me-2"></i><?= lang('Config.integrations'); ?>
|
||||
</button>
|
||||
<button type="button" class="list-group-item list-group-item-action text-truncate" id="system-tab" data-bs-toggle="tab" href="#system" title="<?= lang('Config.system_info'); ?>" type="button" role="tab">
|
||||
<i class="bi bi-info-circle me-2"></i><?= lang('Config.system_info'); ?>
|
||||
</button>
|
||||
<button type="button" class="list-group-item list-group-item-action text-truncate" id="license-tab" data-bs-toggle="tab" href="#license" title="<?= lang('Config.license_configuration'); ?>" type="button" role="tab">
|
||||
<i class="bi bi-journal-check me-2"></i><?= lang('Config.license'); ?>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane fade in active" id="info_tab">
|
||||
<?= view('configs/info_config') ?>
|
||||
<div class="nav dropdown d-lg-none mb-3">
|
||||
<button class="btn btn-primary w-100 dropdown-toggle text-truncate" id="configs-dropdown" data-bs-toggle="dropdown" aria-expanded="false">Select Configuration...</button> <!-- TODO-BS5 translate -->
|
||||
<ul class="dropdown-menu w-100" aria-labelledby="configs-dropdown">
|
||||
<li>
|
||||
<a class="dropdown-item py-2 text-truncate active" id="info-tab" data-bs-toggle="tab" href="#info" role="tab" title="<?= lang('Config.info_configuration'); ?>">
|
||||
<i class="bi bi-shop me-2"></i><?= lang('Config.info'); ?>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item py-2 text-truncate" id="general-tab" data-bs-toggle="tab" href="#general" role="tab" title="<?= lang('Config.general_configuration'); ?>">
|
||||
<i class="bi bi-sliders me-2"></i><?= lang('Config.general'); ?>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item py-2 text-truncate" id="appearance-tab" data-bs-toggle="tab" href="#appearance" role="tab" title="Appearance Configuration">
|
||||
<i class="bi bi-eye me-2"></i>Appearance
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item py-2 text-truncate" id="locale-tab" data-bs-toggle="tab" href="#locale" role="tab" title="<?= lang('Config.locale_configuration'); ?>">
|
||||
<i class="bi bi-translate me-2"></i><?= lang('Config.locale'); ?>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item py-2 text-truncate" id="tax-tab" data-bs-toggle="tab" href="#tax" role="tab" title="<?= lang('Config.tax_configuration'); ?>">
|
||||
<i class="bi bi-piggy-bank me-2"></i><?= lang('Config.tax'); ?>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item py-2 text-truncate" id="barcode-tab" data-bs-toggle="tab" href="#barcode" role="tab" title="<?= lang('Config.barcode_configuration'); ?>">
|
||||
<i class="bi bi-upc-scan me-2"></i><?= lang('Config.barcode'); ?>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item py-2 text-truncate" id="stock-tab" data-bs-toggle="tab" href="#stock" role="tab" title="<?= lang('Config.location_configuration'); ?>">
|
||||
<i class="bi bi-truck me-2"></i><?= lang('Config.location'); ?>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item py-2 text-truncate" id="receipt-tab" data-bs-toggle="tab" href="#receipt" role="tab" title="<?= lang('Config.receipt_configuration'); ?>">
|
||||
<i class="bi bi-receipt me-2"></i><?= lang('Config.receipt'); ?>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item py-2 text-truncate" id="invoice-tab" data-bs-toggle="tab" href="#invoice" role="tab" title="<?= lang('Config.invoice_configuration'); ?>">
|
||||
<i class="bi bi-file-text me-2"></i><?= lang('Config.invoice'); ?>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item py-2 text-truncate" id="reward-tab" data-bs-toggle="tab" href="#reward" role="tab" title="<?= lang('Config.reward_configuration'); ?>">
|
||||
<i class="bi bi-trophy me-2"></i><?= lang('Config.reward'); ?>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item py-2 text-truncate" id="table-tab" data-bs-toggle="tab" href="#table" role="tab" title="<?= lang('Config.table_configuration'); ?>">
|
||||
<i class="bi bi-cup-straw me-2"></i><?= lang('Config.table'); ?>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item py-2 text-truncate" id="email-tab" data-bs-toggle="tab" href="#email" role="tab" title="<?= lang('Config.email_configuration'); ?>">
|
||||
<i class="bi bi-envelope me-2"></i><?= lang('Config.email'); ?>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item py-2 text-truncate" id="message-tab" data-bs-toggle="tab" href="#message" role="tab" title="<?= lang('Config.message_configuration'); ?>">
|
||||
<i class="bi bi-chat me-2"></i><?= lang('Config.message'); ?>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item py-2 text-truncate" id="integrations-tab" data-bs-toggle="tab" href="#integrations" role="tab" title="<?= lang('Config.integrations_configuration'); ?>">
|
||||
<i class="bi bi-gear-wide-connected me-2"></i><?= lang('Config.integrations'); ?>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item py-2 text-truncate" id="system-tab" data-bs-toggle="tab" href="#system" role="tab" title="<?= lang('Config.system_info'); ?>">
|
||||
<i class="bi bi-info-circle me-2"></i><?= lang('Config.system_info'); ?>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item py-2 text-truncate" id="license-tab" data-bs-toggle="tab" href="#license" role="tab" title="<?= lang('Config.license_configuration'); ?>">
|
||||
<i class="bi bi-journal-check me-2"></i><?= lang('Config.license'); ?>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane" id="general_tab">
|
||||
<?= view('configs/general_config') ?>
|
||||
</div>
|
||||
<div class="tab-pane" id="tax_tab">
|
||||
<?= view('configs/tax_config') ?>
|
||||
</div>
|
||||
<div class="tab-pane" id="locale_tab">
|
||||
<?= view('configs/locale_config') ?>
|
||||
</div>
|
||||
<div class="tab-pane" id="barcode_tab">
|
||||
<?= view('configs/barcode_config') ?>
|
||||
</div>
|
||||
<div class="tab-pane" id="stock_tab">
|
||||
<?= view('configs/stock_config') ?>
|
||||
</div>
|
||||
<div class="tab-pane" id="receipt_tab">
|
||||
<?= view('configs/receipt_config') ?>
|
||||
</div>
|
||||
<div class="tab-pane" id="invoice_tab">
|
||||
<?= view('configs/invoice_config') ?>
|
||||
</div>
|
||||
<div class="tab-pane" id="reward_tab">
|
||||
<?= view('configs/reward_config') ?>
|
||||
</div>
|
||||
<div class="tab-pane" id="table_tab">
|
||||
<?= view('configs/table_config') ?>
|
||||
</div>
|
||||
<div class="tab-pane" id="system_tab">
|
||||
<?= view('configs/system_config') ?>
|
||||
|
||||
<div class="col-lg-9 order-lg-1">
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane active" id="info" role="tabpanel" aria-labelledby="info-tab">
|
||||
<?= view('configs/info_config') ?>
|
||||
</div>
|
||||
<div class="tab-pane" id="general" role="tabpanel" aria-labelledby="general-tab">
|
||||
<?= view('configs/general_config') ?>
|
||||
</div>
|
||||
<div class="tab-pane" id="appearance" role="tabpanel" aria-labelledby="appearance-tab">
|
||||
<?= view('configs/appearance_config') ?>
|
||||
</div>
|
||||
<div class="tab-pane" id="locale" role="tabpanel" aria-labelledby="locale-tab">
|
||||
<?= view('configs/locale_config') ?>
|
||||
</div>
|
||||
<div class="tab-pane" id="tax" role="tabpanel" aria-labelledby="tax-tab">
|
||||
<?= view('configs/tax_config') ?>
|
||||
</div>
|
||||
<div class="tab-pane" id="barcode" role="tabpanel" aria-labelledby="barcode-tab">
|
||||
<?= view('configs/barcode_config') ?>
|
||||
</div>
|
||||
<div class="tab-pane" id="stock" role="tabpanel" aria-labelledby="stock-tab">
|
||||
<?= view('configs/stock_config') ?>
|
||||
</div>
|
||||
<div class="tab-pane" id="receipt" role="tabpanel" aria-labelledby="receipt-tab">
|
||||
<?= view('configs/receipt_config') ?>
|
||||
</div>
|
||||
<div class="tab-pane" id="invoice" role="tabpanel" aria-labelledby="invoice-tab">
|
||||
<?= view('configs/invoice_config') ?>
|
||||
</div>
|
||||
<div class="tab-pane" id="reward" role="tabpanel" aria-labelledby="reward-tab">
|
||||
<?= view('configs/reward_config') ?>
|
||||
</div>
|
||||
<div class="tab-pane" id="table" role="tabpanel" aria-labelledby="table-tab">
|
||||
<?= view('configs/table_config') ?>
|
||||
</div>
|
||||
<div class="tab-pane" id="email" role="tabpanel" aria-labelledby="email-tab">
|
||||
<?= view('configs/email_config') ?>
|
||||
</div>
|
||||
<div class="tab-pane" id="message" role="tabpanel" aria-labelledby="message-tab">
|
||||
<?= view('configs/message_config') ?>
|
||||
</div>
|
||||
<div class="tab-pane" id="integrations" role="tabpanel" aria-labelledby="integrations-tab">
|
||||
<?= view('configs/integrations_config') ?>
|
||||
</div>
|
||||
<div class="tab-pane" id="system" role="tabpanel" aria-labelledby="system-tab">
|
||||
<?= view('configs/system_info') ?>
|
||||
</div>
|
||||
<div class="tab-pane" id="license" role="tabpanel" aria-labelledby="license-tab">
|
||||
<?= view('configs/license_config') ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript" src="js/bs-tab_anchor_linking.js"></script>
|
||||
<script type="text/javascript" src="js/bs-validation.js"></script>
|
||||
|
||||
<?= view('partial/footer') ?>
|
||||
|
||||
@@ -5,85 +5,50 @@
|
||||
?>
|
||||
|
||||
<?= form_open('config/saveMessage/', ['id' => 'message_config_form', 'enctype' => 'multipart/form-data', 'class' => 'form-horizontal']) ?>
|
||||
<div id="config_wrapper">
|
||||
<fieldset id="config_info">
|
||||
|
||||
<div id="required_fields_message"><?= lang('Common.fields_required_message') ?></div>
|
||||
<ul id="message_error_message_box" class="error_message_box"></ul>
|
||||
<?php
|
||||
$title_info['config_title'] = lang('Config.message_configuration');
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.msg_uid'), 'msg_uid', ['class' => 'control-label col-xs-2 required']) ?>
|
||||
<div class="col-xs-4">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon input-sm">
|
||||
<i class="bi bi-person"></i>
|
||||
</span>
|
||||
<?= form_input([
|
||||
'name' => 'msg_uid',
|
||||
'id' => 'msg_uid',
|
||||
'class' => 'form-control input-sm required',
|
||||
'value' => $config['msg_uid']
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
<ul id="message_error_message_box" class="error_message_box"></ul>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12 col-lg-6 mb-3">
|
||||
<label for="msg-uid" class="form-label"><?= lang('Config.msg_uid'); ?><sup><span class="badge text-primary"><i class="bi bi-asterisk"></i></span></sup></label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text" id="msg-uid-icon"><i class="bi bi-person"></i></span>
|
||||
<input type="text" class="form-control" id="msg-uid" aria-describedby="msg-uid-icon" required value="<?= $config['msg_uid']; ?>">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.msg_pwd'), 'msg_pwd', ['class' => 'control-label col-xs-2 required']) ?>
|
||||
<div class="col-xs-4">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon input-sm">
|
||||
<i class="bi bi-lock"></i>
|
||||
</span>
|
||||
<?= form_password([
|
||||
'name' => 'msg_pwd',
|
||||
'id' => 'msg_pwd',
|
||||
'class' => 'form-control input-sm required',
|
||||
'value' => $config['msg_pwd']
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6 mb-3">
|
||||
<label for="msg-pwd" class="form-label"><?= lang('Config.msg_pwd'); ?><sup><span class="badge text-primary"><i class="bi bi-asterisk"></i></span></sup></label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text" id="msg-pwd-icon"><i class="bi bi-lock"></i></span>
|
||||
<input type="password" class="form-control" id="msg-pwd" aria-describedby="msg-pwd-icon" required value="<?= $config['msg_pwd']; ?>">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.msg_src'), 'msg_src', ['class' => 'control-label col-xs-2 required']) ?>
|
||||
<div class="col-xs-4">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon input-sm">
|
||||
<i class="bi bi-megaphone"></i>
|
||||
</span>
|
||||
<?= form_input([
|
||||
'name' => 'msg_src',
|
||||
'id' => 'msg_src',
|
||||
'class' => 'form-control input-sm required',
|
||||
'value' => $config['msg_src'] == null ? $config['company'] : $config['msg_src']
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6 mb-3">
|
||||
<label for="msg-src" class="form-label"><?= lang('Config.msg_src'); ?><sup><span class="badge text-primary"><i class="bi bi-asterisk"></i></span></sup></label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text" id="msg-src-icon"><i class="bi bi-megaphone"></i></span>
|
||||
<input type="text" class="form-control" id="msg-src" aria-describedby="msg-src-icon" required value="<?= $config['msg_src'] == null ? $config['company'] : $config['msg_src']; ?>">
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.msg_msg'), 'msg_msg', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-4">
|
||||
<?= form_textarea([
|
||||
'name' => 'msg_msg',
|
||||
'id' => 'msg_msg',
|
||||
'class' => 'form-control input-sm',
|
||||
'value' => $config['msg_msg'],
|
||||
'placeholder' => lang('Config.msg_msg_placeholder')
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?= form_submit([
|
||||
'name' => 'submit_message',
|
||||
'id' => 'submit_message',
|
||||
'value' => lang('Common.submit'),
|
||||
'class' => 'btn btn-primary btn-sm pull-right'
|
||||
]) ?>
|
||||
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<label for="msg-msg" class="form-label"><?= lang('Config.msg_msg'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-chat-quote"></i></span>
|
||||
<textarea class="form-control" name="msg_msg" id="msg-msg" rows="10" placeholder="<?= lang('Config.msg_msg_placeholder'); ?>" value="<?= $config['msg_msg']; ?>"></textarea>
|
||||
</div>
|
||||
|
||||
<div class="d-flex justify-content-end">
|
||||
<button class="btn btn-primary" type="submit" name="submit_message"><?= lang('Common.submit'); ?></button>
|
||||
</div>
|
||||
|
||||
<?= form_close() ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
@@ -3,335 +3,199 @@
|
||||
* @var array $config
|
||||
*/
|
||||
?>
|
||||
<?= form_open('config/saveReceipt/', ['id' => 'receipt_config_form']) ?>
|
||||
|
||||
<?= form_open('config/saveReceipt/', ['id' => 'receipt_config_form', 'class' => 'form-horizontal']) ?>
|
||||
<div id="config_wrapper">
|
||||
<fieldset id="config_info">
|
||||
<?php
|
||||
$title_info['config_title'] = lang('Config.receipt_configuration');
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<div id="required_fields_message"><?= lang('Common.fields_required_message') ?></div>
|
||||
<ul id="receipt_error_message_box" class="error_message_box"></ul>
|
||||
<ul id="receipt_error_message_box" class="error_message_box"></ul>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.receipt_template'), 'receipt_template', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_dropdown(
|
||||
'receipt_template',
|
||||
[
|
||||
'receipt_default' => lang('Config.receipt_default'),
|
||||
'receipt_short' => lang('Config.receipt_short')
|
||||
],
|
||||
$config['receipt_template'],
|
||||
'class="form-control input-sm"'
|
||||
) ?>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="receipt_template" class="form-label"><?= lang('Config.receipt_template'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-file-code"></i></span>
|
||||
<select class="form-select" name="receipt_template">
|
||||
<option value="receipt_default" <?= $config['receipt_template'] == 'receipt_default' ? 'selected' : '' ?>><?= lang('Config.receipt_default') ?></option>
|
||||
<option value="receipt_short" <?= $config['receipt_template'] == 'receipt_short' ? 'selected' : '' ?>><?= lang('Config.receipt_short') ?></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.receipt_font_size'), 'receipt_font_size', ['class' => 'control-label col-xs-2 required']) ?>
|
||||
<div class="col-xs-2">
|
||||
<div class="input-group">
|
||||
<?= form_input([
|
||||
'type' => 'number',
|
||||
'min' => '0',
|
||||
'max' => '20',
|
||||
'name' => 'receipt_font_size',
|
||||
'id' => 'receipt_font_size',
|
||||
'class' => 'form-control input-sm required',
|
||||
'value' => $config['receipt_font_size']
|
||||
]) ?>
|
||||
<span class="input-group-addon input-sm">px</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 col-lg-3">
|
||||
<label for="receipt_font_size" class="form-label"><?= lang('Config.receipt_font_size'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-arrows-angle-expand"></i></span>
|
||||
<input type="number" class="form-control" name="receipt_font_size" id="receipt_font_size" value="<?= $config['receipt_font_size']; ?>">
|
||||
<span class="input-group-text">px</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.print_delay_autoreturn'), 'print_delay_autoreturn', ['class' => 'control-label col-xs-2 required']) ?>
|
||||
<div class="col-xs-2">
|
||||
<div class="input-group">
|
||||
<?= form_input([
|
||||
'type' => 'number',
|
||||
'min' => '0',
|
||||
'max' => '30',
|
||||
'name' => 'print_delay_autoreturn',
|
||||
'id' => 'print_delay_autoreturn',
|
||||
'class' => 'form-control input-sm required',
|
||||
'value' => $config['print_delay_autoreturn']
|
||||
]) ?>
|
||||
<span class="input-group-addon input-sm">s</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 col-lg-3">
|
||||
<label for="print_delay_autoreturn" class="form-label"><?= lang('Config.print_delay_autoreturn'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-stopwatch"></i></span>
|
||||
<input type="number" class="form-control" name="print_delay_autoreturn" id="print_delay_autoreturn" value="<?= $config['print_delay_autoreturn']; ?>">
|
||||
<span class="input-group-text">s</span>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.email_receipt_check_behaviour'), 'email_receipt_check_behaviour', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-8">
|
||||
<label class="radio-inline">
|
||||
<?= form_radio([
|
||||
'name' => 'email_receipt_check_behaviour',
|
||||
'value' => 'always',
|
||||
'checked' => $config['email_receipt_check_behaviour'] == 'always'
|
||||
]) ?>
|
||||
<?= lang('Config.email_receipt_check_behaviour_always') ?>
|
||||
</label>
|
||||
<label class="radio-inline">
|
||||
<?= form_radio([
|
||||
'name' => 'email_receipt_check_behaviour',
|
||||
'value' => 'never',
|
||||
'checked' => $config['email_receipt_check_behaviour'] == 'never'
|
||||
]) ?>
|
||||
<?= lang('Config.email_receipt_check_behaviour_never') ?>
|
||||
</label>
|
||||
<label class="radio-inline">
|
||||
<?= form_radio([
|
||||
'name' => 'email_receipt_check_behaviour',
|
||||
'value' => 'last',
|
||||
'checked' => $config['email_receipt_check_behaviour'] == 'last'
|
||||
]) ?>
|
||||
<?= lang('Config.email_receipt_check_behaviour_last') ?>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.print_receipt_check_behaviour'), 'print_receipt_check_behaviour', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-8">
|
||||
<label class="radio-inline">
|
||||
<?= form_radio([
|
||||
'name' => 'print_receipt_check_behaviour',
|
||||
'value' => 'always',
|
||||
'checked' => $config['print_receipt_check_behaviour'] == 'always'
|
||||
]) ?>
|
||||
<?= lang('Config.print_receipt_check_behaviour_always') ?>
|
||||
</label>
|
||||
<label class="radio-inline">
|
||||
<?= form_radio([
|
||||
'name' => 'print_receipt_check_behaviour',
|
||||
'value' => 'never',
|
||||
'checked' => $config['print_receipt_check_behaviour'] == 'never'
|
||||
]) ?>
|
||||
<?= lang('Config.print_receipt_check_behaviour_never') ?>
|
||||
</label>
|
||||
<label class="radio-inline">
|
||||
<?= form_radio([
|
||||
'name' => 'print_receipt_check_behaviour',
|
||||
'value' => 'last',
|
||||
'checked' => $config['print_receipt_check_behaviour'] == 'last'
|
||||
]) ?>
|
||||
<?= lang('Config.print_receipt_check_behaviour_last') ?>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.receipt_show_company_name'), 'receipt_show_company_name', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-1">
|
||||
<?= form_checkbox([
|
||||
'name' => 'receipt_show_company_name',
|
||||
'value' => 'receipt_show_company_name',
|
||||
'id' => 'receipt_show_company_name',
|
||||
'checked' => $config['receipt_show_company_name'] == 1
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.receipt_show_taxes'), 'receipt_show_taxes', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-1">
|
||||
<?= form_checkbox([
|
||||
'name' => 'receipt_show_taxes',
|
||||
'value' => 'receipt_show_taxes',
|
||||
'id' => 'receipt_show_taxes',
|
||||
'checked' => $config['receipt_show_taxes'] == 1
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.receipt_show_tax_ind'), 'receipt_show_tax_ind', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-1">
|
||||
<?= form_checkbox([
|
||||
'name' => 'receipt_show_tax_ind',
|
||||
'value' => 'receipt_show_tax_ind',
|
||||
'id' => 'receipt_show_tax_ind',
|
||||
'checked' => $config['receipt_show_tax_ind'] == 1
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.receipt_show_total_discount'), 'receipt_show_total_discount', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-1">
|
||||
<?= form_checkbox([
|
||||
'name' => 'receipt_show_total_discount',
|
||||
'value' => 'receipt_show_total_discount',
|
||||
'id' => 'receipt_show_total_discount',
|
||||
'checked' => $config['receipt_show_total_discount'] == 1
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.receipt_show_description'), 'receipt_show_description', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-1">
|
||||
<?= form_checkbox([
|
||||
'name' => 'receipt_show_description',
|
||||
'value' => 'receipt_show_description',
|
||||
'id' => 'receipt_show_description',
|
||||
'checked' => $config['receipt_show_description'] == 1
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.receipt_show_serialnumber'), 'receipt_show_serialnumber', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-1">
|
||||
<?= form_checkbox([
|
||||
'name' => 'receipt_show_serialnumber',
|
||||
'value' => 'receipt_show_serialnumber',
|
||||
'id' => 'receipt_show_serialnumber',
|
||||
'checked' => $config['receipt_show_serialnumber'] == 1
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.print_silently'), 'print_silently', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-1">
|
||||
<?= form_checkbox([
|
||||
'name' => 'print_silently',
|
||||
'id' => 'print_silently',
|
||||
'value' => 'print_silently',
|
||||
'checked' => $config['print_silently'] == 1
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.print_header'), 'print_header', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-1">
|
||||
<?= form_checkbox([
|
||||
'name' => 'print_header',
|
||||
'id' => 'print_header',
|
||||
'value' => 'print_header',
|
||||
'checked' => $config['print_header'] == 1
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.print_footer'), 'print_footer', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-1">
|
||||
<?= form_checkbox([
|
||||
'name' => 'print_footer',
|
||||
'id' => 'print_footer',
|
||||
'value' => 'print_footer',
|
||||
'checked' => $config['print_footer'] == 1
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.receipt_printer'), 'config_receipt_printer', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_dropdown('receipt_printer', [], ' ', 'id="receipt_printer" class="form-control"') ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.invoice_printer'), 'config_invoice_printer', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_dropdown('invoice_printer', [], ' ', 'id="invoice_printer" class="form-control"') ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.takings_printer'), 'config_takings_printer', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_dropdown('takings_printer', [], ' ', 'id="takings_printer" class="form-control"') ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.print_top_margin'), 'print_top_margin', ['class' => 'control-label col-xs-2 required']) ?>
|
||||
<div class="col-xs-2">
|
||||
<div class="input-group">
|
||||
<?= form_input([
|
||||
'type' => 'number',
|
||||
'min' => '0',
|
||||
'max' => '20',
|
||||
'name' => 'print_top_margin',
|
||||
'id' => 'print_top_margin',
|
||||
'class' => 'form-control input-sm required',
|
||||
'value' => $config['print_top_margin']
|
||||
]) ?>
|
||||
<span class="input-group-addon input-sm">px</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.print_left_margin'), 'print_left_margin', ['class' => 'control-label col-xs-2 required']) ?>
|
||||
<div class="col-xs-2">
|
||||
<div class="input-group">
|
||||
<?= form_input([
|
||||
'type' => 'number',
|
||||
'min' => '0',
|
||||
'max' => '20',
|
||||
'name' => 'print_left_margin',
|
||||
'id' => 'print_left_margin',
|
||||
'class' => 'form-control input-sm required',
|
||||
'value' => $config['print_left_margin']
|
||||
]) ?>
|
||||
<span class="input-group-addon input-sm">px</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.print_bottom_margin'), 'print_bottom_margin', ['class' => 'control-label col-xs-2 required']) ?>
|
||||
<div class="col-xs-2">
|
||||
<div class="input-group">
|
||||
<?= form_input([
|
||||
'type' => 'number',
|
||||
'min' => '0',
|
||||
'max' => '20',
|
||||
'name' => 'print_bottom_margin',
|
||||
'id' => 'print_bottom_margin',
|
||||
'class' => 'form-control input-sm required',
|
||||
'value' => $config['print_bottom_margin']
|
||||
]) ?>
|
||||
<span class="input-group-addon input-sm">px</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.print_right_margin'), 'print_right_margin', ['class' => 'control-label col-xs-2 required']) ?>
|
||||
<div class="col-xs-2">
|
||||
<div class="input-group">
|
||||
<?= form_input([
|
||||
'type' => 'number',
|
||||
'min' => '0',
|
||||
'max' => '20',
|
||||
'name' => 'print_right_margin',
|
||||
'id' => 'print_right_margin',
|
||||
'class' => 'form-control input-sm required',
|
||||
'value' => $config['print_right_margin']
|
||||
]) ?>
|
||||
<span class="input-group-addon input-sm">px</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?= form_submit([
|
||||
'name' => 'submit_receipt',
|
||||
'id' => 'submit_receipt',
|
||||
'value' => lang('Common.submit'),
|
||||
'class' => 'btn btn-primary btn-sm pull-right'
|
||||
]) ?>
|
||||
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<label for="email_receipt_check_behaviour" class="form-label"><?= lang('Config.email_receipt_check_behaviour'); ?></label>
|
||||
<div class="row mb-3">
|
||||
<div class="col-12">
|
||||
<div class="form-check form-check-inline">
|
||||
<input class="form-check-input" type="radio" name="email_receipt_check_behaviour" id="email_receipt_check_behaviour_always" value="always" <?= $config['email_receipt_check_behaviour'] == 'always' ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="email_receipt_check_behaviour_always"><?= lang('Config.email_receipt_check_behaviour_always') ?></label>
|
||||
</div>
|
||||
|
||||
<div class="form-check form-check-inline">
|
||||
<input class="form-check-input" type="radio" name="email_receipt_check_behaviour" id="email_receipt_check_behaviour_never" value="never" <?= $config['email_receipt_check_behaviour'] == 'never' ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="email_receipt_check_behaviour_never"><?= lang('Config.email_receipt_check_behaviour_never') ?></label>
|
||||
</div>
|
||||
|
||||
<div class="form-check form-check-inline">
|
||||
<input class="form-check-input" type="radio" name="email_receipt_check_behaviour" id="email_receipt_check_behaviour_last" value="last" <?= $config['email_receipt_check_behaviour'] == 'last' ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="email_receipt_check_behaviour_last"><?= lang('Config.email_receipt_check_behaviour_last') ?></label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<label for="print_receipt_check_behaviour" class="form-label"><?= lang('Config.print_receipt_check_behaviour'); ?></label>
|
||||
<div class="row mb-3">
|
||||
<div class="col-12">
|
||||
<div class="form-check form-check-inline">
|
||||
<input class="form-check-input" type="radio" name="print_receipt_check_behaviour" id="print_receipt_check_behaviour_always" value="always" <?= $config['print_receipt_check_behaviour'] == 'always' ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="print_receipt_check_behaviour_always"><?= lang('Config.print_receipt_check_behaviour_always') ?></label>
|
||||
</div>
|
||||
|
||||
<div class="form-check form-check-inline">
|
||||
<input class="form-check-input" type="radio" name="print_receipt_check_behaviour" id="print_receipt_check_behaviour_never" value="never" <?= $config['print_receipt_check_behaviour'] == 'never' ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="print_receipt_check_behaviour_never"><?= lang('Config.print_receipt_check_behaviour_never') ?></label>
|
||||
</div>
|
||||
|
||||
<div class="form-check form-check-inline">
|
||||
<input class="form-check-input" type="radio" name="print_receipt_check_behaviour" id="print_receipt_check_behaviour_last" value="last" <?= $config['print_receipt_check_behaviour'] == 'last' ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="print_receipt_check_behaviour_last"><?= lang('Config.print_receipt_check_behaviour_last') ?></label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-check form-switch mb-3">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="receipt_show_company_name" name="receipt_show_company_name" value="receipt_show_company_name" <?= $config['receipt_show_company_name'] == 1 ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="receipt_show_company_name"><?= lang('Config.receipt_show_company_name'); ?></label>
|
||||
</div>
|
||||
|
||||
<div class="form-check form-switch mb-3">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="receipt_show_taxes" name="receipt_show_taxes" value="receipt_show_taxes" <?= $config['receipt_show_taxes'] == 1 ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="receipt_show_taxes"><?= lang('Config.receipt_show_taxes'); ?></label>
|
||||
</div>
|
||||
|
||||
<div class="form-check form-switch mb-3">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="receipt_show_tax_ind" name="receipt_show_tax_ind" value="receipt_show_tax_ind" <?= $config['receipt_show_tax_ind'] == 1 ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="receipt_show_tax_ind"><?= lang('Config.receipt_show_tax_ind'); ?></label>
|
||||
</div>
|
||||
|
||||
<div class="form-check form-switch mb-3">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="receipt_show_total_discount" name="receipt_show_total_discount" value="receipt_show_total_discount" <?= $config['receipt_show_total_discount'] == 1 ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="receipt_show_total_discount"><?= lang('Config.receipt_show_total_discount'); ?></label>
|
||||
</div>
|
||||
|
||||
<div class="form-check form-switch mb-3">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="receipt_show_description" name="receipt_show_description" value="receipt_show_description" <?= $config['receipt_show_description'] == 1 ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="receipt_show_description"><?= lang('Config.receipt_show_description'); ?></label>
|
||||
</div>
|
||||
|
||||
<div class="form-check form-switch mb-3">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="receipt_show_serialnumber" name="receipt_show_serialnumber" value="receipt_show_serialnumber" <?= $config['receipt_show_serialnumber'] == 1 ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="receipt_show_serialnumber"><?= lang('Config.receipt_show_serialnumber'); ?></label>
|
||||
</div>
|
||||
|
||||
<div class="form-check form-switch mb-3">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="print_silently" name="print_silently" value="print_silently" <?= $config['print_silently'] == 1 ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="print_silently"><?= lang('Config.print_silently'); ?></label>
|
||||
</div>
|
||||
|
||||
<div class="form-check form-switch mb-3">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="print_header" name="print_header" value="print_header" <?= $config['print_header'] == 1 ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="print_header"><?= lang('Config.print_header'); ?></label>
|
||||
</div>
|
||||
|
||||
<div class="form-check form-switch mb-3">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="print_footer" name="print_footer" value="print_footer" <?= $config['print_footer'] == 1 ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="print_footer"><?= lang('Config.print_footer'); ?></label>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="receipt_printer" class="form-label"><?= lang('Config.receipt_printer'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-printer"></i></span>
|
||||
<select class="form-select" name="receipt_printer" id="receipt_printer"></select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="invoice_printer" class="form-label"><?= lang('Config.invoice_printer'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-printer"></i></span>
|
||||
<select class="form-select" name="invoice_printer" id="invoice_printer"></select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="takings_printer" class="form-label"><?= lang('Config.takings_printer'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-printer"></i></span>
|
||||
<select class="form-select" name="takings_printer" id="takings_printer"></select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-6 col-lg-3">
|
||||
<label for="print_top_margin" class="form-label"><?= lang('Config.print_top_margin'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-arrow-bar-down"></i></span>
|
||||
<input type="number" class="form-control" name="print_top_margin" id="print_top_margin" value="<?= $config['print_top_margin']; ?>">
|
||||
<span class="input-group-text">px</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-6 col-lg-3">
|
||||
<label for="print_left_margin" class="form-label"><?= lang('Config.print_left_margin'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-arrow-bar-right"></i></span>
|
||||
<input type="number" class="form-control" name="print_left_margin" id="print_left_margin" value="<?= $config['print_left_margin']; ?>">
|
||||
<span class="input-group-text">px</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-6 col-lg-3">
|
||||
<label for="print_bottom_margin" class="form-label"><?= lang('Config.print_bottom_margin'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-arrow-bar-up"></i></span>
|
||||
<input type="number" class="form-control" name="print_bottom_margin" id="print_bottom_margin" value="<?= $config['print_bottom_margin']; ?>">
|
||||
<span class="input-group-text">px</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-6 col-lg-3">
|
||||
<label for="print_right_margin" class="form-label"><?= lang('Config.print_right_margin'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-arrow-bar-left"></i></span>
|
||||
<input type="number" class="form-control" name="print_right_margin" id="print_right_margin" value="<?= $config['print_right_margin']; ?>">
|
||||
<span class="input-group-text">px</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="d-flex justify-content-end">
|
||||
<button class="btn btn-primary" type="submit" name="submit_receipt"><?= lang('Common.submit'); ?></button>
|
||||
</div>
|
||||
|
||||
<?= form_close() ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
@@ -370,6 +234,7 @@
|
||||
},
|
||||
success: function(response) {
|
||||
$.notify({
|
||||
icon: 'bi bi-bell-fill',
|
||||
message: response.message
|
||||
}, {
|
||||
type: response.success ? 'success' : 'danger'
|
||||
|
||||
@@ -4,39 +4,28 @@
|
||||
* @var array $config
|
||||
*/
|
||||
?>
|
||||
<?= form_open('config/saveRewards/', ['id' => 'reward_config_form']) ?>
|
||||
|
||||
<?= form_open('config/saveRewards/', ['id' => 'reward_config_form', 'class' => 'form-horizontal']) ?>
|
||||
<div id="config_wrapper">
|
||||
<fieldset id="config_info">
|
||||
<?php
|
||||
$title_info['config_title'] = lang('Config.reward_configuration');
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<div id="required_fields_message"><?= lang('Common.fields_required_message') ?></div>
|
||||
<ul id="reward_error_message_box" class="error_message_box"></ul>
|
||||
<ul id="reward_error_message_box" class="error_message_box"></ul>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.customer_reward_enable'), 'customer_reward_enable', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-1">
|
||||
<?= form_checkbox([
|
||||
'name' => 'customer_reward_enable',
|
||||
'value' => 'customer_reward_enable',
|
||||
'id' => 'customer_reward_enable',
|
||||
'checked' => $config['customer_reward_enable'] == 1
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="customer_rewards">
|
||||
<?= view('partial/customer_rewards', ['customer_rewards' => $customer_rewards]) ?>
|
||||
</div>
|
||||
|
||||
<?= form_submit([
|
||||
'name' => 'submit_reward',
|
||||
'id' => 'submit_reward',
|
||||
'value' => lang('Common.submit'),
|
||||
'class' => 'btn btn-primary btn-sm pull-right'
|
||||
]) ?>
|
||||
|
||||
</fieldset>
|
||||
<div class="form-check form-switch mb-3">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="customer_reward_enable" name="customer_reward_enable" value="customer_reward_enable" <?= $config['customer_reward_enable'] == 1 ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="customer_reward_enable"><?= lang('Config.customer_reward_enable'); ?></label>
|
||||
</div>
|
||||
|
||||
<div class="row" id="customer_rewards">
|
||||
<?= view('partial/customer_rewards', ['customer_rewards' => $customer_rewards]) ?>
|
||||
</div>
|
||||
|
||||
<div class="d-flex justify-content-end">
|
||||
<button class="btn btn-primary" type="submit" name="submit_reward"><?= lang('Common.submit'); ?></button>
|
||||
</div>
|
||||
|
||||
<?= form_close() ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
@@ -119,6 +108,7 @@
|
||||
},
|
||||
success: function(response) {
|
||||
$.notify({
|
||||
icon: 'bi bi-bell-fill',
|
||||
message: response.message
|
||||
}, {
|
||||
type: response.success ? 'success' : 'danger'
|
||||
|
||||
@@ -3,27 +3,23 @@
|
||||
* @var array $stock_locations
|
||||
*/
|
||||
?>
|
||||
<?= form_open('config/saveLocations/', ['id' => 'location_config_form']) ?>
|
||||
|
||||
<?= form_open('config/saveLocations/', ['id' => 'location_config_form', 'class' => 'form-horizontal']) ?>
|
||||
<div id="config_wrapper">
|
||||
<fieldset id="config_info">
|
||||
<?php
|
||||
$title_info['config_title'] = lang('Config.location_configuration');
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<div id="required_fields_message"><?= lang('Common.fields_required_message') ?></div>
|
||||
<ul id="stock_error_message_box" class="error_message_box"></ul>
|
||||
<ul id="stock_error_message_box" class="error_message_box"></ul>
|
||||
|
||||
<div id="stock_locations">
|
||||
<?= view('partial/stock_locations', ['stock_locations' => $stock_locations]) ?>
|
||||
</div>
|
||||
|
||||
<?= form_submit([
|
||||
'name' => 'submit_stock',
|
||||
'id' => 'submit_stock',
|
||||
'value' => lang('Common.submit'),
|
||||
'class' => 'btn btn-primary btn-sm pull-right'
|
||||
]) ?>
|
||||
|
||||
</fieldset>
|
||||
<div id="stock_locations">
|
||||
<?= view('partial/stock_locations', ['stock_locations' => $stock_locations]) ?>
|
||||
</div>
|
||||
|
||||
<div class="d-flex justify-content-end">
|
||||
<button class="btn btn-primary" type="submit" name="submit_stock"><?= lang('Common.submit'); ?></button>
|
||||
</div>
|
||||
|
||||
<?= form_close() ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
@@ -79,6 +75,7 @@
|
||||
$(form).ajaxSubmit({
|
||||
success: function(response) {
|
||||
$.notify({
|
||||
icon: 'bi bi-bell-fill',
|
||||
message: response.message
|
||||
}, {
|
||||
type: response.success ? 'success' : 'danger'
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
<br>
|
||||
<div class="container-fluid">
|
||||
<ul class="nav nav-tabs" id="myTabs" data-toggle="tab">
|
||||
<li class="active"><a href="#system_tabs" data-toggle="tab" title="<?= lang('Config.system_conf') ?>"><?= lang('Config.system_conf') ?></a></li>
|
||||
<li><a href="#email_tabs" data-toggle="tab" title="<?= lang('Config.email_configuration') ?>"><?= lang('Config.email') ?></a></li>
|
||||
<li><a href="#message_tabs" data-toggle="tab" title="<?= lang('Config.message_configuration') ?>"><?= lang('Config.message') ?></a></li>
|
||||
<li><a href="#integrations_tabs" data-toggle="tab" title="<?= lang('Config.integrations_configuration') ?>"><?= lang('Config.integrations') ?></a></li>
|
||||
<li><a href="#license_tabs" data-toggle="tab" title="<?= lang('Config.license_configuration') ?>"><?= lang('Config.license') ?></a></li>
|
||||
</ul>
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane active" id="system_tabs"><?= view('configs/system_info') ?></div>
|
||||
<div class="tab-pane" id="email_tabs"><?= view('configs/email_config') ?></div>
|
||||
<div class="tab-pane" id="message_tabs"><?= view('configs/message_config') ?></div>
|
||||
<div class="tab-pane" id="integrations_tabs"><?= view('configs/integrations_config') ?></div>
|
||||
<div class="tab-pane" id="license_tabs"><br><?= view('configs/license_config') ?></div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,55 +1,102 @@
|
||||
<?php
|
||||
|
||||
use Config\OSPOS;
|
||||
|
||||
/**
|
||||
* @var string $dbVersion
|
||||
* @var array $config
|
||||
*/
|
||||
|
||||
use Config\OSPOS;
|
||||
|
||||
$logs = WRITEPATH . 'logs/';
|
||||
$uploads = FCPATH . 'uploads/';
|
||||
$images = FCPATH . 'uploads/item_pics/';
|
||||
$importCustomers = WRITEPATH . '/uploads/importCustomers.csv'; //TODO: This variable does not follow naming conventions for the project.
|
||||
$bullet = '»' . ' ';
|
||||
$divider = ' ·' . ' ';
|
||||
$enabled = '<span class="text-success">✓ Enabled</span>';
|
||||
$disabled = '<span class="text-danger">✗ Disabled</span>';
|
||||
$writable = '<span class="text-success">✓ Writable</span>';
|
||||
$notwritable = '<span class="text-danger">✗ Not Writable</span>';
|
||||
$readable = '<span class="text-success">✓ Readable</span>';
|
||||
$notreadable = '<span class="text-danger">✗ Not Readable</span>';
|
||||
$permissions_check = '<span class="text-success">✓ Security Check Passed</span>';
|
||||
$permissions_fail = '<span class="text-danger">✗ Vulnerable or Incorrect Permissions</span>';
|
||||
?>
|
||||
|
||||
<style>
|
||||
a:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
<?php
|
||||
$title_info['config_title'] = lang('Config.system_info');
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
hidden {
|
||||
visibility: hidden;
|
||||
}
|
||||
</style>
|
||||
<div class="mb-3"><?= lang('Config.server_notice'); ?></div>
|
||||
|
||||
<script type="text/javascript" src="js/clipboard.min.js"></script>
|
||||
<form id="copy-issue">
|
||||
|
||||
<div id="config_wrapper" class="col-sm-12">
|
||||
<?= lang('Config.server_notice') ?>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-sm-2" style="text-align: left;"><br>
|
||||
<strong>
|
||||
<p style="min-height: 14.7em;">General Info</p>
|
||||
<p style="min-height: 10.5em;">User Setup</p><br>
|
||||
<p>Permissions</p>
|
||||
</strong>
|
||||
<?php
|
||||
if (!((substr(decoct(fileperms($logs)), -4) == 750)
|
||||
&& (substr(decoct(fileperms($uploads)), -4) == 750)
|
||||
&& (substr(decoct(fileperms($images)), -4) == 750)
|
||||
&& ((substr(decoct(fileperms($importCustomers)), -4) == 640)
|
||||
|| (substr(decoct(fileperms($importCustomers)), -4) == 660)))) {
|
||||
echo '<div class="card border-danger-subtle mb-4">
|
||||
<div class="card-header bg-danger-subtle border-danger-subtle fw-bold"><i class="bi bi-exclamation-circle"></i> ' . lang('Config.security_issue') . '</div>
|
||||
<div class="card-body">
|
||||
<p class="card-text">' . lang('Config.perm_risk') . '</p>
|
||||
<ul class="list-unstyled mb-0">';
|
||||
}
|
||||
if (substr(decoct(fileperms($logs)), -4) != 750) {
|
||||
echo '<li class="card-text">' . $bullet . '<code>writable/logs</code> ' . lang('Config.is_writable') . '</li>';
|
||||
}
|
||||
|
||||
if (substr(decoct(fileperms($uploads)), -4) != 750) {
|
||||
echo '<li class="card-text">' . $bullet . '<code>public/uploads</code> ' . lang('Config.is_writable') . '</li>';
|
||||
}
|
||||
|
||||
if (substr(decoct(fileperms($images)), -4) != 750) {
|
||||
echo '<li class="card-text">' . $bullet . '<code>public/uploads/item_pics</code> ' . lang('Config.is_writable') . '</li>';
|
||||
}
|
||||
|
||||
if (!((substr(decoct(fileperms($importCustomers)), -4) == 640)
|
||||
|| (substr(decoct(fileperms($importCustomers)), -4) == 660))) {
|
||||
echo '<li class="card-text">' . $bullet . '<code>importCustomers.csv</code> ' . lang('Config.is_readable') . '</li>';
|
||||
}
|
||||
echo '</div></div>';
|
||||
?>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="general-info" class="col-12 col-lg-2 form-label fw-bold">General Info</label>
|
||||
<div class="col-12 col-lg-10" id="general-info">
|
||||
<?= lang('Config.ospos_info') . ': ' . esc(config('App')->application_version) . ' - ' . esc(substr(config(OSPOS::class)->commit_sha1, 0, 6)); ?><br>
|
||||
<div>Language Code: <?= current_language_code(); ?></div><br>
|
||||
<div id="time-error" class="row mb-3 d-none">
|
||||
<div class="col-12 text-danger"><?= lang('Config.timezone_error'); ?></div>
|
||||
<div class="col-6">
|
||||
<label for="timezone"><?= lang('Config.user_timezone'); ?></label>
|
||||
<div id="timezone"></div>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<label for="ostimezone"><?= lang('Config.os_timezone'); ?></label>
|
||||
<div id="ostimezone"><?= $config['timezone']; ?></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-8" id="issuetemplate" style="text-align: left;"><br>
|
||||
<?= lang('Config.ospos_info') . ':' ?>
|
||||
<?= esc(config('App')->application_version) ?> - <?= esc(substr(config(OSPOS::class)->commit_sha1, 0, 6)) ?><br>
|
||||
Language Code: <?= current_language_code() ?><br><br>
|
||||
<div id="TimeError"></div>
|
||||
Extensions & Modules:<br>
|
||||
<?php
|
||||
echo "» GD: ", extension_loaded('gd') ? '<span style="color: green;">Enabled ✓</span>' : '<span style="color: red;">Disabled ✗</span>', '<br>';
|
||||
echo "» BC Math: ", extension_loaded('bcmath') ? '<span style="color: green;">Enabled ✓</span>' : '<span style="color: red">Disabled ✗</span>', '<br>';
|
||||
echo "» INTL: ", extension_loaded('intl') ? '<span style="color: green;">Enabled ✓</span>' : '<span style="color: red">Disabled ✗</span>', '<br>';
|
||||
echo "» OpenSSL: ", extension_loaded('openssl') ? '<span style="color: green;">Enabled ✓</span>' : '<span style="color: red">Disabled ✗</span>', '<br>';
|
||||
echo "» MBString: ", extension_loaded('mbstring') ? '<span style="color: green;">Enabled ✓</span>' : '<span style="color: red">Disabled ✗</span>', '<br>';
|
||||
echo "» Curl: ", extension_loaded('curl') ? '<span style="color: green;">Enabled ✓</span>' : '<span style="color: red">Disabled ✗</span>', '<br>';
|
||||
echo "» Json: ", extension_loaded('json') ? '<span style="color: green;">Enabled ✓</span>' : '<span style="color: red">Disabled ✗</span>', '<br><br>';
|
||||
echo "» Xml: ", extension_loaded('xml') ? '<span style="color: green;">Enabled ✓</span>' : '<span style="color: red">Disabled ✗</span>', '<br><br>';
|
||||
?>
|
||||
User Configuration:<br>
|
||||
.Browser:
|
||||
<?php
|
||||
<span>Extensions & Modules:</span><br>
|
||||
<ul class="list-unstyled">
|
||||
<li><?= $bullet . 'GD: ', extension_loaded('gd') ? $enabled : $disabled; ?></li>
|
||||
<li><?= $bullet . 'BC Math: ', extension_loaded('bcmath') ? $enabled : $disabled; ?></li>
|
||||
<li><?= $bullet . 'INTL: ', extension_loaded('intl') ? $enabled : $disabled; ?></li>
|
||||
<li><?= $bullet . 'OpenSSL: ', extension_loaded('openssl') ? $enabled : $disabled; ?></li>
|
||||
<li><?= $bullet . 'MBString: ', extension_loaded('mbstring') ? $enabled : $disabled; ?></li>
|
||||
<li><?= $bullet . 'Curl: ', extension_loaded('curl') ? $enabled : $disabled; ?></li>
|
||||
<li><?= $bullet . 'Xml: ', extension_loaded('xml') ? $enabled : $disabled; ?></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="user-setup" class="col-12 col-lg-2 form-label fw-bold">User Setup</label>
|
||||
<div class="col-12 col-lg-10" id="user-setup">
|
||||
<ul class="list-unstyled">
|
||||
<?php
|
||||
/**
|
||||
* @param string $userAgent
|
||||
* @return string
|
||||
@@ -57,162 +104,169 @@ use Config\OSPOS;
|
||||
function getBrowserNameAndVersion(string $userAgent): string
|
||||
{
|
||||
$browser = match (true) {
|
||||
strpos($userAgent, 'Opera') !== false || strpos($userAgent, 'OPR/') !== false => 'Opera',
|
||||
strpos($userAgent, 'Edge') !== false => 'Edge',
|
||||
strpos($userAgent, 'Chrome') !== false => 'Chrome',
|
||||
strpos($userAgent, 'Safari') !== false => 'Safari',
|
||||
strpos($userAgent, 'Opera') !== false || strpos($userAgent, 'OPR/') !== false => 'Opera',
|
||||
strpos($userAgent, 'Edge') !== false => 'Edge',
|
||||
strpos($userAgent, 'Chrome') !== false => 'Chrome',
|
||||
strpos($userAgent, 'Safari') !== false => 'Safari',
|
||||
strpos($userAgent, 'Firefox') !== false => 'Firefox',
|
||||
strpos($userAgent, 'MSIE') !== false || strpos($userAgent, 'Trident/7') !== false => 'Internet Explorer',
|
||||
default => 'Other',
|
||||
strpos($userAgent, 'MSIE') !== false || strpos($userAgent, 'Trident/7') !== false => 'Internet Explorer',
|
||||
default => 'Other',
|
||||
};
|
||||
|
||||
$version = match ($browser) {
|
||||
'Opera' => preg_match('/(Opera|OPR)\/([0-9.]+)/', $userAgent, $matches) ? $matches[2] : '',
|
||||
'Edge' => preg_match('/Edge\/([0-9.]+)/', $userAgent, $matches) ? $matches[1] : '',
|
||||
'Chrome' => preg_match('/Chrome\/([0-9.]+)/', $userAgent, $matches) ? $matches[1] : '',
|
||||
'Safari' => preg_match('/Version\/([0-9.]+)/', $userAgent, $matches) ? $matches[1] : '',
|
||||
'Firefox' => preg_match('/Firefox\/([0-9.]+)/', $userAgent, $matches) ? $matches[1] : '',
|
||||
'Opera' => preg_match('/(Opera|OPR)\/([0-9.]+)/', $userAgent, $matches) ? $matches[2] : '',
|
||||
'Edge' => preg_match('/Edge\/([0-9.]+)/', $userAgent, $matches) ? $matches[1] : '',
|
||||
'Chrome' => preg_match('/Chrome\/([0-9.]+)/', $userAgent, $matches) ? $matches[1] : '',
|
||||
'Safari' => preg_match('/Version\/([0-9.]+)/', $userAgent, $matches) ? $matches[1] : '',
|
||||
'Firefox' => preg_match('/Firefox\/([0-9.]+)/', $userAgent, $matches) ? $matches[1] : '',
|
||||
'Internet Explorer' => preg_match('/(MSIE|rv:)([0-9.]+)/', $userAgent, $matches) ? $matches[2] : '',
|
||||
default => '',
|
||||
default => '',
|
||||
};
|
||||
|
||||
return $browser . ($version ? ' ' . $version : '');
|
||||
}
|
||||
echo esc(getBrowserNameAndVersion($_SERVER['HTTP_USER_AGENT']));
|
||||
?><br>
|
||||
Server Software: <?= esc($_SERVER['SERVER_SOFTWARE']) ?><br>
|
||||
PHP Version: <?= PHP_VERSION ?><br>
|
||||
DB Version: <?= esc($dbVersion) ?><br>
|
||||
Server Port: <?= esc($_SERVER['SERVER_PORT']) ?><br>
|
||||
OS: <?= php_uname('s') . ' ' . php_uname('r') ?><br><br>
|
||||
<br><br>
|
||||
|
||||
File Permissions:<br>
|
||||
» [writable/logs:]
|
||||
<?php $logs = WRITEPATH . 'logs/';
|
||||
$uploads = FCPATH. 'uploads/';
|
||||
$images = FCPATH. 'uploads/item_pics/';
|
||||
$importCustomers = WRITEPATH . '/uploads/importCustomers.csv'; // TODO: This variable does not follow naming conventions for the project.
|
||||
|
||||
if (is_writable($logs)) {
|
||||
echo ' - ' . substr(sprintf("%o", fileperms($logs)), -4) . ' | ' . '<span style="color: green;"> Writable ✓ </span>';
|
||||
} else {
|
||||
echo ' - ' . substr(sprintf("%o", fileperms($logs)), -4) . ' | ' . '<span style="color: red;"> Not Writable ✗ </span>';
|
||||
}
|
||||
|
||||
clearstatcache();
|
||||
if (is_writable($logs) && substr(decoct(fileperms($logs)), -4) != 750) {
|
||||
echo ' | <span style="color: red;">Vulnerable or Incorrect Permissions ✗</span>';
|
||||
} else {
|
||||
echo ' | <span style="color: green;">Security Check Passed ✓</span>';
|
||||
}
|
||||
clearstatcache();
|
||||
?>
|
||||
<br>
|
||||
» [public/uploads:]
|
||||
<?php
|
||||
if (is_writable($uploads)) {
|
||||
echo ' - ' . substr(sprintf("%o", fileperms($uploads)), -4) . ' | ' . '<span style="color: green;"> Writable ✓ </span>';
|
||||
} else {
|
||||
echo ' - ' . substr(sprintf("%o", fileperms($uploads)), -4) . ' | ' . '<span style="color: red;"> Not Writable ✗ </span>';
|
||||
}
|
||||
|
||||
clearstatcache();
|
||||
|
||||
if (is_writable($uploads) && substr(decoct(fileperms($uploads)), -4) != 750) {
|
||||
echo ' | <span style="color: red;">Vulnerable or Incorrect Permissions ✗</span>';
|
||||
} else {
|
||||
echo ' | <span style="color: green;">Security Check Passed ✓ </span>';
|
||||
}
|
||||
|
||||
clearstatcache();
|
||||
?>
|
||||
<br>
|
||||
» [public/uploads/item_pics:]
|
||||
<?php
|
||||
if (is_writable($images)) {
|
||||
echo ' - ' . substr(sprintf("%o", fileperms($images)), -4) . ' | ' . '<span style="color: green;"> Writable ✓ </span>';
|
||||
} else {
|
||||
echo ' - ' . substr(sprintf("%o", fileperms($images)), -4) . ' | ' . '<span style="color: red;"> Not Writable ✗ </span>';
|
||||
}
|
||||
|
||||
clearstatcache();
|
||||
|
||||
if (substr(decoct(fileperms($images)), -4) != 750) {
|
||||
echo ' | <span style="color: red;">Vulnerable or Incorrect Permissions ✗</span>';
|
||||
} else {
|
||||
echo ' | <span style="color: green;">Security Check Passed ✓ </span>';
|
||||
}
|
||||
|
||||
clearstatcache();
|
||||
?>
|
||||
<br>
|
||||
» [importCustomers.csv:]
|
||||
<?php
|
||||
if (is_readable($importCustomers)) {
|
||||
echo ' - ' . substr(sprintf("%o", fileperms($importCustomers)), -4) . ' | ' . '<span style="color: green;"> Readable ✓ </span>';
|
||||
} else {
|
||||
echo ' - ' . substr(sprintf("%o", fileperms($importCustomers)), -4) . ' | ' . '<span style="color: red;"> Not Readable ✗ </span>';
|
||||
}
|
||||
clearstatcache();
|
||||
|
||||
if (!((substr(decoct(fileperms($importCustomers)), -4) == 640) || (substr(decoct(fileperms($importCustomers)), -4) == 660))) {
|
||||
echo ' | <span style="color: red;">Vulnerable or Incorrect Permissions ✗</span>';
|
||||
} else {
|
||||
echo ' | <span style="color: green;">Security Check Passed ✓ </span>';
|
||||
}
|
||||
clearstatcache();
|
||||
?>
|
||||
<br>
|
||||
<?php
|
||||
if (!((substr(decoct(fileperms($logs)), -4) == 750)
|
||||
&& (substr(decoct(fileperms($uploads)), -4) == 750)
|
||||
&& (substr(decoct(fileperms($images)), -4) == 750)
|
||||
&& ((substr(decoct(fileperms($importCustomers)), -4) == 640)
|
||||
|| (substr(decoct(fileperms($importCustomers)), -4) == 660)))) {
|
||||
echo '<br><span style="color: red;"><strong>' . lang('Config.security_issue') . '</strong> <br>' . lang('Config.perm_risk') . '</span><br>';
|
||||
} else {
|
||||
echo '<br><span style="color: green;">' . lang('Config.no_risk') . '</strong> <br> </span>';
|
||||
}
|
||||
|
||||
if (substr(decoct(fileperms($logs)), -4) != 750) {
|
||||
echo '<br><span style="color: red;"> » [writable/logs:] ' . lang('Config.is_writable') . '</span>';
|
||||
}
|
||||
|
||||
if (substr(decoct(fileperms($uploads)), -4) != 750) {
|
||||
echo '<br><span style="color: red;"> » [writable/uploads:] ' . lang('Config.is_writable') . '</span>';
|
||||
}
|
||||
|
||||
if (substr(decoct(fileperms($images)), -4) != 750) {
|
||||
echo '<br><span style="color: red;"> » [writable/uploads/item_pics:] ' . lang('Config.is_writable') . '</span>';
|
||||
}
|
||||
|
||||
if (!((substr(decoct(fileperms($importCustomers)), -4) == 640)
|
||||
|| (substr(decoct(fileperms($importCustomers)), -4) == 660))) {
|
||||
echo '<br><span style="color: red;"> » [importCustomers.csv:] ' . lang('Config.is_readable') . '</span>';
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
?>
|
||||
<li><?= $bullet . 'Browser: ' . esc(getBrowserNameAndVersion($_SERVER['HTTP_USER_AGENT'])); ?></li>
|
||||
<li><?= $bullet . 'Server Software: ' . esc($_SERVER['SERVER_SOFTWARE']); ?></li>
|
||||
<li><?= $bullet . 'PHP Version: ' . PHP_VERSION; ?></li>
|
||||
<li><?= $bullet . 'DB Version: ' . esc($dbVersion); ?></li>
|
||||
<li><?= $bullet . 'Server Port: ' . esc($_SERVER['SERVER_PORT']); ?></li>
|
||||
<li><?= $bullet . 'OS: ' . php_uname('s') . ' ' . php_uname('r'); ?></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<label for="permissions" class="col-12 col-lg-2 form-label fw-bold">Permissions</label>
|
||||
<div class="col-12 col-lg-10" id="permissions">
|
||||
<ul class="list-unstyled">
|
||||
<li>
|
||||
<?= $bullet; ?><code>writable/logs</code>
|
||||
<?php
|
||||
if (is_writable($logs)) {
|
||||
echo substr(sprintf("%o", fileperms($logs)), -4) . $divider . $writable;
|
||||
} else {
|
||||
echo substr(sprintf("%o", fileperms($logs)), -4) . $divider . $notwritable;
|
||||
|
||||
}
|
||||
clearstatcache();
|
||||
|
||||
echo $divider;
|
||||
|
||||
if (is_writable($logs) && substr(decoct(fileperms($logs)), -4) != 750) {
|
||||
echo $permissions_fail;
|
||||
} else {
|
||||
echo $permissions_check;
|
||||
}
|
||||
clearstatcache();
|
||||
?>
|
||||
</li>
|
||||
<li>
|
||||
<?= $bullet; ?><code>public/uploads</code>
|
||||
<?php
|
||||
if(is_writable($uploads)) {
|
||||
echo substr(sprintf("%o",fileperms($uploads)),-4) . $divider . $writable;
|
||||
} else {
|
||||
echo substr(sprintf("%o",fileperms($uploads)),-4) . $divider . $notwritable;
|
||||
}
|
||||
clearstatcache();
|
||||
|
||||
echo $divider;
|
||||
|
||||
if(is_writable($uploads) && substr(decoct(fileperms($uploads)), -4) != 750 ) {
|
||||
echo $permissions_fail;
|
||||
} else {
|
||||
echo $permissions_check;
|
||||
}
|
||||
clearstatcache();
|
||||
?>
|
||||
</li>
|
||||
<li>
|
||||
<?= $bullet; ?><code>public/uploads/item_pics</code>
|
||||
<?php
|
||||
if (is_writable($images)) {
|
||||
echo substr(sprintf("%o", fileperms($images)), -4) . $divider . $writable;
|
||||
} else {
|
||||
echo substr(sprintf("%o", fileperms($images)), -4) . $divider . $notwritable;
|
||||
}
|
||||
clearstatcache();
|
||||
|
||||
echo $divider;
|
||||
|
||||
if (substr(decoct(fileperms($images)), -4) != 750) {
|
||||
echo $permissions_fail;
|
||||
} else {
|
||||
echo $permissions_check;
|
||||
}
|
||||
clearstatcache();
|
||||
|
||||
?>
|
||||
</li>
|
||||
<li>
|
||||
<?= $bullet; ?><code>importCustomers.csv</code>
|
||||
<?php
|
||||
if (is_readable($importCustomers)) {
|
||||
echo substr(sprintf("%o", fileperms($importCustomers)), -4) . $divider . $readable;
|
||||
} else {
|
||||
echo substr(sprintf("%o", fileperms($importCustomers)), -4) . $divider . $notreadable;
|
||||
}
|
||||
clearstatcache();
|
||||
|
||||
echo $divider;
|
||||
|
||||
if (!((substr(decoct(fileperms($importCustomers)), -4) == 640) || (substr(decoct(fileperms($importCustomers)), -4) == 660))) {
|
||||
echo $permissions_fail;
|
||||
} else {
|
||||
echo $permissions_check;
|
||||
}
|
||||
clearstatcache();
|
||||
|
||||
?>
|
||||
</li>
|
||||
</ul>
|
||||
<?php
|
||||
if (((substr(decoct(fileperms($logs)), -4) == 750) && (substr(decoct(fileperms($uploads)), -4) == 750) && (substr(decoct(fileperms($images)), -4) == 750) && ((substr(decoct(fileperms($importCustomers)), -4) == 640) || (substr(decoct(fileperms($importCustomers)), -4) == 660)))) {
|
||||
echo '<span class="text-success">' . lang('Config.no_risk') . '</span>';
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="d-flex justify-content-center gap-3">
|
||||
<button class="copy btn btn-secondary" data-clipboard-target="#copy-issue"><i class="bi bi-clipboard-plus"></i> Copy Info</button> <!-- TODO-BS5 add to translations -->
|
||||
<a class="btn btn-secondary" href="https://github.com/opensourcepos/opensourcepos/issues/new" target="_blank" rel="noopener"><i class="bi bi-flag"></i> <?= lang('Config.report_an_issue') ?></a>
|
||||
</div>
|
||||
|
||||
<div style="text-align: center;">
|
||||
<a class="copy" data-clipboard-action="copy" data-clipboard-target="#issuetemplate">Copy Info</a> | <a href="https://github.com/opensourcepos/opensourcepos/issues/new" target="_blank"> <?= lang('Config.report_an_issue') ?></a>
|
||||
<script type="text/javascript">
|
||||
var clipboard = new ClipboardJS('.copy');
|
||||
<script type="text/javascript">
|
||||
var clipboard = new ClipboardJS('.copy');
|
||||
|
||||
clipboard.on('success', function(e) {
|
||||
document.getSelection().removeAllRanges();
|
||||
clipboard.on('success', function(e) {
|
||||
document.getSelection().removeAllRanges();
|
||||
$.notify({
|
||||
icon: 'bi bi-clipboard-check-fill',
|
||||
message: 'System info successfully copied.'
|
||||
}, {
|
||||
type: 'success'
|
||||
});
|
||||
});
|
||||
|
||||
$(function() {
|
||||
$('#timezone').clone().appendTo('#timezoneE');
|
||||
clipboard.on('error', function(e) {
|
||||
$.notify({
|
||||
icon: 'bi bi-clipboard-x-fill',
|
||||
message: 'Something went wrong while copying.'
|
||||
}, {
|
||||
type: 'danger'
|
||||
});
|
||||
});
|
||||
|
||||
if ($('#timezone').html() !== $('#ostimezone').html()) {
|
||||
document.getElementById("timezone").innerText = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
||||
document.getElementById("TimeError").innerHTML = '<span style="color: red;"><?= lang('Config.timezone_error') ?></span><br><br><?= lang('Config.user_timezone') ?><div id="timezoneE" style="font-weight:600;"></div><br><?= lang('Config.os_timezone') ?><div id="ostimezoneE" style="font-weight:600;"><?= esc($config['timezone']) ?></div><br>';
|
||||
}
|
||||
</script>
|
||||
</div>
|
||||
document.getElementById("timezone").innerText = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
||||
|
||||
$(function() {
|
||||
$('#timezone').clone().appendTo('#timezoneE');
|
||||
});
|
||||
|
||||
if ($('#timezone').html() !== $('#ostimezone').html()) {
|
||||
$('#time-error').removeClass('d-none');
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -5,38 +5,28 @@
|
||||
*/
|
||||
?>
|
||||
|
||||
<?= form_open('config/saveTables/', ['id' => 'table_config_form', 'class' => 'form-horizontal']) ?>
|
||||
<div id="config_wrapper">
|
||||
<fieldset id="config_info">
|
||||
<?= form_open('config/saveTables/', ['id' => 'table_config_form']) ?>
|
||||
|
||||
<div id="required_fields_message"><?= lang('Common.fields_required_message') ?></div>
|
||||
<ul id="table_error_message_box" class="error_message_box"></ul>
|
||||
<?php
|
||||
$title_info['config_title'] = lang('Config.table_configuration');
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.dinner_table_enable'), 'dinner_table_enable', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-1">
|
||||
<?= form_checkbox([
|
||||
'name' => 'dinner_table_enable',
|
||||
'value' => 'dinner_table_enable',
|
||||
'id' => 'dinner_table_enable',
|
||||
'checked' => $config['dinner_table_enable'] == 1
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
<ul id="table_error_message_box" class="error_message_box"></ul>
|
||||
|
||||
<div id="dinner_tables">
|
||||
<?= view('partial/dinner_tables', ['dinner_tables' => $dinner_tables]) ?>
|
||||
</div>
|
||||
|
||||
<?= form_submit([
|
||||
'name' => 'submit_table',
|
||||
'id' => 'submit_table',
|
||||
'value' => lang('Common.submit'),
|
||||
'class' => 'btn btn-primary btn-sm pull-right'
|
||||
]) ?>
|
||||
|
||||
</fieldset>
|
||||
<div class="form-check form-switch mb-3">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="dinner_table_enable" name="dinner_table_enable" value="dinner_table_enable" <?= $config['dinner_table_enable'] == 1 ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="dinner_table_enable"><?= lang('Config.dinner_table_enable'); ?></label>
|
||||
</div>
|
||||
|
||||
<div class="row" id="dinner_tables">
|
||||
<?= view('partial/dinner_tables', ['dinner_tables' => $dinner_tables]) ?>
|
||||
</div>
|
||||
|
||||
<div class="d-flex justify-content-end">
|
||||
<button class="btn btn-primary" type="submit" name="submit_table"><?= lang('Common.submit'); ?></button>
|
||||
</div>
|
||||
|
||||
<?= form_close() ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
@@ -114,6 +104,7 @@
|
||||
},
|
||||
success: function(response) {
|
||||
$.notify({
|
||||
icon: 'bi bi-bell-fill',
|
||||
message: response.message
|
||||
}, {
|
||||
type: response.success ? 'success' : 'danger'
|
||||
|
||||
@@ -8,136 +8,99 @@
|
||||
*/
|
||||
?>
|
||||
|
||||
<?= form_open('config/saveTax/', ['id' => 'tax_config_form', 'class' => 'form-horizontal']) ?>
|
||||
<div id="config_wrapper">
|
||||
<fieldset id="config_info">
|
||||
<?= form_open('config/saveTax/', ['id' => 'tax_config_form']) ?>
|
||||
|
||||
<div id="required_fields_message"><?= lang('Common.fields_required_message') ?></div>
|
||||
<ul id="tax_error_message_box" class="error_message_box"></ul>
|
||||
<?php
|
||||
$title_info['config_title'] = lang('Config.tax_configuration');
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.tax_id'), 'tax_id', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_input([
|
||||
'name' => 'tax_id',
|
||||
'id' => 'tax_id',
|
||||
'class' => 'form-control input-sm',
|
||||
'value' => $config['tax_id']
|
||||
]) ?>
|
||||
</div>
|
||||
<ul id="tax_error_message_box" class="error_message_box"></ul>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="tax_id" class="form-label"><?= lang('Config.tax_id'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-bank"></i></span>
|
||||
<input type="text" name="tax_id" class="form-control" id="tax_id" value="<?= $config['tax_id']; ?>">
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.tax_included'), 'tax_included', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_checkbox([
|
||||
'name' => 'tax_included',
|
||||
'id' => 'tax_included',
|
||||
'value' => 'tax_included',
|
||||
'checked' => $config['tax_included'] == 1
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.default_tax_rate_1'), 'default_tax_1_rate', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_input([
|
||||
'name' => 'default_tax_1_name',
|
||||
'id' => 'default_tax_1_name',
|
||||
'class' => 'form-control input-sm',
|
||||
'value' => $config['default_tax_1_name'] !== false ? $config['default_tax_1_name'] : lang('Items.sales_tax_1')
|
||||
]) ?>
|
||||
</div>
|
||||
<div class="col-xs-1 input-group">
|
||||
<?= form_input([
|
||||
'name' => 'default_tax_1_rate',
|
||||
'id' => 'default_tax_1_rate',
|
||||
'class' => 'form-control input-sm',
|
||||
'value' => to_tax_decimals($config['default_tax_1_rate'])
|
||||
]) ?>
|
||||
<span class="input-group-addon input-sm">%</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.default_tax_rate_2'), 'default_tax_2_rate', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_input([
|
||||
'name' => 'default_tax_2_name',
|
||||
'id' => 'default_tax_2_name',
|
||||
'class' => 'form-control input-sm',
|
||||
'value' => $config['default_tax_2_name'] !== false ? $config['default_tax_2_name'] : lang('Items.sales_tax_2')
|
||||
]) ?>
|
||||
</div>
|
||||
<div class="col-xs-1 input-group">
|
||||
<?= form_input([
|
||||
'name' => 'default_tax_2_rate',
|
||||
'id' => 'default_tax_2_rate',
|
||||
'class' => 'form-control input-sm',
|
||||
'value' => to_tax_decimals($config['default_tax_2_rate'])
|
||||
]) ?>
|
||||
<span class="input-group-addon input-sm">%</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.use_destination_based_tax'), 'use_destination_based_tax', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_checkbox([
|
||||
'name' => 'use_destination_based_tax',
|
||||
'id' => 'use_destination_based_tax',
|
||||
'value' => 'use_destination_based_tax',
|
||||
'checked' => $config['use_destination_based_tax'] == 1
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.default_tax_code'), 'default_tax_code', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_dropdown(
|
||||
'default_tax_code',
|
||||
$tax_code_options,
|
||||
$config['default_tax_code'],
|
||||
'class="form-control input-sm"'
|
||||
) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.default_tax_category'), 'default_tax_category', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_dropdown(
|
||||
'default_tax_category',
|
||||
$tax_category_options,
|
||||
$config['default_tax_category'],
|
||||
'class="form-control input-sm"'
|
||||
) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Config.default_tax_jurisdiction'), 'default_tax_jurisdiction', ['class' => 'control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?= form_dropdown(
|
||||
'default_tax_jurisdiction',
|
||||
$tax_jurisdiction_options,
|
||||
$config['default_tax_jurisdiction'],
|
||||
'class="form-control input-sm"'
|
||||
) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?= form_submit([
|
||||
'name' => 'submit_tax',
|
||||
'id' => 'submit_tax',
|
||||
'value' => lang('Common.submit'),
|
||||
'class' => 'btn btn-primary btn-sm pull-right'
|
||||
]) ?>
|
||||
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-check form-switch mb-3">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="tax_included" name="tax_included" <?= $config['tax_included'] == 1 ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="tax_included"><?= lang('Config.tax_included'); ?></label>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="default_tax_1_rate" class="form-label"><?= lang('Config.default_tax_rate_1') ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<label class="input-group-text"><i class="bi bi-1-square"></i></label>
|
||||
<input type="text" class="form-control w-25" id="default_tax_1_name" name="default_tax_1_name" value="<?= $config['default_tax_1_name'] !== false ? $config['default_tax_1_name'] : lang('Items.sales_tax_1') ?>">
|
||||
<input type="text" class="form-control" id="default_tax_1_rate" name="default_tax_1_rate" value="<?= to_tax_decimals($config['default_tax_1_rate']) ?>">
|
||||
<label class="input-group-text"><i class="bi bi-percent"></i></label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="default_tax_2_rate" class="form-label"><?= lang('Config.default_tax_rate_2') ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<label class="input-group-text"><i class="bi bi-2-square"></i></label>
|
||||
<input type="text" class="form-control w-25" id="default_tax_2_name" name="default_tax_2_name" value="<?= $config['default_tax_2_name'] !== false ? $config['default_tax_2_name'] : lang('Items.sales_tax_2') ?>">
|
||||
<input type="text" class="form-control" id="default_tax_2_rate" name="default_tax_2_rate" value="<?= to_tax_decimals($config['default_tax_2_rate']) ?>">
|
||||
<label class="input-group-text"><i class="bi bi-percent"></i></label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-check form-switch mb-3">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="use_destination_based_tax" name="use_destination_based_tax" value="use_destination_based_tax" <?= $config['use_destination_based_tax'] == 1 ? 'checked' : '' ?>>
|
||||
<label class="form-check-label" for="use_destination_based_tax"><?= lang('Config.use_destination_based_tax'); ?></label>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="default_tax_code" class="form-label"><?= lang('Config.default_tax_code'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-code"></i></span>
|
||||
<select class="form-select" name="default_tax_code" id="default_tax_code">
|
||||
<?php foreach ($tax_code_options as $key => $value): ?>
|
||||
<option value="<?= $key ?>" <?= $config['default_tax_code'] == $key ? 'selected' : '' ?>><?= $value ?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="default_tax_category" class="form-label"><?= lang('Config.default_tax_category'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-bookmark"></i></span>
|
||||
<select class="form-select" name="default_tax_category" id="default_tax_category">
|
||||
<?php foreach ($tax_category_options as $key => $value): ?>
|
||||
<option value="<?= $key ?>" <?= $config['default_tax_category'] == $key ? 'selected' : '' ?>><?= $value ?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-lg-6">
|
||||
<label for="default_tax_jurisdiction" class="form-label"><?= lang('Config.default_tax_jurisdiction'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-globe"></i></span>
|
||||
<select class="form-select" name="default_tax_jurisdiction" id="default_tax_jurisdiction">
|
||||
<?php foreach ($tax_jurisdiction_options as $key => $value): ?>
|
||||
<option value="<?= $key ?>" <?= $config['default_tax_jurisdiction'] == $key ? 'selected' : '' ?>><?= $value ?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="d-flex justify-content-end">
|
||||
<button class="btn btn-primary" type="submit" name="submit_tax"><?= lang('Common.submit'); ?></button>
|
||||
</div>
|
||||
|
||||
<?= form_close() ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
@@ -168,6 +131,7 @@
|
||||
},
|
||||
success: function(response) {
|
||||
$.notify({
|
||||
icon: 'bi bi-bell-fill',
|
||||
message: response.message
|
||||
}, {
|
||||
type: response.success ? 'success' : 'danger'
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<div class="col-xs-12">
|
||||
<div class="fileinput fileinput-new input-group" data-provides="fileinput">
|
||||
<div class="form-control" data-trigger="fileinput">
|
||||
<i class="bi bi-filetype-csv icon-spacing fileinput-exists"></i><span class="fileinput-filename"></span>
|
||||
<i class="bi bi-filetype-csv me-2 fileinput-exists"></i><span class="fileinput-filename"></span>
|
||||
</div>
|
||||
<span class="input-group-addon input-sm btn btn-default btn-file">
|
||||
<span class="fileinput-new"><?= lang('Common.import_select_file') ?></span><span class="fileinput-exists"><?= lang('Common.import_change_file') ?></span><input type="file" id="file_path" name="file_path" accept=".csv">
|
||||
|
||||
@@ -9,6 +9,11 @@
|
||||
|
||||
<?= view('partial/header') ?>
|
||||
|
||||
<?php
|
||||
$title_info['config_title'] = 'Expenses';
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() {
|
||||
// When any filter is clicked and the dropdown window is closed
|
||||
@@ -50,29 +55,26 @@
|
||||
|
||||
<?= view('partial/print_receipt', ['print_after_sale' => false, 'selected_printer' => 'takings_printer']) ?>
|
||||
|
||||
<div id="title_bar" class="print_hide btn-toolbar">
|
||||
<button onclick="javascript:printdoc()" class="btn btn-info btn-sm pull-right">
|
||||
<i class="bi bi-printer icon-spacing"></i><?= lang('Common.print') ?>
|
||||
<div class="d-flex gap-2 justify-content-end d-print-none">
|
||||
<button type="button" class="btn btn-primary" data-btn-submit="<?= lang('Common.submit') ?>" data-href="<?= '$controller_name/view' ?>" title="<?= lang(ucfirst($controller_name). '.new') ?>">
|
||||
<i class="bi bi-bag-check me-2"></i><?= lang(ucfirst($controller_name) .".new") ?>
|
||||
</button>
|
||||
<button class="btn btn-info btn-sm pull-right modal-dlg" data-btn-submit="<?= lang('Common.submit') ?>" data-href="<?= "$controller_name/view" ?>" title="<?= lang(ucfirst($controller_name) . '.new') ?>">
|
||||
<i class="bi bi-bag-check icon-spacing"></i><?= lang(ucfirst($controller_name) . '.new') ?>
|
||||
<button type="button" class="btn btn-primary" onclick="window.print()" title="<?= lang('Common.print') ?>">
|
||||
<i class="bi bi-printer me-2"></i><?= lang('Common.print') ?>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div id="toolbar">
|
||||
<div class="pull-left form-inline" role="toolbar">
|
||||
<button id="delete" class="btn btn-default btn-sm print_hide">
|
||||
<i class="bi bi-trash icon-spacing"></i><?= lang('Common.delete') ?>
|
||||
<div class="d-flex gap-2">
|
||||
<button type="button" class="btn btn-secondary d-print-none">
|
||||
<i class="bi bi-trash"></i><span class="d-none d-sm-inline ms-2"><?= lang('Common.delete') ?></span>
|
||||
</button>
|
||||
<?= form_input(['name' => 'daterangepicker', 'class' => 'form-control input-sm', 'id' => 'daterangepicker']) ?>
|
||||
<?= form_multiselect('filters[]', esc($filters), [''], [
|
||||
'id' => 'filters',
|
||||
'data-none-selected-text' => lang('Common.none_selected_text'),
|
||||
'class' => 'selectpicker show-menu-arrow',
|
||||
'data-selected-text-format' => 'count > 1',
|
||||
'data-style' => 'btn-default btn-sm',
|
||||
'data-width' => 'fit'
|
||||
]) ?>
|
||||
<input type="text" class="form-control" name="daterangepicker" id="daterangepicker">
|
||||
<select id="filters" name="filters[]" class="selectpicker show-menu-arrow" data-none-selected-text="<?= lang('Common.none_selected_text') ?>" data-selected-text-format="count > 1" data-style="btn-secondary" data-width="fit" multiple>
|
||||
<?php foreach ($filters as $key => $value): ?>
|
||||
<option value="<?= esc($key) ?>"><?= esc($value) ?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -8,6 +8,11 @@
|
||||
|
||||
<?= view('partial/header') ?>
|
||||
|
||||
<?php
|
||||
$title_info['config_title'] = 'Expenses Categories';
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() {
|
||||
<?= view('partial/bootstrap_tables_locale') ?>
|
||||
@@ -27,16 +32,16 @@
|
||||
});
|
||||
</script>
|
||||
|
||||
<div id="title_bar" class="btn-toolbar">
|
||||
<button class="btn btn-info btn-sm pull-right modal-dlg" data-btn-submit="<?= lang('Common.submit') ?>" data-href="<?= esc("$controller_name/view") ?>" title="<?= lang(ucfirst($controller_name) . '.new') ?>">
|
||||
<i class="bi bi-bookmark-plus icon-spacing"></i><?= lang(ucfirst($controller_name) . '.new') ?>
|
||||
<div class="d-flex gap-2 justify-content-end">
|
||||
<button type="button" class="btn btn-primary" data-btn-submit="<?= lang('Common.submit') ?>" data-href="<?= esc('$controller_name/view') ?>" title="<?= lang(ucfirst($controller_name). ".new") ?>">
|
||||
<i class="bi bi-bookmark-plus me-2"></i><?= lang(ucfirst($controller_name). ".new") ?>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div id="toolbar">
|
||||
<div class="pull-left form-inline" role="toolbar">
|
||||
<button id="delete" class="btn btn-default btn-sm print_hide">
|
||||
<i class="bi bi-trash icon-spacing"></i><?= lang('Common.delete') ?>
|
||||
<div class="d-flex gap-2">
|
||||
<button type="button" class="btn btn-secondary">
|
||||
<i class="bi bi-trash"></i><span class="d-none d-sm-inline ms-2"><?= lang('Common.delete') ?></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -8,6 +8,11 @@
|
||||
|
||||
<?= view('partial/header') ?>
|
||||
|
||||
<?php
|
||||
$title_info['config_title'] = 'Gift Cards';
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() {
|
||||
<?= view('partial/bootstrap_tables_locale') ?>
|
||||
@@ -20,16 +25,16 @@
|
||||
});
|
||||
</script>
|
||||
|
||||
<div id="title_bar" class="btn-toolbar">
|
||||
<button class="btn btn-info btn-sm pull-right modal-dlg" data-btn-submit="<?= lang('Common.submit') ?>" data-href="<?= esc("$controller_name/view") ?>" title="<?= lang(ucfirst($controller_name) . '.new') ?>">
|
||||
<i class="bi bi-gift icon-spacing"></i><?= lang(ucfirst($controller_name) . '.new') ?>
|
||||
<div class="d-flex gap-2 justify-content-end">
|
||||
<button type="button" class="btn btn-primary" data-btn-submit="<?= lang('Common.submit') ?>" data-href="<?= esc("$controller_name/view") ?>" title="<?= lang(ucfirst($controller_name). '.new') ?>">
|
||||
<i class="bi bi-gift me-2"></i><?= lang(ucfirst($controller_name) .'.new') ?>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div id="toolbar">
|
||||
<div class="pull-left btn-toolbar">
|
||||
<button id="delete" class="btn btn-default btn-sm">
|
||||
<i class="bi bi-trash icon-spacing"></i><?= lang('Common.delete') ?>
|
||||
<div class="d-flex gap-2">
|
||||
<button type="button" class="btn btn-secondary">
|
||||
<i class="bi bi-trash"></i><span class="d-none d-sm-inline ms-2"><?= lang('Common.delete') ?></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,138 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @var object $person_info
|
||||
*/
|
||||
?>
|
||||
|
||||
<div id="required_fields_message"><?= lang('Common.fields_required_message') ?></div>
|
||||
<ul id="error_message_box" class="error_message_box"></ul>
|
||||
|
||||
<?= form_open("home/save/$person_info->person_id", ['id' => 'employee_form', 'class' => 'form-horizontal']) ?>
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane fade in active" id="employee_login_info">
|
||||
<fieldset>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Employees.username'), 'username', ['class' => 'required control-label col-xs-3']) ?>
|
||||
<div class="col-xs-8">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon input-sm">
|
||||
<i class="bi bi-person"></i>
|
||||
</span>
|
||||
<?= form_input([
|
||||
'name' => 'username',
|
||||
'id' => 'username',
|
||||
'class' => 'form-control input-sm',
|
||||
'value' => $person_info->username,
|
||||
'readonly' => 'true'
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php $password_label_attributes = $person_info->person_id == "" ? ['class' => 'required'] : []; ?>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Employees.current_password'), 'current_password', array_merge($password_label_attributes, ['class' => 'control-label col-xs-3'])) ?>
|
||||
<div class="col-xs-8">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon input-sm">
|
||||
<i class="bi bi-lock"></i>
|
||||
</span>
|
||||
<?= form_password([
|
||||
'name' => 'current_password',
|
||||
'id' => 'current_password',
|
||||
'class' => 'form-control input-sm'
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Employees.password'), 'password', array_merge($password_label_attributes, ['class' => 'control-label col-xs-3'])) ?>
|
||||
<div class="col-xs-8">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon input-sm">
|
||||
<i class="bi bi-lock"></i>
|
||||
</span>
|
||||
<?= form_password([
|
||||
'name' => 'password',
|
||||
'id' => 'password',
|
||||
'class' => 'form-control input-sm'
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Employees.repeat_password'), 'repeat_password', array_merge($password_label_attributes, ['class' => 'control-label col-xs-3'])) ?>
|
||||
<div class="col-xs-8">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon input-sm">
|
||||
<i class="bi bi-lock"></i>
|
||||
</span>
|
||||
<?= form_password([
|
||||
'name' => 'repeat_password',
|
||||
'id' => 'repeat_password',
|
||||
'class' => 'form-control input-sm'
|
||||
]) ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>
|
||||
<?= form_close() ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
// Validation and submit handling
|
||||
$(document).ready(function() {
|
||||
$.validator.setDefaults({
|
||||
ignore: []
|
||||
});
|
||||
|
||||
$.validator.addMethod("notEqualTo", function(value, element, param) {
|
||||
return this.optional(element) || value != $(param).val();
|
||||
}, '<?= lang('Employees.password_not_must_match') ?>');
|
||||
|
||||
$('#employee_form').validate($.extend({
|
||||
submitHandler: function(form) {
|
||||
$(form).ajaxSubmit({
|
||||
success: function(response) {
|
||||
dialog_support.hide();
|
||||
$.notify(response.message, {
|
||||
type: response.success ? 'success' : 'danger'
|
||||
});
|
||||
},
|
||||
dataType: 'json'
|
||||
});
|
||||
},
|
||||
|
||||
rules: {
|
||||
current_password: {
|
||||
required: true,
|
||||
minlength: 8
|
||||
},
|
||||
password: {
|
||||
required: true,
|
||||
minlength: 8,
|
||||
notEqualTo: "#current_password"
|
||||
},
|
||||
repeat_password: {
|
||||
equalTo: "#password"
|
||||
}
|
||||
},
|
||||
|
||||
messages: {
|
||||
password: {
|
||||
required: "<?= lang('Employees.password_required') ?>",
|
||||
minlength: "<?= lang('Employees.password_minlength') ?>"
|
||||
},
|
||||
repeat_password: {
|
||||
equalTo: "<?= lang('Employees.password_must_match') ?>"
|
||||
}
|
||||
}
|
||||
}, form_support.error));
|
||||
});
|
||||
</script>
|
||||
@@ -6,19 +6,6 @@
|
||||
|
||||
<?= view('partial/header') ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
dialog_support.init("a.modal-dlg");
|
||||
</script>
|
||||
|
||||
<h3 class="text-center"><?= lang('Common.welcome_message') ?></h3>
|
||||
|
||||
<div id="home_module_list">
|
||||
<?php foreach($allowed_modules as $module) { ?>
|
||||
<div class="module_item" title="<?= lang("Module.$module->module_id" . '_desc') ?>">
|
||||
<a href="<?= base_url($module->module_id) ?>"><img src="<?= base_url("images/menubar/$module->module_id.svg") ?>" style="border-width: 0; height: 64px; max-width: 64px;" alt="Menubar Image"></a>
|
||||
<a href="<?= base_url($module->module_id) ?>"><?= lang("Module.$module->module_id") ?></a>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<?= view('home/modules') ?>
|
||||
|
||||
<?= view('partial/footer') ?>
|
||||
|
||||
16
app/Views/home/modules.php
Normal file
16
app/Views/home/modules.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<h3 class="text-center pb-3 d-none d-lg-block"><?= lang('Common.welcome_message') ?></h3>
|
||||
|
||||
<section class="container-fluid d-flex flex-wrap justify-content-center gap-3 p-0 py-1 py-lg-0">
|
||||
<?php foreach ($allowed_modules as $module) { ?>
|
||||
<div class="border border-primary rounded shadow-sm bg-primary-subtle text-center d-block" title="<?= lang("Module.$module->module_id" . '_desc') ?>">
|
||||
<a href="<?= base_url($module->module_id) ?>">
|
||||
<img class="d-block mx-auto p-2" src="<?= base_url("images/menubar/$module->module_id.svg") ?>" alt="Menubar Image"> <!-- TODO-BS5 alt text translatable -->
|
||||
</a>
|
||||
<a href="<?= base_url($module->module_id) ?>">
|
||||
<div class="tile-text rounded-bottom d-block bg-primary text-light fw-bold p-2">
|
||||
<span><?= lang("Module.$module->module_id") ?></span>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</section>
|
||||
@@ -6,19 +6,6 @@
|
||||
|
||||
<?= view('partial/header') ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
dialog_support.init("a.modal-dlg");
|
||||
</script>
|
||||
|
||||
<h3 class="text-center"><?= lang('Common.welcome_message') ?></h3>
|
||||
|
||||
<div id="office_module_list">
|
||||
<?php foreach ($allowed_modules as $module) { ?>
|
||||
<div class="module_item" title="<?= lang("Module.$module->module_id" . '_desc') ?>">
|
||||
<a href="<?= base_url($module->module_id) ?>"><img src="<?= base_url("images/menubar/$module->module_id.svg") ?>" style="border-width: 0; height: 64px; max-width: 64px;" alt="Menubar Image"></a>
|
||||
<a href="<?= base_url($module->module_id) ?>"><?= lang("Module.$module->module_id") ?></a>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<?= view('home/modules') ?>
|
||||
|
||||
<?= view('partial/footer') ?>
|
||||
|
||||
137
app/Views/home/profile.php
Normal file
137
app/Views/home/profile.php
Normal file
@@ -0,0 +1,137 @@
|
||||
<?php
|
||||
$email = $user_info->email;
|
||||
$size = 96;
|
||||
$default = 'https://ui-avatars.com/api/?name=' . $user_info->first_name . '+' . $user_info->last_name . '&format=svg&size=' . $size;
|
||||
$grav_url = 'https://www.gravatar.com/avatar/' . md5(strtolower(trim($email))) . '?d=' . urlencode($default) . '&s=' . $size;
|
||||
?>
|
||||
|
||||
<div class="modal fade" id="profile-modal" tabindex="-1" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<ul class="nav nav-pills nav-justified w-100 me-1 gap-1">
|
||||
<li class="nav-item">
|
||||
<button type="button" id="modal-button-profile" onclick="modalSwitchProfile()" class="nav-link active">Profile</button>
|
||||
</li>
|
||||
<li class="nav-item" title="<?= lang('Employees.change_password'); ?>">
|
||||
<button type="button" id="modal-button-password" onclick="modalSwitchPassword()" class="nav-link"><?= lang('Employees.change_password'); ?></a>
|
||||
</li>
|
||||
</ul>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body text-start">
|
||||
<div id="modal-profile">
|
||||
<div class="container">
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="pe-2"><img class="img-thumbnail rounded-circle" src="<?= $default; ?>" style="height: 48px;"></td>
|
||||
<td class="align-middle"><h5><?= $user_info->first_name . ' ' . $user_info->last_name; ?></h5></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<br>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="pe-3">Username</td>
|
||||
<td><?= $user_info->username; ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="pe-3"><?= lang('Common.id'); ?></td>
|
||||
<td><?= $user_info->person_id; ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="pe-3"><?= lang('Common.email'); ?></td>
|
||||
<td><?= $user_info->email; ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="pe-3"><?= lang('Common.phone_number'); ?></td>
|
||||
<td><?= $user_info->phone_number; ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="pe-3"><?= lang('Common.gender'); ?></td>
|
||||
<td><?= $user_info->gender; ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="pe-3"><?= lang('Common.address_1'); ?></td>
|
||||
<td><?= $user_info->address_1; ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="pe-3"><?= lang('Common.address_2'); ?></td>
|
||||
<td><?= $user_info->address_2; ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="pe-3"><?= lang('Common.city'); ?></td>
|
||||
<td><?= $user_info->city; ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="pe-3"><?= lang('Common.state'); ?></td>
|
||||
<td><?= $user_info->state; ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="pe-3"><?= lang('Common.zip'); ?></td>
|
||||
<td><?= $user_info->zip; ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="pe-3"><?= lang('Common.country'); ?></td>
|
||||
<td><?= $user_info->country; ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="pe-3"><?= lang('Common.comments'); ?></td>
|
||||
<td><?= $user_info->comments; ?></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="modal-password" class="d-none was-validated" novalidate>
|
||||
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-person"></i></span>
|
||||
<div class="form-floating">
|
||||
<input name="username" id="input-username" type="text" class="form-control" placeholder="<?= lang('Login.username'); ?>" value="<?= $user_info->username; ?>" disabled>
|
||||
<label for="input-username"><?= lang('Login.username'); ?></label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-lock"></i></span>
|
||||
<div class="form-floating is-invalid">
|
||||
<input name="password-current" id="input-password-current" type="password" class="form-control" placeholder="Current Password" required>
|
||||
<label for="input-password-current">Current Password</label>
|
||||
</div>
|
||||
<div class="invalid-feedback">Please fill in your current password.</div>
|
||||
</div>
|
||||
<div class="form-text">Must be 8-20 characters long</div>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-lock"></i></span>
|
||||
<div class="form-floating is-invalid">
|
||||
<input name="password-new" id="input-password-new" type="password" class="form-control" placeholder="New Password" required>
|
||||
<label for="input-password-new">New Password</label>
|
||||
</div>
|
||||
<div class="invalid-feedback">Please fill in a new password.</div>
|
||||
</div>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-lock"></i></span>
|
||||
<div class="form-floating is-invalid">
|
||||
<input name="password-repeat" id="input-password-repeat" type="password" class="form-control" placeholder="Repeat Password" required>
|
||||
<label for="input-password-repeat">Repeat Password</label>
|
||||
</div>
|
||||
<div class="invalid-feedback">Please repeat the new password.</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
|
||||
<a type="button" id="modal-button-logout" class="btn btn-danger" href="home/logout">
|
||||
<i class="bi bi-power me-2"></i><?= lang('Login.logout'); ?>
|
||||
</a>
|
||||
<button type="button" id="modal-button-save" class="btn btn-primary d-none">
|
||||
<i class="bi bi-floppy me-2"></i>Save
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -8,6 +8,11 @@
|
||||
|
||||
<?= view('partial/header') ?>
|
||||
|
||||
<?php
|
||||
$title_info['config_title'] = 'Item Kits';
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() {
|
||||
<?= view('partial/bootstrap_tables_locale') ?>
|
||||
@@ -28,20 +33,19 @@
|
||||
});
|
||||
</script>
|
||||
|
||||
<div id="title_bar" class="btn-toolbar">
|
||||
<button class="btn btn-info btn-sm pull-right modal-dlg" data-btn-submit="<?= lang('Common.submit') ?>" data-href="<?= esc("$controller_name/view") ?>" title="<?= lang(ucfirst($controller_name) . '.new') ?>">
|
||||
<i class="bi bi-tags icon-spacing"></i><?= lang(ucfirst($controller_name) . '.new') ?>
|
||||
<div class="d-flex gap-2 justify-content-end">
|
||||
<button type="button" class="btn btn-primary" data-btn-submit="<?= lang('Common.submit') ?>" data-href="<?= esc("$controller_name/view") ?>" title="<?= lang(ucfirst($controller_name). '.new') ?>">
|
||||
<i class="bi bi-tags me-2"></i><?= lang(ucfirst($controller_name) .".new") ?>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div id="toolbar">
|
||||
<div class="pull-left btn-toolbar">
|
||||
<button id="delete" class="btn btn-default btn-sm">
|
||||
<i class="bi bi-trash icon-spacing"></i><?= lang('Common.delete') ?>
|
||||
<div class="d-flex gap-2">
|
||||
<button type="button" class="btn btn-secondary">
|
||||
<i class="bi bi-trash"></i><span class="d-none d-sm-inline ms-2"><?= lang('Common.delete') ?></span>
|
||||
</button>
|
||||
|
||||
<button id="generate_barcodes" class="btn btn-default btn-sm" data-href="<?= esc("$controller_name/generateBarcodes") ?>">
|
||||
<i class="bi bi-upc-scan icon-spacing"></i><?= lang('Items.generate_barcodes') ?>
|
||||
<button type="button" class="btn btn-secondary" data-href="<?= esc('$controller_name/generateBarcodes') ?>" title="<?= lang('Items.generate_barcodes') ?>">
|
||||
<i class="bi bi-upc-scan"></i><span class="d-none d-sm-inline ms-2"><?= lang('Items.generate_barcodes') ?></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<div class="form-group form-group-sm">
|
||||
<div class="col-xs-12">
|
||||
<div class="fileinput fileinput-new input-group" data-provides="fileinput">
|
||||
<div class="form-control" data-trigger="fileinput"><i class="bi bi-filetype-csv icon-spacing fileinput-exists"></i><span class="fileinput-filename"></span></div>
|
||||
<div class="form-control" data-trigger="fileinput"><i class="bi bi-filetype-csv me-2 fileinput-exists"></i><span class="fileinput-filename"></span></div>
|
||||
<span class="input-group-addon input-sm btn btn-default btn-file">
|
||||
<span class="fileinput-new"><?= lang('Common.import_select_file') ?></span><span class="fileinput-exists"><?= lang('Common.import_change_file') ?></span><input type="file" id="file_path" name="file_path" accept=".csv">
|
||||
</span>
|
||||
|
||||
@@ -13,6 +13,11 @@ use App\Models\Employee;
|
||||
|
||||
<?= view('partial/header') ?>
|
||||
|
||||
<?php
|
||||
$title_info['config_title'] = 'Items';
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() {
|
||||
$('#generate_barcodes').click(function() {
|
||||
@@ -75,51 +80,39 @@ use App\Models\Employee;
|
||||
});
|
||||
</script>
|
||||
|
||||
<div id="title_bar" class="btn-toolbar print_hide">
|
||||
<button class="btn btn-info btn-sm pull-right modal-dlg" data-btn-submit="<?= lang('Common.submit') ?>" data-href="<?= "$controller_name/csvImport" ?>" title="<?= lang('Items.import_items_csv') ?>">
|
||||
<i class="bi bi-file-earmark-arrow-down icon-spacing"></i><?= lang('Common.import_csv') ?>
|
||||
<div class="d-flex gap-2 justify-content-end">
|
||||
<button type="button" class="btn btn-primary" data-btn-new="<?= lang('Common.new') ?>" data-btn-submit="<?= lang('Common.submit') ?>" data-href="<?= '$controller_name/view' ?>" title="<?= lang(ucfirst($controller_name) .".new") ?>">
|
||||
<i class="bi bi-tag me-2"></i><?= lang(ucfirst($controller_name) .".new") ?>
|
||||
</button>
|
||||
|
||||
<button class="btn btn-info btn-sm pull-right modal-dlg" data-btn-new="<?= lang('Common.new') ?>" data-btn-submit="<?= lang('Common.submit') ?>" data-href="<?= "$controller_name/view" ?>" title="<?= lang(ucfirst($controller_name) . '.new') ?>">
|
||||
<i class="bi bi-tag icon-spacing"></i><?= lang(ucfirst($controller_name) . '.new') ?>
|
||||
<button type="button" class="btn btn-primary" data-btn-submit="<?= lang('Common.submit') ?>" data-href="<?= '$controller_name/csvImport' ?>" title="<?= lang('Items.import_items_csv') ?>">
|
||||
<i class="bi bi-file-earmark-arrow-down me-2"></i><?= lang('Common.import_csv') ?>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div id="toolbar">
|
||||
<div class="pull-left form-inline" role="toolbar">
|
||||
<button id="delete" class="btn btn-default btn-sm print_hide">
|
||||
<i class="bi bi-trash icon-spacing"></i><?= lang('Common.delete') ?>
|
||||
<div class="d-flex gap-2">
|
||||
<button type="button" class="btn btn-secondary d-print-none">
|
||||
<i class="bi bi-trash"></i><span class="d-none d-md-inline ms-2"><?= lang('Common.delete') ?></span>
|
||||
</button>
|
||||
<button id="bulk_edit" class="btn btn-default btn-sm modal-dlg print_hide" data-btn-submit="<?= lang('Common.submit') ?>" data-href="<?= "items/bulkEdit" ?>" title="<?= lang('Items.edit_multiple_items') ?>">
|
||||
<i class="bi bi-pencil-square icon-spacing"></i><?= lang('Items.bulk_edit') ?>
|
||||
<button type="button" class="btn btn-secondary d-print-none" data-btn-submit="<?= lang('Common.submit') ?>" data-href="<?= 'items/bulkEdit' ?>" title="<?= lang('Items.edit_multiple_items') ?>">
|
||||
<i class="bi bi-pencil-square"></i><span class="d-none d-md-inline ms-2"><?= lang('Items.bulk_edit') ?></span>
|
||||
</button>
|
||||
<button id="generate_barcodes" class="btn btn-default btn-sm print_hide" data-href="<?= "$controller_name/generateBarcodes" ?>" title="<?= lang('Items.generate_barcodes') ?>">
|
||||
<i class="bi bi-upc-scan icon-spacing"></i><?= lang('Items.generate_barcodes') ?>
|
||||
<button type="button" class="btn btn-secondary d-print-none" data-href="<?= '$controller_name/generateBarcodes' ?>" title="<?= lang('Items.generate_barcodes') ?>">
|
||||
<i class="bi bi-upc-scan"></i><span class="d-none d-md-inline ms-2"><?= lang('Items.generate_barcodes') ?></span>
|
||||
</button>
|
||||
<?= form_input(['name' => 'daterangepicker', 'class' => 'form-control input-sm', 'id' => 'daterangepicker']) ?>
|
||||
<?= form_multiselect('filters[]', $filters, [''], [
|
||||
'id' => 'filters',
|
||||
'class' => 'selectpicker show-menu-arrow',
|
||||
'data-none-selected-text' => lang('Common.none_selected_text'),
|
||||
'data-selected-text-format' => 'count > 1',
|
||||
'data-style' => 'btn-default btn-sm',
|
||||
'data-width' => 'fit'
|
||||
]) ?>
|
||||
<?php
|
||||
if (count($stock_locations) > 1) {
|
||||
echo form_dropdown(
|
||||
'stock_location',
|
||||
$stock_locations,
|
||||
$stock_location,
|
||||
[
|
||||
'id' => 'stock_location',
|
||||
'class' => 'selectpicker show-menu-arrow',
|
||||
'data-style' => 'btn-default btn-sm',
|
||||
'data-width' => 'fit'
|
||||
]
|
||||
);
|
||||
}
|
||||
?>
|
||||
<input type="text" class="form-control" name="daterangepicker" id="daterangepicker">
|
||||
<select id="filters" name="filters[]" class="selectpicker show-menu-arrow" data-none-selected-text="<?= lang('Common.none_selected_text') ?>" data-selected-text-format="count > 1" data-style="btn-secondary" data-width="fit" multiple>
|
||||
<?php foreach ($filters as $key => $value): ?>
|
||||
<option value="<?= esc($key) ?>"><?= esc($value) ?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
<?php if (count($stock_locations) > 1): ?>
|
||||
<select id="stock_location" name="stock_location" class="selectpicker show-menu-arrow" data-style="btn-secondary" data-width="fit">
|
||||
<?php foreach ($stock_locations as $key => $value): ?>
|
||||
<option value="<?= esc($key) ?>" <?= $key == $stock_location ? 'selected' : '' ?>><?= esc($value) ?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -7,32 +7,51 @@
|
||||
* @var array $config
|
||||
* @var $validation
|
||||
*/
|
||||
|
||||
// Manually setting some error messages for testing
|
||||
// $validation->setError('test', 'The test error is testing.');
|
||||
// $validation->setError('email', 'The email field is required.');
|
||||
// $has_errors = $validation->hasError('email');
|
||||
// $has_errors = $validation->hasError('test');
|
||||
|
||||
// Manually set database migration message to show
|
||||
// $is_latest = false;
|
||||
// $latest_version = '1.0.0';
|
||||
|
||||
// Manually set language for page, doesn't work for dynamic elements
|
||||
// \Config\Services::language()->setLocale('de-DE');
|
||||
|
||||
// Manually set login form appearence
|
||||
// $config['login_form'] = 'input_groups';
|
||||
|
||||
// Manually set theme
|
||||
// $config['theme'] = 'cerulean';
|
||||
|
||||
?>
|
||||
|
||||
<!doctype html>
|
||||
<html lang="<?= current_language_code() ?>">
|
||||
<html lang="<?= current_language_code() ?>" data-bs-theme="<?= $config['color_mode'] ?>" <?= $config['rtl_language'] == 1 ? 'dir="rtl"' : '' ?>>
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<base href="<?= base_url() ?>">
|
||||
<title><?= $config['company'] . ' | ' . lang('Common.software_short') . ' | ' . lang('Login.login') ?></title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<?= $config['responsive_design'] == 1 ? '<meta name="viewport" content="width=device-width, initial-scale=1">' : '' ?>
|
||||
<meta name="robots" content="noindex, nofollow">
|
||||
<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico">
|
||||
<?php
|
||||
$theme = (empty($config['theme'])
|
||||
|| 'paper' == $config['theme']
|
||||
|| 'readable' == $config['theme']
|
||||
? 'flatly'
|
||||
: $config['theme']);
|
||||
?>
|
||||
<link rel="stylesheet" href="resources/bootswatch5/<?= "$theme" ?>/bootstrap.min.css">
|
||||
<?php $theme = (empty($config['theme']) ? 'flatly' : $config['theme']); ?>
|
||||
<link rel="stylesheet" href="resources/bootswatch/<?= "$theme" ?>/bootstrap<?= $config['rtl_language'] == 1 ? '.rtl' : '' ?>.min.css">
|
||||
<link rel="stylesheet" href="resources/bootstrap-icons/bootstrap-icons.min.css">
|
||||
<link rel="stylesheet" href="css/login.css">
|
||||
<meta name="theme-color" content="#2c3e50">
|
||||
</head>
|
||||
|
||||
<body class="bg-secondary-subtle d-flex flex-column">
|
||||
<!-- BS5 WIP message -->
|
||||
<div data-notify="container" class="col-11 col-sm-9 col-md-7 col-lg-6 col-xl-5 col-xxl-4 alert alert-warning position-absolute top-0 mt-3 start-50 translate-middle-x" role="alert">
|
||||
<span data-notify="icon" class="me-2" role="img"><i class="bi bi-exclamation-diamond-fill"></i></span>
|
||||
<span data-notify="message">WIP conversion to Bootstrap 5</span>
|
||||
</div>
|
||||
<main class="d-flex justify-content-around align-items-center flex-grow-1">
|
||||
<div class="container-login container-fluid d-flex flex-column flex-md-row bg-body shadow rounded m-3 p-4 p-md-0">
|
||||
<div class="box-logo d-flex flex-column justify-content-center align-items-center border-end border-secondary-subtle px-4 pb-3 p-md-4">
|
||||
|
||||
@@ -1,39 +1,34 @@
|
||||
<?= view('partial/header') ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
dialog_support.init("a.modal-dlg");
|
||||
</script>
|
||||
<?= form_open("messages/send/", ['id' => 'send_sms_form', 'enctype' => 'multipart/form-data', 'method' => 'post']) ?>
|
||||
|
||||
<div class="jumbotron" style="max-width: 60%; margin: auto;">
|
||||
<?= form_open("messages/send/", ['id' => 'send_sms_form', 'enctype' => 'multipart/form-data', 'method' => 'post', 'class' => 'form-horizontal']) ?>
|
||||
<fieldset>
|
||||
<?php
|
||||
$title_info['config_title'] = lang('Messages.sms_send');
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<legend style="text-align: center;"><?= lang('Messages.sms_send') ?></legend>
|
||||
<div class="form-group form-group-sm">
|
||||
<label for="phone" class="col-xs-3 control-label"><?= lang('Messages.phone') ?></label>
|
||||
<div class="col-xs-9">
|
||||
<input class="form-control input-sm" type="text" name="phone" placeholder="<?= lang('Messages.phone_placeholder') ?>">
|
||||
<span class="help-block" style="text-align: center;"><?= lang('Messages.multiple_phones') ?></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col mb-3">
|
||||
<label for="message-recipients" class="form-label"><?= lang('Messages.phone'); ?></label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text" id="message-icon"><i class="bi bi-phone"></i></span>
|
||||
<input type="text" name="phone" class="form-control" id="message-recipients" aria-describedby="message-icon" required placeholder="<?= lang('Messages.phone_placeholder'); ?>">
|
||||
</div>
|
||||
<span class="form-text"><?= lang('Messages.multiple_phones'); ?></span>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<label for="message" class="col-xs-3 control-label"><?= lang('Messages.message') ?></label>
|
||||
<div class="col-xs-9">
|
||||
<textarea class="form-control input-sm" rows="3" id="message" name="message" placeholder="<?= lang('Messages.message_placeholder') ?>"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col mb-3">
|
||||
<label for="text-message" class="form-label"><?= lang('Messages.message'); ?></label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text"><i class="bi bi-chat-quote"></i></span>
|
||||
<textarea class="form-control" name="message" id="text-message" rows="10" placeholder="<?= lang('Messages.message_placeholder'); ?>"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?= form_submit([
|
||||
'name' => 'submit_form',
|
||||
'id' => 'submit_form',
|
||||
'value' => lang('Common.submit'),
|
||||
'class' => 'btn btn-primary btn-sm pull-right'
|
||||
]) ?>
|
||||
<div class="d-flex justify-content-end">
|
||||
<button class="btn btn-primary" id="submit_form" name="submit_form">Send</button>
|
||||
</div>
|
||||
|
||||
</fieldset>
|
||||
<?= form_close() ?>
|
||||
</div>
|
||||
<?= form_close() ?>
|
||||
|
||||
<?= view('partial/footer') ?>
|
||||
|
||||
@@ -45,6 +40,7 @@
|
||||
$(form).ajaxSubmit({
|
||||
success: function(response) {
|
||||
$.notify({
|
||||
icon: 'bi bi-bell-fill',
|
||||
message: response.message
|
||||
}, {
|
||||
type: response.success ? 'success' : 'danger'
|
||||
|
||||
@@ -4,6 +4,10 @@
|
||||
*/
|
||||
?>
|
||||
|
||||
<span class="d-flex justify-content-start add_customer_reward">
|
||||
<button class="btn btn-outline-success mb-3" type="button"><i class="bi bi-plus-lg"></i> Add reward</button> <!-- TODO-BS5 translate -->
|
||||
</span>
|
||||
|
||||
<?php
|
||||
$i = 0;
|
||||
|
||||
@@ -14,33 +18,14 @@ foreach ($customer_rewards as $reward_key => $reward_category) {
|
||||
++$i;
|
||||
?>
|
||||
|
||||
<div class="form-group form-group-sm" style="<?= $reward_category['deleted'] ? 'display: none;' : 'display: block;' ?>">
|
||||
<?= form_label(lang('Config.customer_reward') . " $i", "customer_reward_$i", ['class' => 'required control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?php $form_data = [
|
||||
'name' => 'customer_reward_' . $customer_reward_id,
|
||||
'id' => 'customer_reward_' . $customer_reward_id,
|
||||
'class' => 'customer_reward valid_chars form-control input-sm required',
|
||||
'value' => $customer_reward_name
|
||||
];
|
||||
$reward_category['deleted'] && $form_data['disabled'] = 'disabled';
|
||||
echo form_input($form_data);
|
||||
?>
|
||||
<div class="col-12 col-lg-6 <?= $reward_category['deleted'] ? 'd-none' : '' ?>">
|
||||
<label for="customer_reward_<?= $i ?>" class="form-label"><?= lang('Config.customer_reward') . " $i"; ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><?= $customer_reward_id ?>.</span>
|
||||
<input type="text" class="form-control customer_reward valid_chars w-25" name="customer_reward_<?= $customer_reward_id ?>" id="customer_reward_<?= $customer_reward_id ?>" value="<?= $customer_reward_name ?>" required <?= $reward_category['deleted'] ? 'disabled' : '' ?>>
|
||||
<input type="number" min="0" class="form-control customer_reward valid_chars" name="reward_points_<?= $customer_reward_id ?>" id="reward_points_<?= $customer_reward_id ?>" value="<?= $customer_points_percent ?>" required <?= $reward_category['deleted'] ? 'disabled' : '' ?>>
|
||||
<button class="btn btn-outline-danger remove_customer_reward" type="button"><i class="bi bi-x-lg"></i></button>
|
||||
</div>
|
||||
<div class="col-xs-2">
|
||||
<?php $form_data = [
|
||||
'name' => 'reward_points_' . $customer_reward_id,
|
||||
'id' => 'reward_points_' . $customer_reward_id,
|
||||
'class' => 'customer_reward valid_chars form-control input-sm required',
|
||||
'value' => $customer_points_percent
|
||||
];
|
||||
$reward_category['deleted'] && $form_data['disabled'] = 'disabled';
|
||||
echo form_input($form_data);
|
||||
?>
|
||||
</div>
|
||||
<span class="add_customer_reward bi bi-plus-circle" style="padding-top: 0.5em; display: inline-block; cursor: pointer;"></span>
|
||||
<span> </span>
|
||||
<span class="remove_customer_reward bi bi-dash-circle" style="padding-top: 0.5em; display: inline-block; cursor: pointer;"></span>
|
||||
</div>
|
||||
|
||||
<?php } ?>
|
||||
|
||||
@@ -5,206 +5,210 @@
|
||||
?>
|
||||
|
||||
<?php if (empty($config['date_or_time_format'])) { ?>
|
||||
$('#daterangepicker').css("width", "180");
|
||||
$('#daterangepicker').css("width", "210");
|
||||
var start_date = "<?= date('Y-m-d') ?>";
|
||||
var end_date = "<?= date('Y-m-d') ?>";
|
||||
|
||||
$('#daterangepicker').daterangepicker({
|
||||
"ranges": {
|
||||
"<?= lang('Datepicker.today') ?>": [
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), date("d"), date("Y"))) ?>",
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), date("d") + 1, date("Y")) - 1) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.today_last_year') ?>": [
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), date("d"), date("Y") - 1)) ?>",
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), date("d") + 1, date("Y") - 1) - 1) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.yesterday') ?>": [
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), date("d") - 1, date("Y"))) ?>",
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), date("d"), date("Y")) - 1) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.last_7') ?>": [
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), date("d") - 6, date("Y"))) ?>",
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), date("d") + 1, date("Y")) - 1) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.last_30') ?>": [
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), date("d") - 29, date("Y"))) ?>",
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), date("d") + 1, date("Y")) - 1) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.this_month') ?>": [
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), 1, date("Y"))) ?>",
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m") + 1, 1, date("Y")) - 1) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.same_month_to_same_day_last_year') ?>": [
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), 1, date("Y") - 1)) ?>",
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), date("d") + 1, date("Y") - 1) - 1) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.same_month_last_year') ?>": [
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), 1, date("Y") - 1)) ?>",
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m") + 1, 1, date("Y") - 1) - 1) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.last_month') ?>": [
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m") - 1, 1, date("Y"))) ?>",
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), 1, date("Y")) - 1) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.this_year') ?>": [
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, 1, 1, date("Y"))) ?>",
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), 1, date("Y") + 1) - 1) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.last_year') ?>": [
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, 1, 1, date("Y") - 1)) ?>",
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, 1, 1, date("Y")) - 1) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.this_financial_year') ?>": [
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, $config['financial_year'], 1, date("Y"))) ?>",
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), 1, date("Y") + 1) - 1) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.last_financial_year') ?>": [
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, $config['financial_year'], 1, date("Y") - 1)) ?>",
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, $config['financial_year'], 1, date("Y")) - 1) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.all_time') ?>": [
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, 1, 1, 2010)) ?>",
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), date("d") + 1, date("Y")) - 1) ?>"
|
||||
],
|
||||
"ranges": {
|
||||
"<?= lang('Datepicker.today') ?>": [
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), date("d"), date("Y"))) ?>",
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), date("d") + 1, date("Y")) - 1) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.today_last_year') ?>": [
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), date("d"), date("Y") - 1)) ?>",
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), date("d") + 1, date("Y") - 1) - 1) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.yesterday') ?>": [
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), date("d") - 1, date("Y"))) ?>",
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), date("d"), date("Y")) - 1) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.last_7') ?>": [
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), date("d") - 6, date("Y"))) ?>",
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), date("d") + 1, date("Y")) - 1) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.last_30') ?>": [
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), date("d") - 29, date("Y"))) ?>",
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), date("d") + 1, date("Y")) - 1) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.this_month') ?>": [
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), 1, date("Y"))) ?>",
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m") + 1, 1, date("Y")) - 1) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.same_month_to_same_day_last_year') ?>": [
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), 1, date("Y") - 1)) ?>",
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), date("d") + 1, date("Y") - 1) - 1) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.same_month_last_year') ?>": [
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), 1, date("Y") - 1)) ?>",
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m") + 1, 1, date("Y") - 1) - 1) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.last_month') ?>": [
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m") - 1, 1, date("Y"))) ?>",
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), 1, date("Y")) - 1) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.this_year') ?>": [
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, 1, 1, date("Y"))) ?>",
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), 1, date("Y") + 1) - 1) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.last_year') ?>": [
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, 1, 1, date("Y") - 1)) ?>",
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, 1, 1, date("Y")) - 1) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.this_financial_year') ?>": [
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, $config['financial_year'], 1, date("Y"))) ?>",
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), 1, date("Y") + 1) - 1) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.last_financial_year') ?>": [
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, $config['financial_year'], 1, date("Y") - 1)) ?>",
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, $config['financial_year'], 1, date("Y")) - 1) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.all_time') ?>": [
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, 1, 1, 2010)) ?>",
|
||||
"<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), date("d") + 1, date("Y")) - 1) ?>"
|
||||
],
|
||||
},
|
||||
"locale": {
|
||||
"format": '<?= dateformat_momentjs($config['dateformat']) ?>',
|
||||
"separator": " - ",
|
||||
"applyLabel": "<?= lang('Datepicker.apply') ?>",
|
||||
"cancelLabel": "<?= lang('Datepicker.cancel') ?>",
|
||||
"fromLabel": "<?= lang('Datepicker.from') ?>",
|
||||
"toLabel": "<?= lang('Datepicker.to') ?>",
|
||||
"customRangeLabel": "<?= lang('Datepicker.custom') ?>",
|
||||
"daysOfWeek": [
|
||||
"<?= lang('Calendar.su') ?>",
|
||||
"<?= lang('Calendar.mo') ?>",
|
||||
"<?= lang('Calendar.tu') ?>",
|
||||
"<?= lang('Calendar.we') ?>",
|
||||
"<?= lang('Calendar.th') ?>",
|
||||
"<?= lang('Calendar.fr') ?>",
|
||||
"<?= lang('Calendar.sa') ?>"
|
||||
],
|
||||
"monthNames": [
|
||||
"<?= lang('Calendar.january') ?>",
|
||||
"<?= lang('Calendar.february') ?>",
|
||||
"<?= lang('Calendar.march') ?>",
|
||||
"<?= lang('Calendar.april') ?>",
|
||||
"<?= lang('Calendar.may') ?>",
|
||||
"<?= lang('Calendar.june') ?>",
|
||||
"<?= lang('Calendar.july') ?>",
|
||||
"<?= lang('Calendar.august') ?>",
|
||||
"<?= lang('Calendar.september') ?>",
|
||||
"<?= lang('Calendar.october') ?>",
|
||||
"<?= lang('Calendar.november') ?>",
|
||||
"<?= lang('Calendar.december') ?>"
|
||||
],
|
||||
"firstDay": <?= lang('Datepicker.weekstart') ?>
|
||||
},
|
||||
"alwaysShowCalendars": true,
|
||||
"startDate": "<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), date("d") + 1, date("Y")) - 1) ?>",
|
||||
"endDate": "<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), date("d") + 1, date("Y")) - 1) ?>",
|
||||
"minDate": "<?= date($config['dateformat'], mktime(0, 0, 0, 01, 01, 2010)) ?>",
|
||||
"maxDate": "<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), date("d") + 1, date("Y")) - 1) ?>",
|
||||
"buttonClasses": "btn",
|
||||
"applyButtonClasses": "btn-primary",
|
||||
"cancelClass": "btn-secondary"
|
||||
},
|
||||
"locale": {
|
||||
"format": '<?= dateformat_momentjs($config['dateformat']) ?>',
|
||||
"separator": " - ",
|
||||
"applyLabel": "<?= lang('Datepicker.apply') ?>",
|
||||
"cancelLabel": "<?= lang('Datepicker.cancel') ?>",
|
||||
"fromLabel": "<?= lang('Datepicker.from') ?>",
|
||||
"toLabel": "<?= lang('Datepicker.to') ?>",
|
||||
"customRangeLabel": "<?= lang('Datepicker.custom') ?>",
|
||||
"daysOfWeek": [
|
||||
"<?= lang('Calendar.su') ?>",
|
||||
"<?= lang('Calendar.mo') ?>",
|
||||
"<?= lang('Calendar.tu') ?>",
|
||||
"<?= lang('Calendar.we') ?>",
|
||||
"<?= lang('Calendar.th') ?>",
|
||||
"<?= lang('Calendar.fr') ?>",
|
||||
"<?= lang('Calendar.sa') ?>"
|
||||
],
|
||||
"monthNames": [
|
||||
"<?= lang('Calendar.january') ?>",
|
||||
"<?= lang('Calendar.february') ?>",
|
||||
"<?= lang('Calendar.march') ?>",
|
||||
"<?= lang('Calendar.april') ?>",
|
||||
"<?= lang('Calendar.may') ?>",
|
||||
"<?= lang('Calendar.june') ?>",
|
||||
"<?= lang('Calendar.july') ?>",
|
||||
"<?= lang('Calendar.august') ?>",
|
||||
"<?= lang('Calendar.september') ?>",
|
||||
"<?= lang('Calendar.october') ?>",
|
||||
"<?= lang('Calendar.november') ?>",
|
||||
"<?= lang('Calendar.december') ?>"
|
||||
],
|
||||
"firstDay": <?= lang('Datepicker.weekstart') ?>
|
||||
},
|
||||
"alwaysShowCalendars": true,
|
||||
"startDate": "<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), date("d") + 1, date("Y")) - 1) ?>",
|
||||
"endDate": "<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), date("d") + 1, date("Y")) - 1) ?>",
|
||||
"minDate": "<?= date($config['dateformat'], mktime(0, 0, 0, 01, 01, 2010)) ?>",
|
||||
"maxDate": "<?= date($config['dateformat'], mktime(0, 0, 0, date("m"), date("d") + 1, date("Y")) - 1) ?>"
|
||||
}, function(start, end, label) {
|
||||
start_date = start.format('YYYY-MM-DD');
|
||||
end_date = end.format('YYYY-MM-DD');
|
||||
function(start, end, label) {
|
||||
start_date = start.format('YYYY-MM-DD');
|
||||
end_date = end.format('YYYY-MM-DD');
|
||||
});
|
||||
<?php } else { ?>
|
||||
$('#daterangepicker').css("width", "305");
|
||||
var start_date = "<?= date('Y-m-d H:i:s', mktime(0, 0, 0, date("m"), date("d"), date("Y"))) ?>";
|
||||
var end_date = "<?= date('Y-m-d H:i:s', mktime(23, 59, 59, date("m"), date("d"), date("Y"))) ?>";
|
||||
$('#daterangepicker').daterangepicker({
|
||||
"ranges": {
|
||||
"<?= lang('Datepicker.today') ?>": [
|
||||
"<?= date($config['dateformat'] . ' ' . $config['dateformat'], mktime(0, 0, 0, date("m"), date("d"), date("Y"))) ?>",
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(23, 59, 59, date("m"), date("d"), date("Y"))) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.today_last_year') ?>": [
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(0, 0, 0, date("m"), date("d"), date("Y") - 1)) ?>",
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(23, 59, 59, date("m"), date("d"), date("Y") - 1)) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.yesterday') ?>": [
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(0, 0, 0, date("m"), date("d") - 1, date("Y"))) ?>",
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(23, 59, 59, date("m"), date("d") - 1, date("Y"))) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.last_7') ?>": [
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(0, 0, 0, date("m"), date("d") - 6, date("Y"))) ?>",
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(23, 59, 59, date("m"), date("d"), date("Y"))) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.last_30') ?>": [
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(0, 0, 0, date("m"), date("d") - 29, date("Y"))) ?>",
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(23, 59, 59, date("m"), date("d"), date("Y"))) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.this_month') ?>": [
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(0, 0, 0, date("m"), 1, date("Y"))) ?>",
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(23, 59, 59, date("m"), date("d"), date("Y"))) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.same_month_to_same_day_last_year') ?>": [
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(0, 0, 0, date("m"), 1, date("Y") - 1)) ?>",
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(23, 59, 59, date("m"), date("d"), date("Y") - 1)) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.same_month_last_year') ?>": [
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(0, 0, 0, date("m"), 1, date("Y") - 1)) ?>",
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(23, 59, 59, date("m") + 1, 0, date("Y") - 1)) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.last_month') ?>": [
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(0, 0, 0, date("m") - 1, 1, date("Y"))) ?>",
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(23, 59, 59, date("m"), 0, date("Y"))) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.this_year') ?>": [
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(0, 0, 0, 1, 1, date("Y"))) ?>",
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(23, 59, 59, date("m") + 1, 0, date("Y"))) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.last_year') ?>": [
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(0, 0, 0, 1, 1, date("Y") - 1)) ?>",
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(23, 59, 59, 12, 31, date("Y") - 1)) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.this_financial_year') ?>": [
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(0, 0, 0, $config['financial_year'], 1, date("Y"))) ?>",
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(23, 59, 59, date("m") + 1, 0, date("Y"))) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.last_financial_year') ?>": [
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(0, 0, 0, $config['financial_year'], 1, date("Y") - 1)) ?>",
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(23, 59, 59, $config['financial_year'], 0, date("Y"))) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.all_time') ?>": [
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(0, 0, 0, 1, 1, 2010)) ?>",
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(23, 59, 59, date("m"), date("d"), date("Y"))) ?>"
|
||||
],
|
||||
"ranges": {
|
||||
"<?= lang('Datepicker.today') ?>": [
|
||||
"<?= date($config['dateformat'] . ' ' . $config['dateformat'], mktime(0, 0, 0, date("m"), date("d"), date("Y"))) ?>",
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(23, 59, 59, date("m"), date("d"), date("Y"))) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.today_last_year') ?>": [
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(0, 0, 0, date("m"), date("d"), date("Y") - 1)) ?>",
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(23, 59, 59, date("m"), date("d"), date("Y") - 1)) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.yesterday') ?>": [
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(0, 0, 0, date("m"), date("d") - 1, date("Y"))) ?>",
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(23, 59, 59, date("m"), date("d") - 1, date("Y"))) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.last_7') ?>": [
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(0, 0, 0, date("m"), date("d") - 6, date("Y"))) ?>",
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(23, 59, 59, date("m"), date("d"), date("Y"))) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.last_30') ?>": [
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(0, 0, 0, date("m"), date("d") - 29, date("Y"))) ?>",
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(23, 59, 59, date("m"), date("d"), date("Y"))) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.this_month') ?>": [
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(0, 0, 0, date("m"), 1, date("Y"))) ?>",
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(23, 59, 59, date("m"), date("d"), date("Y"))) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.same_month_to_same_day_last_year') ?>": [
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(0, 0, 0, date("m"), 1, date("Y") - 1)) ?>",
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(23, 59, 59, date("m"), date("d"), date("Y") - 1)) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.same_month_last_year') ?>": [
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(0, 0, 0, date("m"), 1, date("Y") - 1)) ?>",
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(23, 59, 59, date("m") + 1, 0, date("Y") - 1)) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.last_month') ?>": [
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(0, 0, 0, date("m") - 1, 1, date("Y"))) ?>",
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(23, 59, 59, date("m"), 0, date("Y"))) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.this_year') ?>": [
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(0, 0, 0, 1, 1, date("Y"))) ?>",
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(23, 59, 59, date("m") + 1, 0, date("Y"))) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.last_year') ?>": [
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(0, 0, 0, 1, 1, date("Y") - 1)) ?>",
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(23, 59, 59, 12, 31, date("Y") - 1)) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.this_financial_year') ?>": [
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(0, 0, 0, $config['financial_year'], 1, date("Y"))) ?>",
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(23, 59, 59, date("m") + 1, 0, date("Y"))) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.last_financial_year') ?>": [
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(0, 0, 0, $config['financial_year'], 1, date("Y") - 1)) ?>",
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(23, 59, 59, $config['financial_year'], 0, date("Y"))) ?>"
|
||||
],
|
||||
"<?= lang('Datepicker.all_time') ?>": [
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(0, 0, 0, 1, 1, 2010)) ?>",
|
||||
"<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(23, 59, 59, date("m"), date("d"), date("Y"))) ?>"
|
||||
],
|
||||
},
|
||||
"locale": {
|
||||
"format": '<?= dateformat_momentjs($config['dateformat'] . ' ' . $config['timeformat']) ?>',
|
||||
"separator": " - ",
|
||||
"applyLabel": "<?= lang('Datepicker.apply') ?>",
|
||||
"cancelLabel": "<?= lang('Datepicker.cancel') ?>",
|
||||
"fromLabel": "<?= lang('Datepicker.from') ?>",
|
||||
"toLabel": "<?= lang('Datepicker.to') ?>",
|
||||
"customRangeLabel": "<?= lang('Datepicker.custom') ?>",
|
||||
"daysOfWeek": [
|
||||
"<?= lang('Calendar.su') ?>",
|
||||
"<?= lang('Calendar.mo') ?>",
|
||||
"<?= lang('Calendar.tu') ?>",
|
||||
"<?= lang('Calendar.we') ?>",
|
||||
"<?= lang('Calendar.th') ?>",
|
||||
"<?= lang('Calendar.fr') ?>",
|
||||
"<?= lang('Calendar.sa') ?>"
|
||||
],
|
||||
"monthNames": [
|
||||
"<?= lang('Calendar.january') ?>",
|
||||
"<?= lang('Calendar.february') ?>",
|
||||
"<?= lang('Calendar.march') ?>",
|
||||
"<?= lang('Calendar.april') ?>",
|
||||
"<?= lang('Calendar.may') ?>",
|
||||
"<?= lang('Calendar.june') ?>",
|
||||
"<?= lang('Calendar.july') ?>",
|
||||
"<?= lang('Calendar.august') ?>",
|
||||
"<?= lang('Calendar.september') ?>",
|
||||
"<?= lang('Calendar.october') ?>",
|
||||
"<?= lang('Calendar.november') ?>",
|
||||
"<?= lang('Calendar.december') ?>"
|
||||
],
|
||||
"firstDay": <?= lang('Datepicker.weekstart') ?>
|
||||
"format": '<?= dateformat_momentjs($config['dateformat'] . ' ' . $config['timeformat']) ?>',
|
||||
"separator": " - ",
|
||||
"applyLabel": "<?= lang('Datepicker.apply') ?>",
|
||||
"cancelLabel": "<?= lang('Datepicker.cancel') ?>",
|
||||
"fromLabel": "<?= lang('Datepicker.from') ?>",
|
||||
"toLabel": "<?= lang('Datepicker.to') ?>",
|
||||
"customRangeLabel": "<?= lang('Datepicker.custom') ?>",
|
||||
"daysOfWeek": [
|
||||
"<?= lang('Calendar.su') ?>",
|
||||
"<?= lang('Calendar.mo') ?>",
|
||||
"<?= lang('Calendar.tu') ?>",
|
||||
"<?= lang('Calendar.we') ?>",
|
||||
"<?= lang('Calendar.th') ?>",
|
||||
"<?= lang('Calendar.fr') ?>",
|
||||
"<?= lang('Calendar.sa') ?>"
|
||||
],
|
||||
"monthNames": [
|
||||
"<?= lang('Calendar.january') ?>",
|
||||
"<?= lang('Calendar.february') ?>",
|
||||
"<?= lang('Calendar.march') ?>",
|
||||
"<?= lang('Calendar.april') ?>",
|
||||
"<?= lang('Calendar.may') ?>",
|
||||
"<?= lang('Calendar.june') ?>",
|
||||
"<?= lang('Calendar.july') ?>",
|
||||
"<?= lang('Calendar.august') ?>",
|
||||
"<?= lang('Calendar.september') ?>",
|
||||
"<?= lang('Calendar.october') ?>",
|
||||
"<?= lang('Calendar.november') ?>",
|
||||
"<?= lang('Calendar.december') ?>"
|
||||
],
|
||||
"firstDay": <?= lang('Datepicker.weekstart') ?>
|
||||
},
|
||||
"timePicker": true,
|
||||
"timePickerSeconds": true,
|
||||
@@ -212,9 +216,13 @@
|
||||
"startDate": "<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(0, 0, 0, date("m"), date("d"), date("Y"))) ?>",
|
||||
"endDate": "<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(23, 59, 59, date("m"), date("d"), date("Y"))) ?>",
|
||||
"minDate": "<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(0, 0, 0, 01, 01, 2010)) ?>",
|
||||
"maxDate": "<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(23, 59, 59, date("m"), date("d"), date("Y"))) ?>"
|
||||
}, function(start, end, label) {
|
||||
start_date = start.format('YYYY-MM-DD HH:mm:ss');
|
||||
end_date = end.format('YYYY-MM-DD HH:mm:ss');
|
||||
"maxDate": "<?= date($config['dateformat'] . ' ' . $config['timeformat'], mktime(23, 59, 59, date("m"), date("d"), date("Y"))) ?>",
|
||||
"buttonClasses": "btn",
|
||||
"applyButtonClasses": "btn-primary",
|
||||
"cancelClass": "btn-secondary"
|
||||
},
|
||||
function(start, end, label) {
|
||||
start_date = start.format('YYYY-MM-DD HH:mm:ss');
|
||||
end_date = end.format('YYYY-MM-DD HH:mm:ss');
|
||||
});
|
||||
<?php } ?>
|
||||
|
||||
@@ -4,6 +4,10 @@
|
||||
*/
|
||||
?>
|
||||
|
||||
<span class="d-flex justify-content-start add_dinner_table">
|
||||
<button class="btn btn-outline-success mb-3" type="button"><i class="bi bi-plus-lg"></i> Add table</button> <!-- TODO-BS5 translate -->
|
||||
</span>
|
||||
|
||||
<?php
|
||||
$i = 0;
|
||||
|
||||
@@ -13,24 +17,13 @@ foreach ($dinner_tables as $table_key => $table) {
|
||||
++$i;
|
||||
?>
|
||||
|
||||
<div class="form-group form-group-sm" style="<?= $table['deleted'] ? 'display: none;' : 'display: block;' ?>">
|
||||
<?= form_label(lang('Config.dinner_table') . " $i", "dinner_table_$i", ['class' => 'required control-label col-xs-2']) ?>
|
||||
|
||||
|
||||
<div class="col-xs-2">
|
||||
<?php $form_data = [
|
||||
'name' => "dinner_table_$dinner_table_id",
|
||||
'id' => "dinner_table_$dinner_table_id",
|
||||
'class' => 'dinner_table valid_chars form-control input-sm required',
|
||||
'value' => $dinner_table_name
|
||||
];
|
||||
$table['deleted'] && $form_data['disabled'] = 'disabled';
|
||||
echo form_input($form_data);
|
||||
?>
|
||||
<div class="col-12 col-lg-6 <?= $table['deleted'] ? 'd-none' : '' ?>">
|
||||
<label for="dinner_table_<?= $dinner_table_id ?>" class="form-label"><?= lang('Config.dinner_table') . " $i"; ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><?= $dinner_table_id ?>.</span>
|
||||
<input type="text" class="form-control dinner_table valid_chars" name="dinner_table_<?= $dinner_table_id ?>" id="dinner_table_<?= $dinner_table_id ?>" value="<?= $dinner_table_name ?>" required <?= $table['deleted'] && $form_data['disabled'] = 'disabled' ?>>
|
||||
<button class="btn btn-outline-danger remove_dinner_table" type="button"><i class="bi bi-x-lg"></i></button>
|
||||
</div>
|
||||
<span class="add_dinner_table bi bi-plus-circle" style="padding-top: 0.5em; display: inline-block; cursor: pointer;"></span>
|
||||
<span> </span>
|
||||
<span class="remove_dinner_table bi bi-dash-circle" style="padding-top: 0.5em; display: inline-block; cursor: pointer;"></span>
|
||||
</div>
|
||||
|
||||
<?php } ?>
|
||||
|
||||
@@ -4,21 +4,27 @@ use Config\OSPOS;
|
||||
|
||||
?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<div id="footer">
|
||||
<div class="jumbotron push-spaces">
|
||||
<strong>
|
||||
<?= lang('Common.copyrights', [date('Y')]) ?> ·
|
||||
<a href="https://opensourcepos.org" target="_blank"><?= lang('Common.website') ?></a> ·
|
||||
<?= esc(config('App')->application_version) ?> -
|
||||
<a target="_blank" href="https://github.com/opensourcepos/opensourcepos/commit/<?= esc(config(OSPOS::class)->commit_sha1) ?>">
|
||||
<?= esc(substr(config(OSPOS::class)->commit_sha1, 0, 6)); ?>
|
||||
</a>
|
||||
</strong>.
|
||||
<footer class="flex-shrink-0 text-body-secondary small fw-semibold bg-secondary-subtle py-3 d-print-none">
|
||||
<div class="container-lg d-flex flex-wrap justify-content-center align-items-center">
|
||||
<div>
|
||||
<span><?= lang('Common.copyrights', [date('Y')]) ?></span>
|
||||
</div>
|
||||
<div>
|
||||
<span class="d-none d-xl-block"> · <a href="https://opensourcepos.org" class="text-body-secondary" target="_blank" rel="noopener"><?= lang('Common.website') ?></a> · </span>
|
||||
<span class="d-xl-none"> · <?= lang('Common.website') ?> · </span>
|
||||
</div>
|
||||
<div>
|
||||
<span><?= esc(config('App')->application_version) ?> -</span>
|
||||
<span class="d-none d-xl-inline"><a href="https://github.com/opensourcepos/opensourcepos/commit/<?= esc(config(OSPOS::class)->commit_sha1) ?>" class="text-body-secondary" target="_blank" rel="noopener"><?= esc(substr(config(OSPOS::class)->commit_sha1, 0, 6)); ?></a></span>
|
||||
<span class="d-xl-none"><?= esc(substr(config(OSPOS::class)->commit_sha1, 0, 6)); ?></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script type="text/javascript" src="js/bs-tooltips.js"></script>
|
||||
<script type="text/javascript" src="js/bs-modal_switch_content.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
@@ -9,93 +9,77 @@
|
||||
use Config\Services;
|
||||
|
||||
$request = Services::request();
|
||||
|
||||
// Services::language()->setLocale('de-DE');
|
||||
?>
|
||||
|
||||
<!doctype html>
|
||||
<html lang="<?= $request->getLocale() ?>">
|
||||
<html lang="<?= current_language_code() ?>" data-bs-theme="<?= $config['color_mode'] ?>" <?= $config['rtl_language'] == 1 ? 'dir="rtl"' : '' ?>>
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<base href="<?= base_url() ?>">
|
||||
<title><?= esc($config['company']) . ' | ' . lang('Common.powered_by') . ' OSPOS ' . esc(config('App')->application_version) ?></title>
|
||||
<?= $config['responsive_design'] == 1 ? '<meta name="viewport" content="width=device-width, initial-scale=1">' : '' ?>
|
||||
<meta name="robots" content="noindex, nofollow">
|
||||
<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico">
|
||||
<link rel="stylesheet" href="<?= 'resources/bootswatch/' . (empty($config['theme']) ? 'flatly' : esc($config['theme'])) . '/bootstrap.min.css' ?>">
|
||||
<?php $theme = (empty($config['theme']) ? 'flatly' : esc($config['theme'])); ?>
|
||||
<link rel="stylesheet" href="resources/bootswatch/<?= "$theme" ?>/bootstrap<?= $config['rtl_language'] == 1 ? '.rtl' : '' ?>.min.css">
|
||||
<link rel="stylesheet" href="resources/bootstrap-icons/bootstrap-icons.min.css">
|
||||
|
||||
<?php if (ENVIRONMENT == 'development' || get_cookie('debug') == 'true' || $request->getGet('debug') == 'true') : ?>
|
||||
<!-- inject:debug:css -->
|
||||
<!-- endinject -->
|
||||
<!-- inject:debug:js -->
|
||||
<!-- endinject -->
|
||||
<?php else : ?>
|
||||
<!--inject:prod:css -->
|
||||
<!-- endinject -->
|
||||
|
||||
<!-- Tweaks to the UI for a particular theme should drop here -->
|
||||
<?php if ($config['theme'] != 'flatly' && file_exists($_SERVER['DOCUMENT_ROOT'] . '/public/css/' . esc($config['theme']) . '.css')) { ?>
|
||||
<link rel="stylesheet" href="<?= 'css/' . esc($config['theme']) . '.css' ?>">
|
||||
<?php } ?>
|
||||
<!-- inject:prod:js -->
|
||||
<!-- endinject -->
|
||||
<?php endif; ?>
|
||||
<!-- inject:debug:css -->
|
||||
<!-- endinject -->
|
||||
<!-- inject:debug:js -->
|
||||
<!-- endinject -->
|
||||
|
||||
<?= view('partial/header_js') ?>
|
||||
<?= view('partial/lang_lines') ?>
|
||||
|
||||
<style>
|
||||
html {
|
||||
overflow: auto;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="wrapper">
|
||||
<div class="topbar">
|
||||
<div class="container">
|
||||
<div class="navbar-left">
|
||||
<div id="liveclock"><?= date($config['dateformat'] . ' ' . $config['timeformat']) ?></div>
|
||||
</div>
|
||||
|
||||
<div class="navbar-right" style="margin: 0;">
|
||||
<?= anchor("home/changePassword/$user_info->person_id", "$user_info->first_name $user_info->last_name", ['class' => 'modal-dlg', 'data-btn-submit' => lang('Common.submit'), 'title' => lang('Employees.change_password')]) ?>
|
||||
<span> | </span>
|
||||
<?= anchor('home/logout', lang('Login.logout')) ?>
|
||||
</div>
|
||||
|
||||
<div class="navbar-center" style="text-align: center;">
|
||||
<strong><?= esc($config['company']) ?></strong>
|
||||
</div>
|
||||
<body class="d-flex flex-column">
|
||||
<header class="flex-shrink-0 small bg-secondary-subtle py-1 d-print-none">
|
||||
<div class="container-lg container-navbar d-flex flex-wrap-reverse justify-content-between align-items-center">
|
||||
<div class="flex-grow-1 d-none d-md-block ps-md-3 ps-lg-0">
|
||||
<span id="liveclock"><?= date($config['dateformat'] . ' ' . $config['timeformat']) ?></span>
|
||||
</div>
|
||||
<div class="fw-bold ps-3 ps-md-0">
|
||||
<?= esc($config['company']) ?>
|
||||
</div>
|
||||
<div class="flex-grow-1 text-end pe-3 pe-lg-0">
|
||||
<button type="button" class="btn btn-sm btn-outline-primary" onclick="removeAnimationBg()" data-bs-toggle="modal" data-bs-target="#profile-modal" title="<?= lang('Employees.change_password'); ?>">
|
||||
<?= $user_info->first_name . ' ' . $user_info->last_name; ?>
|
||||
</button>
|
||||
<?= view('home/profile'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="navbar navbar-default" role="navigation">
|
||||
<div class="container">
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<nav class="navbar navbar-dark navbar-expand-lg bg-primary py-0 d-print-none">
|
||||
<div class="container-lg container-navbar">
|
||||
<a class="navbar-brand py-2 pe-1 ps-3 ps-lg-0 fs-4" href="<?= site_url() ?>"><i class="bi bi-house-fill"></i></a>
|
||||
<button class="navbar-toggler my-2 mx-3" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbar" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
|
||||
<a class="navbar-brand hidden-sm" href="<?= site_url() ?>">OSPOS</a>
|
||||
</div>
|
||||
|
||||
<div class="navbar-collapse collapse">
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<?php foreach ($allowed_modules as $module): ?>
|
||||
<li class="<?= $module->module_id == $request->getUri()->getSegment(1) ? 'active' : '' ?>">
|
||||
<a href="<?= base_url($module->module_id) ?>" title="<?= lang("Module.$module->module_id") ?>" class="menu-icon">
|
||||
<img src="<?= base_url("images/menubar/$module->module_id.svg") ?>" style="border: none;" alt="Module Icon"><br>
|
||||
<?= lang('Module.' . $module->module_id) ?>
|
||||
</a>
|
||||
</li>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="collapse navbar-collapse" id="navbar">
|
||||
<ul class="navbar-nav ms-0 ms-lg-auto">
|
||||
<?php foreach($allowed_modules as $module): ?>
|
||||
<li class="d-none d-lg-block nav-item ms-1 <?= $module->module_id == $request->getUri()->getSegment(1) ? 'active bg-light bg-opacity-25' : '' ?>" data-bs-toggle="tooltip" data-bs-placement="bottom" title="<?= lang("Module.$module->module_id") ?>">
|
||||
<a class="nav-link p-2" href="<?= base_url($module->module_id) ?>">
|
||||
<img src="<?= base_url("images/menubar/$module->module_id.svg") ?>" alt="<?= lang('Common.icon') . ' ' . lang("Module.$module->module_id") ?>">
|
||||
</a>
|
||||
</li>
|
||||
<li class="d-lg-none nav-item py-1 <?= $module->module_id == $request->getUri()->getSegment(1) ? 'active bg-light bg-opacity-25' : '' ?>">
|
||||
<a class="nav-link p-0" href="<?= base_url($module->module_id) ?>">
|
||||
<img class="ps-3 pe-1 my-1" src="<?= base_url("images/menubar/$module->module_id.svg") ?>" alt="<?= lang('Common.icon') . ' ' . lang("Module.$module->module_id") ?>">
|
||||
<span class="align-middle text-light"><?= lang("Module.$module->module_id") ?></span>
|
||||
</a>
|
||||
</li>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<main class="container-lg flex-grow-1 py-3">
|
||||
|
||||
@@ -4,6 +4,10 @@
|
||||
*/
|
||||
?>
|
||||
|
||||
<span class="d-flex justify-content-start add_stock_location">
|
||||
<button class="btn btn-outline-success mb-3" type="button"><i class="bi bi-plus-lg"></i> Add location</button> <!-- TODO-BS5 translate -->
|
||||
</span>
|
||||
|
||||
<?php
|
||||
$i = 0;
|
||||
|
||||
@@ -13,22 +17,13 @@ foreach ($stock_locations as $location => $location_data) {
|
||||
++$i;
|
||||
?>
|
||||
|
||||
<div class="form-group form-group-sm" style="<?= $location_data['deleted'] ? 'display: none;' : 'display: block;' ?>">
|
||||
<?= form_label(lang('Config.stock_location') . " $i", "stock_location_$i", ['class' => 'required control-label col-xs-2']) ?>
|
||||
<div class="col-xs-2">
|
||||
<?php $form_data = [
|
||||
'name' => "stock_location[$location_id]",
|
||||
'id' => "stock_location[$location_id]",
|
||||
'class' => 'stock_location valid_chars form-control input-sm required',
|
||||
'value' => $location_name
|
||||
];
|
||||
$location_data['deleted'] && $form_data['disabled'] = 'disabled';
|
||||
echo form_input($form_data);
|
||||
?>
|
||||
</div>
|
||||
<span class="add_stock_location bi bi-plus-circle" style="padding-top: 0.5em; display: inline-block; cursor: pointer;"></span>
|
||||
<span> </span>
|
||||
<span class="remove_stock_location bi bi-dash-circle" style="padding-top: 0.5em; display: inline-block; cursor: pointer;"></span>
|
||||
<div class="col-12 col-lg-6 <?= $location_data['deleted'] ? 'd-none' : '' ?>">
|
||||
<label for="stock_location_<?= $i ?>" class="form-label"><?= lang('Config.stock_location') . " $i"; ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><?= $location_id ?>.</span>
|
||||
<input type="text" class="form-control stock_location valid_chars" name="stock_location<?= $location_id ?>" id="stock_location<?= $location_id ?>" value="<?= $location_name ?>" required <?= $location_data['deleted'] ? 'disabled' : '' ?>>
|
||||
<button class="btn btn-outline-danger remove_stock_location" type="button"><i class="bi bi-x-lg"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php } ?>
|
||||
|
||||
@@ -8,6 +8,11 @@
|
||||
|
||||
<?= view('partial/header') ?>
|
||||
|
||||
<?php
|
||||
$title_info['config_title'] = 'People';
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() {
|
||||
<?= view('partial/bootstrap_tables_locale') ?>
|
||||
@@ -32,24 +37,24 @@
|
||||
});
|
||||
</script>
|
||||
|
||||
<div id="title_bar" class="btn-toolbar">
|
||||
<?php if ($controller_name === 'customers') { ?>
|
||||
<button class="btn btn-info btn-sm pull-right modal-dlg" data-btn-submit="<?= lang('Common.submit') ?>" data-href="<?= "$controller_name/csvImport" ?>" title="<?= lang(ucfirst($controller_name) . '.import_items_csv') ?>">
|
||||
<i class="bi bi-file-earmark-arrow-down icon-spacing"></i><?= lang('Common.import_csv') ?>
|
||||
</button>
|
||||
<?php } ?>
|
||||
<button class="btn btn-info btn-sm pull-right modal-dlg" data-btn-submit="<?= lang('Common.submit') ?>" data-href="<?= "$controller_name/view" ?>" title="<?= lang(ucfirst($controller_name) . '.new') ?>">
|
||||
<i class="bi bi-person-add icon-spacing"></i><?= lang(ucfirst($controller_name) . '.new') ?>
|
||||
<div class="d-flex gap-2 justify-content-end">
|
||||
<button type="button" class="btn btn-primary" data-btn-submit="<?= lang('Common.submit') ?>" data-href="<?= '$controller_name/view' ?>" title="<?= lang(ucfirst($controller_name). '.new') ?>">
|
||||
<i class="bi bi-person-add me-2"></i><?= lang(ucfirst($controller_name) .".new") ?>
|
||||
</button>
|
||||
<?php if ($controller_name == 'customers') { ?>
|
||||
<button type="button" class="btn btn-primary" data-btn-submit="<?= lang('Common.submit') ?>" data-href="<?= '$controller_name/csvImport' ?>" title="<?= lang(ucfirst($controller_name) .'.import_items_csv') ?>">
|
||||
<i class="bi bi-file-earmark-arrow-down me-2"></i><?= lang('Common.import_csv') ?>
|
||||
</button>
|
||||
<?php } ?>
|
||||
</div>
|
||||
|
||||
<div id="toolbar">
|
||||
<div class="pull-left btn-toolbar">
|
||||
<button id="delete" class="btn btn-default btn-sm">
|
||||
<i class="bi bi-trash icon-spacing"></i><?= lang('Common.delete') ?>
|
||||
<div class="d-flex gap-2">
|
||||
<button type="button" class="btn btn-secondary">
|
||||
<i class="bi bi-trash"></i><span class="d-none d-sm-inline ms-2"><?= lang('Common.delete') ?></span>
|
||||
</button>
|
||||
<button id="email" class="btn btn-default btn-sm">
|
||||
<i class="bi bi-envelope icon-spacing"></i><?= lang('Common.email') ?>
|
||||
<button type="button" class="btn btn-secondary">
|
||||
<i class="bi bi-envelope"></i><span class="d-none d-sm-inline ms-2"><?= lang('Common.email') ?></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -28,9 +28,9 @@ echo view('partial/print_receipt', ['print_after_sale', $print_after_sale, 'sele
|
||||
|
||||
<div class="print_hide" id="control_buttons" style="text-align: right;">
|
||||
<a href="javascript:printdoc();">
|
||||
<div class="btn btn-info btn-sm" id="show_print_button"><?= '<i class="bi bi-printer icon-spacing"></i>' . lang('Common.print') ?></div>
|
||||
<div class="btn btn-info btn-sm" id="show_print_button"><?= '<i class="bi bi-printer me-2"></i>' . lang('Common.print') ?></div>
|
||||
</a>
|
||||
<?= anchor("receivings", '<i class="bi bi-box icon-spacing"></i>' . lang('Receivings.register'), ['class' => 'btn btn-info btn-sm', 'id' => 'show_sales_button']) ?>
|
||||
<?= anchor("receivings", '<i class="bi bi-box me-2"></i>' . lang('Receivings.register'), ['class' => 'btn btn-info btn-sm', 'id' => 'show_sales_button']) ?>
|
||||
</div>
|
||||
|
||||
<div id="receipt_wrapper">
|
||||
|
||||
@@ -93,7 +93,7 @@ if (isset($success)) {
|
||||
|
||||
<li class="pull-right">
|
||||
<button id="new_item_button" class="btn btn-info btn-sm pull-right modal-dlg" data-btn-submit="<?= lang('Common.submit') ?>" data-btn-new="<?= lang('Common.new') ?>" data-href="<?= "items/view" ?>" title="<?= lang('Sales.new_item') ?>">
|
||||
<i class="bi bi-tag icon-spacing"></i><?= lang('Sales.new_item') ?>
|
||||
<i class="bi bi-tag me-2"></i><?= lang('Sales.new_item') ?>
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -272,7 +272,7 @@ if (isset($success)) {
|
||||
|
||||
<?= anchor(
|
||||
"$controller_name/removeSupplier",
|
||||
'<i class="bi bi-x-circle icon-spacing"></i>' . lang('Common.remove') . ' ' . lang('Suppliers.supplier'),
|
||||
'<i class="bi bi-x-circle me-2"></i>' . lang('Common.remove') . ' ' . lang('Suppliers.supplier'),
|
||||
[
|
||||
'class' => 'btn btn-danger btn-sm',
|
||||
'id' => 'remove_supplier_button',
|
||||
@@ -296,7 +296,7 @@ if (isset($success)) {
|
||||
]) ?>
|
||||
|
||||
<button id="new_supplier_button" class="btn btn-info btn-sm modal-dlg" data-btn-submit="<?= lang('Common.submit') ?>" data-href="<?= "suppliers/view" ?>" title="<?= lang(ucfirst($controller_name) . '.new_supplier') ?>">
|
||||
<i class="bi bi-building-add icon-spacing"></i><?= lang(ucfirst($controller_name) . '.new_supplier') ?>
|
||||
<i class="bi bi-building-add me-2"></i><?= lang(ucfirst($controller_name) . '.new_supplier') ?>
|
||||
</button>
|
||||
|
||||
</div>
|
||||
@@ -334,10 +334,10 @@ if (isset($success)) {
|
||||
]) ?>
|
||||
|
||||
<div class="btn btn-sm btn-danger pull-left" id="cancel_receiving_button">
|
||||
<i class="bi bi-x-circle icon-spacing"></i><?= lang(ucfirst($controller_name) . '.cancel_receiving') ?>
|
||||
<i class="bi bi-x-circle me-2"></i><?= lang(ucfirst($controller_name) . '.cancel_receiving') ?>
|
||||
</div>
|
||||
<div class="btn btn-sm btn-success pull-right" id="finish_receiving_button">
|
||||
<i class="bi bi-check-circle icon-spacing"></i><?= lang(ucfirst($controller_name) . '.complete_receiving') ?>
|
||||
<i class="bi bi-check-circle me-2"></i><?= lang(ucfirst($controller_name) . '.complete_receiving') ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -415,10 +415,10 @@ if (isset($success)) {
|
||||
</div>
|
||||
|
||||
<div class="btn btn-sm btn-danger pull-left" id="cancel_receiving_button">
|
||||
<i class="bi bi-x-circle icon-spacing"></i><?= lang(ucfirst($controller_name) . '.cancel_receiving') ?>
|
||||
<i class="bi bi-x-circle me-2"></i><?= lang(ucfirst($controller_name) . '.cancel_receiving') ?>
|
||||
</div>
|
||||
<div class="btn btn-sm btn-success pull-right" id="finish_receiving_button">
|
||||
<i class="bi bi-check-circle icon-spacing"></i><?= lang(ucfirst($controller_name) . '.complete_receiving') ?>
|
||||
<i class="bi bi-check-circle me-2"></i><?= lang(ucfirst($controller_name) . '.complete_receiving') ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -7,12 +7,10 @@
|
||||
|
||||
<?= view('partial/header') ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
dialog_support.init("a.modal-dlg");
|
||||
</script>
|
||||
|
||||
|
||||
<div id="page_title"><?= lang('Reports.report_input') ?></div>
|
||||
<?php
|
||||
$title_info['config_title'] = lang('Reports.report_input');
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<?php
|
||||
if (isset($error)) {
|
||||
@@ -20,12 +18,15 @@ if (isset($error)) {
|
||||
}
|
||||
?>
|
||||
|
||||
<?= form_open('#', ['id' => 'item_form', 'enctype' => 'multipart/form-data', 'class' => 'form-horizontal']) ?>
|
||||
<?= form_open('#', ['id' => 'item_form', 'enctype' => 'multipart/form-data']) ?>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?= form_label(lang('Reports.date_range'), 'report_date_range_label', ['class' => 'control-label col-xs-2 required']) ?>
|
||||
<div class="col-xs-3">
|
||||
<?= form_input(['name' => 'daterangepicker', 'class' => 'form-control input-sm', 'id' => 'daterangepicker']) ?>
|
||||
<div class="row">
|
||||
<div class="col-12 col-md-6 col-lg-4">
|
||||
<label for="daterangepicker" class="form-label"><?= lang('Reports.date_range'); ?></label>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text"><i class="bi bi-calendar2-range"></i></span>
|
||||
<input type="text" class="form-control" name="daterangepicker" id="daterangepicker">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -79,7 +80,7 @@ if (isset($error)) {
|
||||
'name' => 'generate_report',
|
||||
'id' => 'generate_report',
|
||||
'content' => lang('Common.submit'),
|
||||
'class' => 'btn btn-primary btn-sm'
|
||||
'class' => 'btn btn-primary'
|
||||
]
|
||||
);
|
||||
?>
|
||||
|
||||
@@ -9,11 +9,10 @@
|
||||
|
||||
<?= view('partial/header') ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
dialog_support.init("a.modal-dlg");
|
||||
</script>
|
||||
|
||||
<div id="page_title"><?= esc($title) ?></div>
|
||||
<?php
|
||||
$title_info['config_title'] = esc($title);
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<div id="page_subtitle"><?= esc($subtitle) ?></div>
|
||||
|
||||
|
||||
@@ -7,11 +7,10 @@
|
||||
|
||||
<?= view('partial/header') ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
dialog_support.init("a.modal-dlg");
|
||||
</script>
|
||||
|
||||
<div id="page_title"><?= lang('Reports.report_input') ?></div>
|
||||
<?php
|
||||
$title_info['config_title'] = lang('Reports.report_input');
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<?php
|
||||
if (isset($error)) {
|
||||
|
||||
@@ -17,85 +17,75 @@ $detailed_reports = [
|
||||
|
||||
<?= view('partial/header') ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
dialog_support.init("a.modal-dlg");
|
||||
</script>
|
||||
|
||||
<?php
|
||||
if (isset($error)) {
|
||||
echo '<div class="alert alert-dismissible alert-danger">' . esc($error) . '</div>';
|
||||
}
|
||||
$title_info['config_title'] = 'Reports';
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<?php if (isset($error)) { ?>
|
||||
<div class="alert alert-danger alert-dismissible" role="alert">
|
||||
<?= esc($error) ?>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title"><i class="bi bi-bar-chart icon-spacing"></i><?= lang('Reports.graphical_reports') ?></h3>
|
||||
<div class="col-12 col-md-6 col-lg-4 mb-3">
|
||||
<div class="card bg-primary">
|
||||
<div class="card-header text-light text-truncate">
|
||||
<i class="bi bi-bar-chart me-2"></i><?= lang('Reports.graphical_reports'); ?>
|
||||
</div>
|
||||
<div class="list-group">
|
||||
<div class="list-group list-group-flush">
|
||||
<?php foreach ($permission_ids as $permission_id) {
|
||||
if (can_show_report($permission_id, ['inventory', 'receiving'])) {
|
||||
$link = get_report_link($permission_id, 'graphical_summary');
|
||||
?>
|
||||
<a class="list-group-item" href="<?= $link['path'] ?>"><?= $link['label'] ?></a>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
$link = get_report_link($permission_id, 'graphical_summary'); ?>
|
||||
<a class="list-group-item list-group-item-action text-truncate" href="<?= $link['path'] ?>"><?= $link['label'] ?></a>
|
||||
<?php }} ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title"><i class="bi bi-card-list icon-spacing"></i><?= lang('Reports.summary_reports') ?></h3>
|
||||
<div class="col-12 col-md-6 col-lg-4 mb-3">
|
||||
<div class="card bg-primary">
|
||||
<div class="card-header text-light text-truncate">
|
||||
<i class="bi bi-card-list me-2"></i><?= lang('Reports.summary_reports'); ?>
|
||||
</div>
|
||||
<div class="list-group">
|
||||
<div class="list-group list-group-flush">
|
||||
<?php foreach ($permission_ids as $permission_id) {
|
||||
if (can_show_report($permission_id, ['inventory', 'receiving'])) {
|
||||
$link = get_report_link($permission_id, 'summary');
|
||||
?>
|
||||
<a class="list-group-item" href="<?= $link['path'] ?>"><?= $link['label'] ?></a>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
$link = get_report_link($permission_id, 'summary'); ?>
|
||||
<a class="list-group-item list-group-item-action text-truncate" href="<?= $link['path'] ?>"><?= $link['label'] ?></a>
|
||||
<?php }} ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title"><i class="bi bi-card-checklist icon-spacing"></i><?= lang('Reports.detailed_reports') ?></h3>
|
||||
<div class="col-12 col-md-6 col-lg-4 mb-3">
|
||||
<div class="card bg-primary mb-3">
|
||||
<div class="card-header text-light text-truncate">
|
||||
<i class="bi bi-card-checklist me-2"></i><?= lang('Reports.detailed_reports') ?>
|
||||
</div>
|
||||
<div class="list-group">
|
||||
<div class="list-group list-group-flush">
|
||||
<?php foreach ($detailed_reports as $report_name => $prefix) {
|
||||
if (in_array($report_name, $permission_ids, true)) {
|
||||
$link = get_report_link($report_name, $prefix);
|
||||
?>
|
||||
<a class="list-group-item" href="<?= $link['path'] ?>"><?= $link['label'] ?></a>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
$link = get_report_link($report_name, $prefix); ?>
|
||||
<a class="list-group-item list-group-item-action text-truncate" href="<?= $link['path'] ?>"><?= $link['label'] ?></a>
|
||||
<?php }} ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php if (in_array('reports_inventory', $permission_ids, true)) { ?>
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title"><i class="bi bi-box icon-spacing"></i><?= lang('Reports.inventory_reports') ?></h3>
|
||||
<div class="card bg-primary">
|
||||
<div class="card-header text-light text-truncate">
|
||||
<i class="bi bi-box me-2"></i><?= lang('Reports.inventory_reports') ?>
|
||||
</div>
|
||||
<div class="list-group">
|
||||
<div class="list-group list-group-flush">
|
||||
<?php
|
||||
$inventory_low_report = get_report_link('reports_inventory_low');
|
||||
$inventory_summary_report = get_report_link('reports_inventory_summary');
|
||||
?>
|
||||
<a class="list-group-item" href="<?= $inventory_low_report['path'] ?>"><?= $inventory_low_report['label'] ?></a>
|
||||
<a class="list-group-item" href="<?= $inventory_summary_report['path'] ?>"><?= $inventory_summary_report['label'] ?></a>
|
||||
<a class="list-group-item list-group-item-action text-truncate" href="<?= $inventory_low_report['path'] ?>"><?= $inventory_low_report['label'] ?></a>
|
||||
<a class="list-group-item list-group-item-action text-truncate" href="<?= $inventory_summary_report['path'] ?>"><?= $inventory_summary_report['label'] ?></a>
|
||||
</div>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
@@ -9,11 +9,10 @@
|
||||
|
||||
<?= view('partial/header') ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
dialog_support.init("a.modal-dlg");
|
||||
</script>
|
||||
|
||||
<div id="page_title"><?= lang('Reports.report_input') ?></div>
|
||||
<?php
|
||||
$title_info['config_title'] = lang('Reports.report_input');
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<?php
|
||||
if (isset($error)) {
|
||||
|
||||
@@ -9,11 +9,11 @@
|
||||
|
||||
<?= view('partial/header') ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
dialog_support.init("a.modal-dlg");
|
||||
</script>
|
||||
|
||||
<div id="page_title"><?= lang('Reports.report_input') ?></div>
|
||||
<?php
|
||||
$title_info['config_title'] = lang('Reports.report_input');
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<?php
|
||||
if (isset($error)) {
|
||||
|
||||
@@ -11,11 +11,10 @@
|
||||
|
||||
<?= view('partial/header') ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
dialog_support.init("a.modal-dlg");
|
||||
</script>
|
||||
|
||||
<div id="page_title"><?= esc($title) ?></div>
|
||||
<?php
|
||||
$title_info['config_title'] = esc($title);
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<div id="page_subtitle"><?= esc($subtitle) ?></div>
|
||||
|
||||
@@ -55,10 +54,13 @@
|
||||
pagination: true,
|
||||
showColumns: true,
|
||||
data: <?= json_encode($data) ?>,
|
||||
iconSize: 'sm',
|
||||
paginationVAlign: 'bottom',
|
||||
escape: true,
|
||||
search: true
|
||||
search: true,
|
||||
loadingTemplate: function (loadingMessage) {
|
||||
return '<div class="w-100 h-100 bg-body text-center pt-2"><div class="spinner-grow spinner-grow-sm"></div><span class="ps-1" role="status">' + loadingMessage + '</span></div>'
|
||||
},
|
||||
loadingFontSize: '1em'
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -12,7 +12,10 @@
|
||||
|
||||
<?= view('partial/header') ?>
|
||||
|
||||
<div id="page_title"><?= esc($title) ?></div>
|
||||
<?php
|
||||
$title_info['config_title'] = esc($title);
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<div id="page_subtitle"><?= esc($subtitle) ?></div>
|
||||
|
||||
@@ -56,7 +59,10 @@
|
||||
exportDataType: 'all',
|
||||
exportTypes: ['json', 'xml', 'csv', 'txt', 'sql', 'excel', 'pdf'],
|
||||
data: <?= json_encode($summary_data) ?>,
|
||||
iconSize: 'sm',
|
||||
loadingTemplate: function (loadingMessage) {
|
||||
return '<div class="w-100 h-100 bg-body text-center pt-2"><div class="spinner-grow spinner-grow-sm"></div><span class="ps-1" role="status">' + loadingMessage + '</span></div>'
|
||||
},
|
||||
loadingFontSize: '1em',
|
||||
paginationVAlign: 'bottom',
|
||||
detailView: true,
|
||||
escape: true,
|
||||
|
||||
@@ -160,6 +160,7 @@
|
||||
function(response) {
|
||||
BootstrapDialog.closeAll();
|
||||
$.notify({
|
||||
icon: 'bi bi-bell-fill',
|
||||
message: response.message
|
||||
}, {
|
||||
type: response.success ? 'success' : 'danger'
|
||||
|
||||
@@ -36,6 +36,7 @@ if (isset($error_message)) {
|
||||
$.get('<?= site_url() . "sales/sendPdf/$sale_id_num" ?>',
|
||||
function(response) {
|
||||
$.notify({
|
||||
icon: 'bi bi-bell-fill',
|
||||
message: response.message
|
||||
}, {
|
||||
type: response.success ? 'success' : 'danger'
|
||||
@@ -57,20 +58,20 @@ if (isset($error_message)) {
|
||||
|
||||
<div class="print_hide" id="control_buttons" style="text-align: right;">
|
||||
<a href="javascript:printdoc();">
|
||||
<div class="btn btn-info btn-sm" id="show_print_button"><?= '<i class="bi bi-printer icon-spacing"></i>' . lang('Common.print') ?></div>
|
||||
<div class="btn btn-info btn-sm" id="show_print_button"><?= '<i class="bi bi-printer me-2"></i>' . lang('Common.print') ?></div>
|
||||
</a>
|
||||
<?php
|
||||
/* This line will allow to print and go back to sales automatically.
|
||||
* echo anchor('sales', '<i class="bi bi-printer icon-spacing"></i>' . lang('Common.print'), ['class' => 'btn btn-info btn-sm', 'id' => 'show_print_button', 'onclick' => 'window.print();'));
|
||||
* echo anchor('sales', '<i class="bi bi-printer me-2"></i>' . lang('Common.print'), ['class' => 'btn btn-info btn-sm', 'id' => 'show_print_button', 'onclick' => 'window.print();'));
|
||||
*/
|
||||
?>
|
||||
<?php if (isset($customer_email) && !empty($customer_email)): ?>
|
||||
<a href="javascript:void(0);">
|
||||
<div class="btn btn-info btn-sm" id="show_email_button"><?= '<i class="bi bi-envelope icon-spacing"></i>' . lang('Sales.send_invoice') ?></div>
|
||||
<div class="btn btn-info btn-sm" id="show_email_button"><?= '<i class="bi bi-envelope me-2"></i>' . lang('Sales.send_invoice') ?></div>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
<?= anchor("sales", '<i class="bi bi-cart2 icon-spacing"></i>' . lang('Sales.register'), ['class' => 'btn btn-info btn-sm', 'id' => 'show_sales_button']) ?>
|
||||
<?= anchor("sales/manage", '<i class="bi bi-receipt-cutoff icon-spacing"></i>' . lang('Sales.takings'), ['class' => 'btn btn-info btn-sm', 'id' => 'show_takings_button']) ?>
|
||||
<?= anchor("sales", '<i class="bi bi-cart2 me-2"></i>' . lang('Sales.register'), ['class' => 'btn btn-info btn-sm', 'id' => 'show_sales_button']) ?>
|
||||
<?= anchor("sales/manage", '<i class="bi bi-receipt-cutoff me-2"></i>' . lang('Sales.takings'), ['class' => 'btn btn-info btn-sm', 'id' => 'show_takings_button']) ?>
|
||||
</div>
|
||||
|
||||
<div id="page-wrap">
|
||||
|
||||
@@ -10,6 +10,11 @@
|
||||
|
||||
<?= view('partial/header') ?>
|
||||
|
||||
<?php
|
||||
$title_info['config_title'] = 'Sales';
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() {
|
||||
// When any filter is clicked and the dropdown window is closed
|
||||
@@ -60,28 +65,26 @@
|
||||
|
||||
<?= view('partial/print_receipt', ['print_after_sale' => false, 'selected_printer' => 'takings_printer']) ?>
|
||||
|
||||
<div id="title_bar" class="print_hide btn-toolbar">
|
||||
<button onclick="javascript:printdoc()" class="btn btn-info btn-sm pull-right">
|
||||
<i class="bi bi-printer icon-spacing"></i><?= lang('Common.print') ?>
|
||||
<div class="d-flex gap-2 justify-content-end d-print-none">
|
||||
<a type="button" class="btn btn-primary" href="sales" title="<?= lang('Sales.register') ?>">
|
||||
<i class="bi bi-arrow-left-circle me-2"></i><?= lang('Sales.register') ?>
|
||||
</a>
|
||||
<button type="button" class="btn btn-primary" onclick="window.print()" title="<?= lang('Common.print') ?>">
|
||||
<i class="bi bi-printer me-2"></i><?= lang('Common.print') ?>
|
||||
</button>
|
||||
<?= anchor("sales", '<i class="bi bi-cart2 icon-spacing"></i>' . lang('Sales.register'), ['class' => 'btn btn-info btn-sm pull-right', 'id' => 'show_sales_button']) ?>
|
||||
</div>
|
||||
|
||||
<div id="toolbar">
|
||||
<div class="pull-left form-inline" role="toolbar">
|
||||
<button id="delete" class="btn btn-default btn-sm print_hide">
|
||||
<i class="bi bi-trash icon-spacing"></i><?= lang('Common.delete') ?>
|
||||
<div class="d-flex gap-2">
|
||||
<button type="button" class="btn btn-secondary d-print-none">
|
||||
<i class="bi bi-trash"></i><span class="d-none d-sm-inline ms-2"><?= lang('Common.delete') ?></span>
|
||||
</button>
|
||||
|
||||
<?= form_input(['name' => 'daterangepicker', 'class' => 'form-control input-sm', 'id' => 'daterangepicker']) ?>
|
||||
<?= form_multiselect('filters[]', $filters, $selected_filters, [
|
||||
'id' => 'filters',
|
||||
'data-none-selected-text' => lang('Common.none_selected_text'),
|
||||
'class' => 'selectpicker show-menu-arrow',
|
||||
'data-selected-text-format' => 'count > 1',
|
||||
'data-style' => 'btn-default btn-sm',
|
||||
'data-width' => 'fit'
|
||||
]) ?>
|
||||
<input type="text" class="form-control" name="daterangepicker" id="daterangepicker">
|
||||
<select id="filters" name="filters[]" class="selectpicker show-menu-arrow" data-none-selected-text="<?= lang('Common.none_selected_text') ?>" data-selected-text-format="count > 1" data-style="btn-secondary" data-width="fit" multiple>
|
||||
<?php foreach ($filters as $key => $value): ?>
|
||||
<option value="<?= esc($key) ?>"><?= esc($value) ?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@ if (isset($error_message)) {
|
||||
$.get('<?= site_url() . esc("/sales/sendPdf/$sale_id_num/quote") ?>',
|
||||
function(response) {
|
||||
$.notify({
|
||||
icon: 'bi bi-bell-fill',
|
||||
message: response.message
|
||||
}, {
|
||||
type: response.success ? 'success' : 'danger'
|
||||
@@ -53,20 +54,20 @@ if (isset($error_message)) {
|
||||
|
||||
<div class="print_hide" id="control_buttons" style="text-align: right;">
|
||||
<a href="javascript:printdoc();">
|
||||
<div class="btn btn-info btn-sm" id="show_print_button"><?= '<i class="bi bi-printer icon-spacing"></i>' . lang('Common.print') ?></div>
|
||||
<div class="btn btn-info btn-sm" id="show_print_button"><?= '<i class="bi bi-printer me-2"></i>' . lang('Common.print') ?></div>
|
||||
</a>
|
||||
<?php
|
||||
/* This line will allow to print and go back to sales automatically.
|
||||
* echo anchor('sales', '<i class="bi bi-printer icon-spacing"></i>' . lang('Common.print'), ['class' => 'btn btn-info btn-sm', 'id' => 'show_print_button', 'onclick' => 'window.print();'));
|
||||
* echo anchor('sales', '<i class="bi bi-printer me-2"></i>' . lang('Common.print'), ['class' => 'btn btn-info btn-sm', 'id' => 'show_print_button', 'onclick' => 'window.print();'));
|
||||
*/
|
||||
?>
|
||||
<?php if (isset($customer_email) && !empty($customer_email)): ?>
|
||||
<a href="javascript:void(0);">
|
||||
<div class="btn btn-info btn-sm" id="show_email_button"><?= '<i class="bi bi-envelope icon-spacing"></i>' . lang('Sales.send_quote') ?></div>
|
||||
<div class="btn btn-info btn-sm" id="show_email_button"><?= '<i class="bi bi-envelope me-2"></i>' . lang('Sales.send_quote') ?></div>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
<?= anchor('sales', '<i class="bi bi-cart2 icon-spacing"></i>' . lang('Sales.register'), ['class' => 'btn btn-info btn-sm', 'id' => 'show_sales_button']) ?>
|
||||
<?= anchor('sales/discardsuspendedsale', '<i class="bi bi-x-circle icon-spacing"></i>' . lang('Sales.discard'), ['class' => 'btn btn-danger btn-sm', 'id' => 'discard_quote_button']) ?>
|
||||
<?= anchor('sales', '<i class="bi bi-cart2 me-2"></i>' . lang('Sales.register'), ['class' => 'btn btn-info btn-sm', 'id' => 'show_sales_button']) ?>
|
||||
<?= anchor('sales/discardsuspendedsale', '<i class="bi bi-x-circle me-2"></i>' . lang('Sales.discard'), ['class' => 'btn btn-danger btn-sm', 'id' => 'discard_quote_button']) ?>
|
||||
</div>
|
||||
|
||||
<div id="page-wrap">
|
||||
|
||||
@@ -25,6 +25,7 @@ if (isset($error_message)) {
|
||||
$.get('<?= site_url() . esc("/sales/sendPdf/$sale_id_num/receipt") ?>',
|
||||
function(response) {
|
||||
$.notify({
|
||||
icon: 'bi bi-bell-fill',
|
||||
message: response.message
|
||||
}, {
|
||||
type: response.success ? 'success' : 'danger'
|
||||
@@ -46,18 +47,18 @@ if (isset($error_message)) {
|
||||
|
||||
<div class="print_hide" id="control_buttons" style="text-align: right;">
|
||||
<a href="javascript:printdoc();">
|
||||
<div class="btn btn-info btn-sm" id="show_print_button"><?= '<i class="bi bi-printer icon-spacing"></i>' . lang('Common.print') ?></div>
|
||||
<div class="btn btn-info btn-sm" id="show_print_button"><?= '<i class="bi bi-printer me-2"></i>' . lang('Common.print') ?></div>
|
||||
</a>
|
||||
<?php if (!empty($customer_email)): ?>
|
||||
<a href="javascript:void(0);">
|
||||
<div class="btn btn-info btn-sm" id="show_email_button"><?= '<i class="bi bi-envelope icon-spacing"></i>' . lang('Sales.send_receipt') ?></div>
|
||||
<div class="btn btn-info btn-sm" id="show_email_button"><?= '<i class="bi bi-envelope me-2"></i>' . lang('Sales.send_receipt') ?></div>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
<?= anchor('sales', '<i class="bi bi-cart2 icon-spacing"></i>' . lang('Sales.register'), ['class' => 'btn btn-info btn-sm', 'id' => 'show_sales_button']) ?>
|
||||
<?= anchor('sales', '<i class="bi bi-cart2 me-2"></i>' . lang('Sales.register'), ['class' => 'btn btn-info btn-sm', 'id' => 'show_sales_button']) ?>
|
||||
<?php
|
||||
$employee = model(Employee::class);
|
||||
if ($employee->has_grant('reports_sales', session('person_id'))): ?>
|
||||
<?= anchor('sales/manage', '<i class="bi bi-receipt-cutoff icon-spacing"></i>' . lang('Sales.takings'), ['class' => 'btn btn-info btn-sm', 'id' => 'show_takings_button']) ?>
|
||||
<?= anchor('sales/manage', '<i class="bi bi-receipt-cutoff me-2"></i>' . lang('Sales.takings'), ['class' => 'btn btn-info btn-sm', 'id' => 'show_takings_button']) ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -45,6 +45,11 @@ use App\Models\Employee;
|
||||
|
||||
<?= view('partial/header') ?>
|
||||
|
||||
<?php
|
||||
$title_info['config_title'] = 'Sales Register';
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<?php
|
||||
if (isset($error)) {
|
||||
echo '<div class="alert alert-dismissible alert-danger">' . esc($error) . '</div>';
|
||||
@@ -61,79 +66,142 @@ if (isset($success)) {
|
||||
helper('url');
|
||||
?>
|
||||
|
||||
<div id="register_wrapper">
|
||||
<div class="mw-register">
|
||||
<?= form_open("$controller_name/changeMode", ['id' => 'mode_form', 'class' => 'mw-register card bg-secondary-subtle rounded-bottom-0']) ?>
|
||||
|
||||
<!-- Top register controls -->
|
||||
<?= form_open("$controller_name/changeMode", ['id' => 'mode_form', 'class' => 'form-horizontal panel panel-default']) ?>
|
||||
<div class="panel-body form-group">
|
||||
<ul>
|
||||
<li class="pull-left first_li">
|
||||
<label class="control-label"><?= lang(ucfirst($controller_name) . '.mode') ?></label>
|
||||
</li>
|
||||
<li class="pull-left">
|
||||
<?= form_dropdown('mode', $modes, $mode, ['onchange' => "$('#mode_form').submit();", 'class' => 'selectpicker show-menu-arrow', 'data-style' => 'btn-default btn-sm', 'data-width' => 'fit']) ?>
|
||||
</li>
|
||||
<?php if ($config['dinner_table_enable']) { ?>
|
||||
<li class="pull-left first_li">
|
||||
<label class="control-label"><?= lang(ucfirst($controller_name) . '.table') ?></label>
|
||||
</li>
|
||||
<li class="pull-left">
|
||||
<?= form_dropdown('dinner_table', $empty_tables, $selected_table, ['onchange' => "$('#mode_form').submit();", 'class' => 'selectpicker show-menu-arrow', 'data-style' => 'btn-default btn-sm', 'data-width' => 'fit']) ?>
|
||||
</li>
|
||||
<?php } ?>
|
||||
<?php if (count($stock_locations) > 1) { ?>
|
||||
<li class="pull-left">
|
||||
<label class="control-label"><?= lang(ucfirst($controller_name) . '.stock_location') ?></label>
|
||||
</li>
|
||||
<li class="pull-left">
|
||||
<?= form_dropdown('stock_location', $stock_locations, $stock_location, ['onchange' => "$('#mode_form').submit();", 'class' => 'selectpicker show-menu-arrow', 'data-style' => 'btn-default btn-sm', 'data-width' => 'fit']) ?>
|
||||
</li>
|
||||
<?php } ?>
|
||||
|
||||
<li class="pull-right">
|
||||
<button class="btn btn-default btn-sm modal-dlg" id="show_suspended_sales_button" data-href="<?= esc("$controller_name/suspended") ?>" title="<?= lang(ucfirst($controller_name) . '.suspended_sales') ?>">
|
||||
<i class="bi bi-pause-circle icon-spacing"></i><?= lang(ucfirst($controller_name) . '.suspended_sales') ?>
|
||||
<!-- Top register controls -->
|
||||
<div class="card-body">
|
||||
<div class="d-flex">
|
||||
<div class="me-auto pe-2">
|
||||
<div class="input-group">
|
||||
<span class="input-group-text" id="mode_select"><?= lang(ucfirst($controller_name) .'.mode') ?></span>
|
||||
<?= form_dropdown('mode', $modes, $mode, ['onchange' => "$('#mode_form').submit();", 'class' => 'form-select', 'aria-describedby' => 'mode_select']) ?>
|
||||
<?php if ($config['dinner_table_enable']) { ?>
|
||||
<span class="input-group-text" id="dinner_table_select"><?= lang(ucfirst($controller_name) .'.table') ?></span>
|
||||
<?= form_dropdown('dinner_table', $empty_tables, $selected_table, ['onchange' => "$('#mode_form').submit();", 'class' => 'form-select', 'aria-describedby' => 'dinner_table_select']) ?>
|
||||
<?php } ?>
|
||||
<?php if (count($stock_locations) > 1) { ?>
|
||||
<span class="input-group-text" id="stock_location_select"><?= lang(ucfirst($controller_name) .'.stock_location') ?></span>
|
||||
<?= form_dropdown('stock_location', $stock_locations, $stock_location, ['onchange' => "$('#mode_form').submit();", 'class' => 'form-select', 'aria-describedby' => 'stock_location_select']) ?>
|
||||
<?php } ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex gap-2">
|
||||
<?php
|
||||
$employee = model(Employee::class);
|
||||
if ($employee->has_grant('reports_sales', session('person_id'))) {
|
||||
?>
|
||||
<a type="button" class="btn btn-primary" id="sales_takings_button" href="<?= base_url("$controller_name/manage") ?>" title="<?= lang(ucfirst($controller_name) .'.takings') ?>">
|
||||
<i class="bi bi-receipt-cutoff me-2"></i><?= lang(ucfirst($controller_name) .'.takings') ?>
|
||||
</a>
|
||||
<?php } ?>
|
||||
<button type="button" class="btn btn-primary" id="show_suspended_sales_button" data-href="<?= esc("$controller_name/suspended") ?>" title="<?= lang(ucfirst($controller_name) .'.suspended_sales') ?>">
|
||||
<i class="bi bi-pause-circle me-2"></i><?= lang(ucfirst($controller_name) .'.suspended_sales') ?>
|
||||
</button>
|
||||
</li>
|
||||
|
||||
<?php
|
||||
$employee = model(Employee::class);
|
||||
if ($employee->has_grant('reports_sales', session('person_id'))) {
|
||||
?>
|
||||
<li class="pull-right">
|
||||
<?= anchor(
|
||||
"$controller_name/manage",
|
||||
'<i class="bi bi-receipt-cutoff icon-spacing"></i>' . lang(ucfirst($controller_name) . '.takings'),
|
||||
array('class' => 'btn btn-primary btn-sm', 'id' => 'sales_takings_button', 'title' => lang(ucfirst($controller_name) . '.takings'))
|
||||
) ?>
|
||||
</li>
|
||||
<?php } ?>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?= form_close() ?>
|
||||
|
||||
<?php $tabindex = 0; ?>
|
||||
|
||||
<?= form_open("$controller_name/add", ['id' => 'add_item_form', 'class' => 'form-horizontal panel panel-default']) ?>
|
||||
<div class="panel-body form-group">
|
||||
<ul>
|
||||
<li class="pull-left first_li">
|
||||
<label for="item" class="control-label"><?= lang(ucfirst($controller_name) . '.find_or_scan_item_or_receipt') ?></label>
|
||||
</li>
|
||||
<li class="pull-left">
|
||||
<?= form_input(['name' => 'item', 'id' => 'item', 'class' => 'form-control input-sm', 'size' => '50', 'tabindex' => ++$tabindex]) ?>
|
||||
<span class="ui-helper-hidden-accessible" role="status"></span>
|
||||
</li>
|
||||
<li class="pull-right">
|
||||
<button id="new_item_button" class="btn btn-info btn-sm pull-right modal-dlg" data-btn-new="<?= lang('Common.new') ?>" data-btn-submit="<?= lang('Common.submit') ?>" data-href="<?= "items/view" ?>" title="<?= lang(ucfirst($controller_name) . ".new_item") ?>">
|
||||
<i class="bi bi-tag icon-spacing"></i><?= lang(ucfirst($controller_name) . ".new_item") ?>
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="row">
|
||||
<div class="col-8">
|
||||
<div class="row">
|
||||
<div class="col-12 pe-0">
|
||||
<?= form_open("$controller_name/add", ['id' => 'add_item_form', 'class' => 'card bg-primary-subtle border-top-0 border-bottom-0 rounded-0']) ?>
|
||||
<div class="card-body d-flex gap-2">
|
||||
<div class="input-group">
|
||||
<span class="input-group-text text-primary border-primary-subtle" data-bs-toggle="tooltip" data-bs-placement="right" title="<?= lang(ucfirst($controller_name) .'.find_or_scan_item_or_receipt') ?>">
|
||||
<i class="bi bi-search"></i>
|
||||
</span>
|
||||
<input type="text" name="item" id="item" class="form-control border-primary-subtle" tabindex="<?= ++$tabindex ?>">
|
||||
</div>
|
||||
<button type="button" class="btn btn-primary ms-auto text-nowrap" id="new_item_button" data-btn-new="<?= lang('Common.new') ?>" data-btn-submit="<?= lang('Common.submit') ?>" data-href='<?= "items/view" ?>' title="<?= lang(ucfirst($controller_name) .".new_item") ?>">
|
||||
<i class="bi bi-tag me-2"></i><?= lang(ucfirst($controller_name) .".new_item") ?>
|
||||
</button>
|
||||
</div>
|
||||
<?= form_close() ?>
|
||||
</div>
|
||||
<div class="col-12 pe-0">
|
||||
<!-- Sale Items List -->
|
||||
<div class="card table-responsive rounded-end-0 rounded-top-0" style="min-height: 250px;">
|
||||
<table class="table <?php if(count($cart) == 1) { ?>table-striped table-hover<?php }; if(count($cart) == 0) { ?>table-borderless<?php } ?>">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col" style="width: 5%;"><i class="bi bi-trash"></i></th>
|
||||
<th scope="col" style="width: 15%;"><?= lang(ucfirst($controller_name) .'.item_number') ?></th>
|
||||
<th scope="col" style="width: 30%;"><?= lang(ucfirst($controller_name) .'.item_name') ?></th>
|
||||
<th scope="col" style="width: 10%;"><?= lang(ucfirst($controller_name) .'.price') ?></th>
|
||||
<th scope="col" style="width: 10%;"><?= lang(ucfirst($controller_name) .'.quantity') ?></th>
|
||||
<th scope="col" style="width: 15%;"><?= lang(ucfirst($controller_name) .'.discount') ?></th>
|
||||
<th scope="col" style="width: 10%;"><?= lang(ucfirst($controller_name) .'.total') ?></th>
|
||||
<th scope="col" style="width: 5%;"><?= lang(ucfirst($controller_name) .'.update') ?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody id="cart_contents">
|
||||
<?php if (count($cart) == 0) { ?>
|
||||
<tr>
|
||||
<td colspan="8">
|
||||
<div class="alert alert-primary m-0"><?= lang(ucfirst($controller_name) .'.no_items_in_cart') ?></div>
|
||||
</td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?= form_close() ?>
|
||||
<div class="col-4 ps-0">
|
||||
<!-- Overall Sale -->
|
||||
<?= form_open("$controller_name/selectCustomer", ['id' => 'select_customer_form', 'class' => 'card border-top-0 border-start-0 rounded-top-0 rounded-start-0', 'style' => 'min-height: 320px;']) ?>
|
||||
<div class="card-body" id="select_customer">
|
||||
<div class="mb-3">
|
||||
<label id="customer_label" for="customer" class="form-label"><?= lang(ucfirst($controller_name) .'.select_customer') . ' ' . esc("$customer_required") ?></label>
|
||||
<input type="text" name="customer" id="customer" class="form-control" value="<?= lang(ucfirst($controller_name) . '.start_typing_customer_name') ?>">
|
||||
</div>
|
||||
<div class="d-flex gap-2 justify-content-center mb-3">
|
||||
<button class="btn btn-primary" data-btn-submit="<?= lang('Common.submit') ?>" data-href="<?= 'customers/view' ?>" title="<?= lang(ucfirst($controller_name) .'.new_customer') ?>">
|
||||
<i class="bi bi-person-add me-2"></i><?= lang(ucfirst($controller_name) .'.new_customer') ?>
|
||||
</button>
|
||||
<button class="btn btn-secondary" id="show_keyboard_help" data-href="<?= esc('$controller_name/salesKeyboardHelp') ?>" title="<?= lang(ucfirst($controller_name) .'.key_title') ?>">
|
||||
<i class="bi bi-keyboard me-2"></i><?= lang(ucfirst($controller_name) .'.key_help') ?>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<table class="table table-borderless table-sm" id="sale_totals">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="px-0"><?= lang(ucfirst($controller_name) .'.quantity_of_items', [$item_count]) ?></td>
|
||||
<td class="px-0 text-end"><?= $total_units ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="px-0"><?= lang(ucfirst($controller_name) .'.sub_total') ?></td>
|
||||
<td class="px-0 text-end"><?= to_currency($subtotal) ?></td>
|
||||
</tr>
|
||||
<?php foreach ($taxes as $tax_group_index=>$tax) { ?>
|
||||
<tr>
|
||||
<td class="px-0"><?= (float)$tax['tax_rate'] . '% ' . $tax['tax_group'] ?></td>
|
||||
<td class="px-0 text-end"><?= to_currency_tax($tax['sale_tax_amount']) ?></td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
<tr>
|
||||
<td class="fs-5 fw-semibold px-0"><?= lang(ucfirst($controller_name) .'.total') ?></td>
|
||||
<td class="fs-5 fw-semibold px-0 text-end"><span id="sale_total"><?= to_currency($total) ?></span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?= form_close() ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="register_wrapper">
|
||||
<br><br><br><br><br>
|
||||
<!-- Sale Items List -->
|
||||
|
||||
<table class="sales_table_100" id="register">
|
||||
@@ -347,7 +415,7 @@ helper('url');
|
||||
|
||||
<?= anchor(
|
||||
"$controller_name/removeCustomer",
|
||||
'<i class="bi bi-x-circle icon-spacing"></i>' . lang('Common.remove') . ' ' . lang('Customers.customer'),
|
||||
'<i class="bi bi-x-circle me-2"></i>' . lang('Common.remove') . ' ' . lang('Customers.customer'),
|
||||
['class' => 'btn btn-danger btn-sm', 'id' => 'remove_customer_button', 'title' => lang('Common.remove') . ' ' . lang('Customers.customer')]
|
||||
)
|
||||
?>
|
||||
@@ -359,10 +427,10 @@ helper('url');
|
||||
<?= form_input(['name' => 'customer', 'id' => 'customer', 'class' => 'form-control input-sm', 'value' => lang(ucfirst($controller_name) . '.start_typing_customer_name')]) ?>
|
||||
|
||||
<button class="btn btn-info btn-sm modal-dlg" data-btn-submit="<?= lang('Common.submit') ?>" data-href="<?= "customers/view" ?>" title="<?= lang(ucfirst($controller_name) . ".new_customer") ?>">
|
||||
<i class="bi bi-person-add icon-spacing"></i><?= lang(ucfirst($controller_name) . ".new_customer") ?>
|
||||
<i class="bi bi-person-add me-2"></i><?= lang(ucfirst($controller_name) . ".new_customer") ?>
|
||||
</button>
|
||||
<button class="btn btn-default btn-sm modal-dlg" id="show_keyboard_help" data-href="<?= esc("$controller_name/salesKeyboardHelp") ?>" title="<?= lang(ucfirst($controller_name) . '.key_title') ?>">
|
||||
<i class="bi bi-keyboard icon-spacing"></i><?= lang(ucfirst($controller_name) . '.key_help') ?>
|
||||
<i class="bi bi-keyboard me-2"></i><?= lang(ucfirst($controller_name) . '.key_help') ?>
|
||||
</button>
|
||||
</div>
|
||||
<?php } ?>
|
||||
@@ -436,7 +504,7 @@ helper('url');
|
||||
if (!$due_payment || ($due_payment && isset($customer))) { // TODO: $due_payment is not needed because the first clause insures that it will always be true if it gets to this point. Can be shortened to if (!$due_payment || isset($customer))
|
||||
?>
|
||||
<div class="btn btn-sm btn-success pull-right" id="finish_sale_button" tabindex="<?= ++$tabindex ?>">
|
||||
<i class="bi bi-check-circle icon-spacing"></i><?= lang(ucfirst($controller_name) . '.complete_sale') ?>
|
||||
<i class="bi bi-check-circle me-2"></i><?= lang(ucfirst($controller_name) . '.complete_sale') ?>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
@@ -462,7 +530,7 @@ helper('url');
|
||||
<?= form_close() ?>
|
||||
|
||||
<div class="btn btn-sm btn-success pull-right" id="add_payment_button" tabindex="<?= ++$tabindex ?>">
|
||||
<i class="bi bi-cash-coin icon-spacing"></i><?= lang(ucfirst($controller_name) . '.add_payment') ?>
|
||||
<i class="bi bi-cash-coin me-2"></i><?= lang(ucfirst($controller_name) . '.add_payment') ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
@@ -492,16 +560,16 @@ helper('url');
|
||||
<?= form_open("$controller_name/cancel", ['id' => 'buttons_form']) ?>
|
||||
<div class="form-group" id="buttons_sale">
|
||||
<div class="btn btn-sm btn-default pull-left" id="suspend_sale_button">
|
||||
<i class="bi bi-pause-circle icon-spacing"></i><?= lang(ucfirst($controller_name) . '.suspend_sale') ?>
|
||||
<i class="bi bi-pause-circle me-2"></i><?= lang(ucfirst($controller_name) . '.suspend_sale') ?>
|
||||
</div>
|
||||
<?php if (!$pos_mode && isset($customer)) { // Only show this part if the payment covers the total ?>
|
||||
<div class="btn btn-sm btn-success" id="finish_invoice_quote_button">
|
||||
<i class="bi bi-check-circle icon-spacing"></i><?= esc($mode_label) ?>
|
||||
<i class="bi bi-check-circle me-2"></i><?= esc($mode_label) ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<div class="btn btn-sm btn-danger pull-right" id="cancel_sale_button">
|
||||
<i class="bi bi-x-circle icon-spacing"></i><?= lang(ucfirst($controller_name) . '.cancel_sale') ?>
|
||||
<i class="bi bi-x-circle me-2"></i><?= lang(ucfirst($controller_name) . '.cancel_sale') ?>
|
||||
</div>
|
||||
</div>
|
||||
<?= form_close() ?>
|
||||
@@ -782,6 +850,7 @@ helper('url');
|
||||
|
||||
table_support.handle_submit = function(resource, response, stay_open) {
|
||||
$.notify({
|
||||
icon: 'bi bi-bell-fill',
|
||||
message: response.message
|
||||
}, {
|
||||
type: response.success ? 'success' : 'danger'
|
||||
|
||||
@@ -36,6 +36,7 @@ if (isset($error_message)) {
|
||||
$.get('<?= esc("/sales/sendPdf/$sale_id_num") ?>',
|
||||
function(response) {
|
||||
$.notify({
|
||||
icon: 'bi bi-bell-fill',
|
||||
message: response.message
|
||||
}, {
|
||||
type: response.success ? 'success' : 'danger'
|
||||
@@ -57,20 +58,20 @@ if (isset($error_message)) {
|
||||
|
||||
<div class="print_hide" id="control_buttons" style="text-align: right;">
|
||||
<a href="javascript:printdoc();">
|
||||
<div class="btn btn-info btn-sm" id="show_print_button"><?= '<i class="bi bi-printer icon-spacing"></i>' . lang('Common.print') ?></div>
|
||||
<div class="btn btn-info btn-sm" id="show_print_button"><?= '<i class="bi bi-printer me-2"></i>' . lang('Common.print') ?></div>
|
||||
</a>
|
||||
<?php
|
||||
/* This line will allow to print and go back to sales automatically.
|
||||
* echo anchor('sales', '<i class="bi bi-printer icon-spacing"></i>' . lang('Common.print'), ['class' => 'btn btn-info btn-sm', 'id' => 'show_print_button', 'onclick' => 'window.print();'));
|
||||
* echo anchor('sales', '<i class="bi bi-printer me-2"></i>' . lang('Common.print'), ['class' => 'btn btn-info btn-sm', 'id' => 'show_print_button', 'onclick' => 'window.print();'));
|
||||
*/
|
||||
?>
|
||||
<?php if (isset($customer_email) && !empty($customer_email)): ?>
|
||||
<a href="javascript:void(0);">
|
||||
<div class="btn btn-info btn-sm" id="show_email_button"><?= '<i class="bi bi-envelope icon-spacing"></i>' . lang('Sales.send_invoice') ?></div>
|
||||
<div class="btn btn-info btn-sm" id="show_email_button"><?= '<i class="bi bi-envelope me-2"></i>' . lang('Sales.send_invoice') ?></div>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
<?= anchor("sales", '<i class="bi bi-cart2 icon-spacing"></i>' . lang('Sales.register'), ['class' => 'btn btn-info btn-sm', 'id' => 'show_sales_button']) ?>
|
||||
<?= anchor("sales/manage", '<i class="bi bi-receipt-cutoff icon-spacing"></i>' . lang('Sales.takings'), ['class' => 'btn btn-info btn-sm', 'id' => 'show_takings_button']) ?>
|
||||
<?= anchor("sales", '<i class="bi bi-cart2 me-2"></i>' . lang('Sales.register'), ['class' => 'btn btn-info btn-sm', 'id' => 'show_sales_button']) ?>
|
||||
<?= anchor("sales/manage", '<i class="bi bi-receipt-cutoff me-2"></i>' . lang('Sales.takings'), ['class' => 'btn btn-info btn-sm', 'id' => 'show_takings_button']) ?>
|
||||
</div>
|
||||
|
||||
<div id="page-wrap">
|
||||
|
||||
@@ -34,6 +34,7 @@ if (isset($error_message)) {
|
||||
$.get('<?= esc("/sales/sendPdf/$sale_id_num/work_order") ?>',
|
||||
function(response) {
|
||||
$.notify({
|
||||
icon: 'bi bi-bell-fill',
|
||||
message: response.message
|
||||
}, {
|
||||
type: response.success ? 'success' : 'danger'
|
||||
@@ -55,20 +56,20 @@ if (isset($error_message)) {
|
||||
|
||||
<div class="print_hide" id="control_buttons" style="text-align: right;">
|
||||
<a href="javascript:printdoc();">
|
||||
<div class="btn btn-info btn-sm" id="show_print_button"><?= '<i class="bi bi-printer icon-spacing"></i>' . lang('Common.print') ?></div>
|
||||
<div class="btn btn-info btn-sm" id="show_print_button"><?= '<i class="bi bi-printer me-2"></i>' . lang('Common.print') ?></div>
|
||||
</a>
|
||||
<?php
|
||||
/* This line will allow to print and go back to sales automatically.
|
||||
* echo anchor('sales', '<i class="bi bi-printer icon-spacing"></i>' . lang('Common.print'), ['class' => 'btn btn-info btn-sm', 'id' => 'show_print_button', 'onclick' => 'window.print();'));
|
||||
* echo anchor('sales', '<i class="bi bi-printer me-2"></i>' . lang('Common.print'), ['class' => 'btn btn-info btn-sm', 'id' => 'show_print_button', 'onclick' => 'window.print();'));
|
||||
*/
|
||||
?>
|
||||
<?php if (isset($customer_email) && !empty($customer_email)): ?>
|
||||
<a href="javascript:void(0);">
|
||||
<div class="btn btn-info btn-sm" id="show_email_button"><?= '<i class="bi bi-envelope icon-spacing"></i>' . lang('Sales.send_work_order') ?></div>
|
||||
<div class="btn btn-info btn-sm" id="show_email_button"><?= '<i class="bi bi-envelope me-2"></i>' . lang('Sales.send_work_order') ?></div>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
<?= anchor("sales", '<i class="bi bi-cart2 icon-spacing"></i>' . lang('Sales.register'), ['class' => 'btn btn-info btn-sm', 'id' => 'show_sales_button']) ?>
|
||||
<?= anchor("sales/discard_suspended_sale", '<i class="bi bi-x-circle icon-spacing"></i>' . lang('Sales.discard'), ['class' => 'btn btn-danger btn-sm', 'id' => 'discard_work_order_button']) ?>
|
||||
<?= anchor("sales", '<i class="bi bi-cart2 me-2"></i>' . lang('Sales.register'), ['class' => 'btn btn-info btn-sm', 'id' => 'show_sales_button']) ?>
|
||||
<?= anchor("sales/discard_suspended_sale", '<i class="bi bi-x-circle me-2"></i>' . lang('Sales.discard'), ['class' => 'btn btn-danger btn-sm', 'id' => 'discard_work_order_button']) ?>
|
||||
</div>
|
||||
|
||||
<div id="page-wrap">
|
||||
|
||||
@@ -6,44 +6,45 @@
|
||||
|
||||
<?= view('partial/header') ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
dialog_support.init("a.modal-dlg");
|
||||
</script>
|
||||
<?php
|
||||
$title_info['config_title'] = 'Taxes';
|
||||
echo view('configs/config_header', $title_info);
|
||||
?>
|
||||
|
||||
<ul class="nav nav-tabs" data-tabs="tabs">
|
||||
<li class="active" role="presentation">
|
||||
<a data-toggle="tab" href="#tax_codes_tab" title="<?= lang(ucfirst($controller_name) . '.tax_codes_configuration') ?>">
|
||||
<ul class="nav nav-tabs mb-3" role="tablist">
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link active" id="codes-tab" data-bs-toggle="tab" data-bs-target="#tax_codes_tab" type="button" role="tab" aria-controls="tax_codes_tab" title="<?= lang(ucfirst($controller_name) . '.tax_codes_configuration') ?>">
|
||||
<?= lang(ucfirst($controller_name) . '.tax_codes') ?>
|
||||
</a>
|
||||
</button>
|
||||
</li>
|
||||
<li role="presentation">
|
||||
<a data-toggle="tab" href="#tax_jurisdictions_tab" title="<?= lang(ucfirst($controller_name) . '.tax_jurisdictions_configuration') ?>">
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link" id="jurisdictions-tab" data-bs-toggle="tab" data-bs-target="#tax_jurisdictions_tab" type="button" role="tab" aria-controls="tax_jurisdictions_tab" title="<?= lang(ucfirst($controller_name) . '.tax_jurisdictions_configuration') ?>">
|
||||
<?= lang(ucfirst($controller_name) . '.tax_jurisdictions') ?>
|
||||
</a>
|
||||
</button>
|
||||
</li>
|
||||
<li role="presentation">
|
||||
<a data-toggle="tab" href="#tax_categories_tab" title="<?= lang(ucfirst($controller_name) . '.tax_categories_configuration') ?>">
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link" id="categories-tab" data-bs-toggle="tab" data-bs-target="#tax_categories_tab" type="button" role="tab" aria-controls="tax_categories_tab" title="<?= lang(ucfirst($controller_name) . '.tax_categories_configuration') ?>">
|
||||
<?= lang(ucfirst($controller_name) . '.tax_categories') ?>
|
||||
</a>
|
||||
</button>
|
||||
</li>
|
||||
<li role="presentation">
|
||||
<a data-toggle="tab" href="#tax_rates_tab" title="<?= lang(ucfirst($controller_name) . '.tax_rate_configuration') ?>">
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link" id="rates-tab" data-bs-toggle="tab" data-bs-target="#tax_rates_tab" type="button" role="tab" aria-controls="tax_rates_tab" title="<?= lang(ucfirst($controller_name) . '.tax_rate_configuration') ?>">
|
||||
<?= lang(ucfirst($controller_name) . '.tax_rates') ?>
|
||||
</a>
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane fade in active" id="tax_codes_tab">
|
||||
<div class="tab-pane active" id="tax_codes_tab" role="tabpanel" aria-labelledby="codes-tab" tabindex="0">
|
||||
<?= view('taxes/tax_codes') ?>
|
||||
</div>
|
||||
<div class="tab-pane" id="tax_jurisdictions_tab">
|
||||
<div class="tab-pane" id="tax_jurisdictions_tab" role="tabpanel" aria-labelledby="jurisdictions-tab" tabindex="0">
|
||||
<?= view('taxes/tax_jurisdictions') ?>
|
||||
</div>
|
||||
<div class="tab-pane" id="tax_categories_tab">
|
||||
<div class="tab-pane" id="tax_categories_tab" role="tabpanel" aria-labelledby="categories-tab" tabindex="0">
|
||||
<?= view('taxes/tax_categories') ?>
|
||||
</div>
|
||||
<div class="tab-pane" id="tax_rates_tab">
|
||||
<div class="tab-pane" id="tax_rates_tab" role="tabpanel" aria-labelledby="rates-tab" tabindex="0">
|
||||
<?= view('taxes/tax_rates') ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -5,25 +5,17 @@
|
||||
?>
|
||||
|
||||
<?= form_open('taxes/save_tax_categories/', ['id' => 'tax_categories_form', 'class' => 'form-horizontal']) ?>
|
||||
<div id="config_wrapper">
|
||||
<fieldset id="config_info">
|
||||
|
||||
<div id="required_fields_message"><?= lang('Common.fields_required_message') ?></div>
|
||||
<ul id="tax_categories_error_message_box" class="error_message_box"></ul>
|
||||
<ul id="tax_categories_error_message_box" class="error_message_box"></ul>
|
||||
|
||||
<div id="tax_categories">
|
||||
<?= view('partial/tax_categories') ?>
|
||||
</div>
|
||||
|
||||
<?= form_submit([
|
||||
'name' => 'submit_tax_categories',
|
||||
'id' => 'submit_tax_categories',
|
||||
'value' => lang('Common.submit'),
|
||||
'class' => 'btn btn-primary btn-sm pull-right'
|
||||
]) ?>
|
||||
|
||||
</fieldset>
|
||||
<div id="tax_categories">
|
||||
<?= view('partial/tax_categories') ?>
|
||||
</div>
|
||||
|
||||
<div class="d-flex justify-content-end">
|
||||
<button class="btn btn-primary" name="submit_tax_categories"><?= lang('Common.submit'); ?></button>
|
||||
</div>
|
||||
|
||||
<?= form_close() ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
@@ -104,6 +96,7 @@
|
||||
$(form).ajaxSubmit({
|
||||
success: function(response) {
|
||||
$.notify({
|
||||
icon: 'bi bi-bell-fill',
|
||||
message: response.message
|
||||
}, {
|
||||
type: response.success ? 'success' : 'danger'
|
||||
|
||||
@@ -5,25 +5,17 @@
|
||||
?>
|
||||
|
||||
<?= form_open('taxes/save_tax_codes/', ['id' => 'tax_codes_form', 'class' => 'form-horizontal']) ?>
|
||||
<div id="config_wrapper">
|
||||
<fieldset id="config_info">
|
||||
|
||||
<div id="required_fields_message"><?= lang('Common.fields_required_message') ?></div>
|
||||
<ul id="tax_codes_error_message_box" class="error_message_box"></ul>
|
||||
<ul id="tax_codes_error_message_box" class="error_message_box"></ul>
|
||||
|
||||
<div id="tax_codes">
|
||||
<?= view('partial/tax_codes', ['tax_codes' => $tax_codes]) ?>
|
||||
</div>
|
||||
|
||||
<?= form_submit([
|
||||
'name' => 'submit_tax_codes',
|
||||
'id' => 'submit_tax_codes',
|
||||
'value' => lang('Common.submit'),
|
||||
'class' => 'btn btn-primary btn-sm pull-right'
|
||||
]) ?>
|
||||
|
||||
</fieldset>
|
||||
<div id="tax_codes">
|
||||
<?= view('partial/tax_codes', ['tax_codes' => $tax_codes]) ?>
|
||||
</div>
|
||||
|
||||
<div class="d-flex justify-content-end">
|
||||
<button class="btn btn-primary" name="submit_tax_codes"><?= lang('Common.submit'); ?></button>
|
||||
</div>
|
||||
|
||||
<?= form_close() ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
@@ -104,6 +96,7 @@
|
||||
$(form).ajaxSubmit({
|
||||
success: function(response) {
|
||||
$.notify({
|
||||
icon: 'bi bi-bell-fill',
|
||||
message: response.message
|
||||
}, {
|
||||
type: response.success ? 'success' : 'danger'
|
||||
|
||||
@@ -6,25 +6,17 @@
|
||||
?>
|
||||
|
||||
<?= form_open('taxes/save_tax_jurisdictions/', ['id' => 'tax_jurisdictions_form', 'class' => 'form-horizontal']) ?>
|
||||
<div id="config_wrapper">
|
||||
<fieldset id="config_info">
|
||||
|
||||
<div id="required_fields_message"><?= lang('Common.fields_required_message') ?></div>
|
||||
<ul id="tax_jurisdictions_error_message_box" class="error_message_box"></ul>
|
||||
<ul id="tax_jurisdictions_error_message_box" class="error_message_box"></ul>
|
||||
|
||||
<div id="tax_jurisdictions">
|
||||
<?= view('partial/tax_jurisdictions') ?>
|
||||
</div>
|
||||
|
||||
<?= form_submit([
|
||||
'name' => 'submit_tax_jurisdictions',
|
||||
'id' => 'submit_tax_jurisdictions',
|
||||
'value' => lang('Common.submit'),
|
||||
'class' => 'btn btn-primary btn-sm pull-right'
|
||||
]) ?>
|
||||
|
||||
</fieldset>
|
||||
<div id="tax_jurisdictions">
|
||||
<?= view('partial/tax_jurisdictions') ?>
|
||||
</div>
|
||||
|
||||
<div class="d-flex justify-content-end">
|
||||
<button class="btn btn-primary" name="submit_tax_jurisdictions"><?= lang('Common.submit'); ?></button>
|
||||
</div>
|
||||
|
||||
<?= form_close() ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
@@ -108,6 +100,7 @@
|
||||
$(form).ajaxSubmit({
|
||||
success: function(response) {
|
||||
$.notify({
|
||||
icon: 'bi bi-bell-fill',
|
||||
message: response.message
|
||||
}, {
|
||||
type: response.success ? 'success' : 'danger'
|
||||
|
||||
@@ -18,16 +18,16 @@
|
||||
});
|
||||
</script>
|
||||
|
||||
<div id="title_bar" class="btn-toolbar">
|
||||
<button class="btn btn-info btn-sm pull-right modal-dlg" data-btn-submit="<?= lang('Common.submit') ?>" data-href="<?= esc("$controller_name/view") ?>" title="<?= lang(ucfirst($controller_name) . ".new") ?>">
|
||||
<i class="bi bi-piggy-bank icon-spacing"></i><?= lang(ucfirst($controller_name) . ".new") ?>
|
||||
<div class="d-flex gap-2 justify-content-end">
|
||||
<button type="button" class="btn btn-primary" data-btn-submit="<?= lang('Common.submit') ?>" data-href="<?= esc("$controller_name/view") ?>" title="<?= lang(ucfirst($controller_name). '.new') ?>">
|
||||
<i class="bi bi-piggy-bank me-2"></i><?= lang(ucfirst($controller_name) .'.new') ?>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div id="toolbar">
|
||||
<div class="pull-left btn-toolbar">
|
||||
<button id="delete" class="btn btn-default btn-sm">
|
||||
<i class="bi bi-trash icon-spacing"></i><?= lang('Common.delete') ?>
|
||||
<div class="d-flex gap-2">
|
||||
<button type="button" class="btn btn-secondary">
|
||||
<i class="bi bi-trash"></i><span class="d-none d-sm-inline ms-2"><?= lang('Common.delete') ?></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
81
gulpfile.js
81
gulpfile.js
@@ -48,47 +48,43 @@ gulp.task('update-licenses', function() {
|
||||
|
||||
// Copy the bootswatch styles into their own folder so OSPOS can select one from the collection
|
||||
gulp.task('copy-bootswatch', function() {
|
||||
pipeline(gulp.src('./node_modules/bootswatch/cerulean/*.min.css'),gulp.dest('public/resources/bootswatch/cerulean'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/cosmo/*.min.css'),gulp.dest('public/resources/bootswatch/cosmo'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/cyborg/*.min.css'),gulp.dest('public/resources/bootswatch/cyborg'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/darkly/*.min.css'),gulp.dest('public/resources/bootswatch/darkly'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/flatly/*.min.css'),gulp.dest('public/resources/bootswatch/flatly'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/journal/*.min.css'),gulp.dest('public/resources/bootswatch/journal'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/lumen/*.min.css'),gulp.dest('public/resources/bootswatch/lumen'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/paper/*.min.css'),gulp.dest('public/resources/bootswatch/paper'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/readable/*.min.css'),gulp.dest('public/resources/bootswatch/readable'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/sandstone/*.min.css'),gulp.dest('public/resources/bootswatch/sandstone'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/simplex/*.min.css'),gulp.dest('public/resources/bootswatch/simplex'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/slate/*.min.css'),gulp.dest('public/resources/bootswatch/slate'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/spacelab/*.min.css'),gulp.dest('public/resources/bootswatch/spacelab'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/superhero/*.min.css'),gulp.dest('public/resources/bootswatch/superhero'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/united/*.min.css'),gulp.dest('public/resources/bootswatch/united'));
|
||||
return pipeline(gulp.src('./node_modules/bootswatch/yeti/*.min.css'),gulp.dest('public/resources/bootswatch/yeti'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/dist/brite/*.min.css*'),gulp.dest('public/resources/bootswatch/brite'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/dist/cerulean/*.min.css*'),gulp.dest('public/resources/bootswatch/cerulean'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/dist/cosmo/*.min.css*'),gulp.dest('public/resources/bootswatch/cosmo'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/dist/cyborg/*.min.css*'),gulp.dest('public/resources/bootswatch/cyborg'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/dist/darkly/*.min.css*'),gulp.dest('public/resources/bootswatch/darkly'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/dist/flatly/*.min.css*'),gulp.dest('public/resources/bootswatch/flatly'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/dist/journal/*.min.css*'),gulp.dest('public/resources/bootswatch/journal'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/dist/litera/*.min.css*'),gulp.dest('public/resources/bootswatch/litera'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/dist/lumen/*.min.css*'),gulp.dest('public/resources/bootswatch/lumen'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/dist/lux/*.min.css*'),gulp.dest('public/resources/bootswatch/lux'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/dist/materia/*.min.css*'),gulp.dest('public/resources/bootswatch/materia'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/dist/minty/*.min.css*'),gulp.dest('public/resources/bootswatch/minty'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/dist/morph/*.min.css*'),gulp.dest('public/resources/bootswatch/morph'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/dist/pulse/*.min.css*'),gulp.dest('public/resources/bootswatch/pulse'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/dist/quartz/*.min.css*'),gulp.dest('public/resources/bootswatch/quartz'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/dist/sandstone/*.min.css*'),gulp.dest('public/resources/bootswatch/sandstone'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/dist/simplex/*.min.css*'),gulp.dest('public/resources/bootswatch/simplex'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/dist/sketchy/*.min.css*'),gulp.dest('public/resources/bootswatch/sketchy'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/dist/slate/*.min.css*'),gulp.dest('public/resources/bootswatch/slate'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/dist/solar/*.min.css*'),gulp.dest('public/resources/bootswatch/solar'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/dist/spacelab/*.min.css*'),gulp.dest('public/resources/bootswatch/spacelab'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/dist/superhero/*.min.css*'),gulp.dest('public/resources/bootswatch/superhero'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/dist/united/*.min.css*'),gulp.dest('public/resources/bootswatch/united'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/dist/vapor/*.min.css*'),gulp.dest('public/resources/bootswatch/vapor'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch/dist/yeti/*.min.css*'),gulp.dest('public/resources/bootswatch/yeti'));
|
||||
return pipeline(gulp.src('./node_modules/bootswatch/dist/zephyr/*.min.css*'),gulp.dest('public/resources/bootswatch/zephyr'));
|
||||
});
|
||||
|
||||
// Copy the bootswatch styles into their own folder so OSPOS can select one from the collection
|
||||
gulp.task('copy-bootswatch5', function() {
|
||||
pipeline(gulp.src('./node_modules/bootswatch5/dist/cerulean/*.min.css'),gulp.dest('public/resources/bootswatch5/cerulean'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch5/dist/cosmo/*.min.css'),gulp.dest('public/resources/bootswatch5/cosmo'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch5/dist/cyborg/*.min.css'),gulp.dest('public/resources/bootswatch5/cyborg'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch5/dist/darkly/*.min.css'),gulp.dest('public/resources/bootswatch5/darkly'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch5/dist/flatly/*.min.css'),gulp.dest('public/resources/bootswatch5/flatly'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch5/dist/journal/*.min.css'),gulp.dest('public/resources/bootswatch5/journal'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch5/dist/lumen/*.min.css'),gulp.dest('public/resources/bootswatch5/lumen'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch5/dist/sandstone/*.min.css'),gulp.dest('public/resources/bootswatch5/sandstone'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch5/dist/simplex/*.min.css'),gulp.dest('public/resources/bootswatch5/simplex'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch5/dist/slate/*.min.css'),gulp.dest('public/resources/bootswatch5/slate'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch5/dist/spacelab/*.min.css'),gulp.dest('public/resources/bootswatch5/spacelab'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch5/dist/superhero/*.min.css'),gulp.dest('public/resources/bootswatch5/superhero'));
|
||||
pipeline(gulp.src('./node_modules/bootswatch5/dist/united/*.min.css'),gulp.dest('public/resources/bootswatch5/united'));
|
||||
return pipeline(gulp.src('./node_modules/bootswatch5/dist/yeti/*.min.css'),gulp.dest('public/resources/bootswatch5/yeti'));
|
||||
|
||||
gulp.task('copy-js', function() {
|
||||
return pipeline(gulp.src('./node_modules/clipboard/dist/clipboard.min.js'),gulp.dest('public/resources/clipboard'));
|
||||
});
|
||||
|
||||
// Copy the bootstrap style into its own folder so OSPOS can select it from the collection
|
||||
gulp.task('copy-bootstrap', function() {
|
||||
pipeline(gulp.src('./node_modules/bootstrap/dist/css/bootstrap.min.css*'),gulp.dest('public/resources/bootswatch/bootstrap'));
|
||||
pipeline(gulp.src('./node_modules/bootstrap5/dist/css/bootstrap.min.css*'),gulp.dest('public/resources/bootswatch5/bootstrap'));
|
||||
return pipeline(gulp.src('./node_modules/bootstrap5/dist/css/bootstrap.rtl.min.css*'),gulp.dest('public/resources/bootswatch5/bootstrap'));
|
||||
return pipeline(gulp.src('./node_modules/bootstrap/dist/css/bootstrap.rtl.min.css*'),gulp.dest('public/resources/bootswatch/bootstrap'));
|
||||
});
|
||||
|
||||
// /public/resources/ospos - contains the minimized files to be packed into opensourcepos.min.[css/js]
|
||||
@@ -105,7 +101,7 @@ gulp.task('debug-js', function() {
|
||||
'./node_modules/jquery-form/src/jquery.form.js',
|
||||
'./node_modules/jquery-validation/dist/jquery.validate.js',
|
||||
'./node_modules/jquery-ui-dist/jquery-ui.js',
|
||||
'./node_modules/bootstrap/dist/js/bootstrap.js',
|
||||
'./node_modules/bootstrap/dist/js/bootstrap.bundle.js',
|
||||
'./node_modules/bootstrap3-dialog/dist/js/bootstrap-dialog.js',
|
||||
'./node_modules/jasny-bootstrap/dist/js/jasny-bootstrap.js',
|
||||
'./node_modules/bootstrap-datetime-picker/js/bootstrap-datetimepicker.js',
|
||||
@@ -131,8 +127,7 @@ gulp.task('debug-js', function() {
|
||||
'./node_modules/bootstrap-notify/bootstrap-notify.js',
|
||||
'./node_modules/js-cookie/src/js.cookie.js',
|
||||
'./node_modules/bootstrap-tagsinput-2021/dist/bootstrap-tagsinput.js',
|
||||
'./node_modules/bootstrap-toggle/js/bootstrap-toggle.js',
|
||||
'./node_modules/clipboard/dist/clipboard.js',
|
||||
'./node_modules/bootstrap5-toggle/js/bootstrap5-toggle.ecmas.js',
|
||||
'./public/js/imgpreview.full.jquery.js',
|
||||
'./public/js/manage_tables.js',
|
||||
'./public/js/nominatim.autocomplete.js']).pipe(rev()).pipe(gulp.dest('public/resources/js'));
|
||||
@@ -204,14 +199,13 @@ gulp.task('debug-css', function() {
|
||||
'./node_modules/chartist/dist/chartist.css',
|
||||
'./node_modules/chartist-plugin-tooltips/dist/chartist-plugin-tooltip.css',
|
||||
'./node_modules/bootstrap-tagsinput-2021/src/bootstrap-tagsinput.css',
|
||||
'./node_modules/bootstrap-toggle/css/bootstrap-toggle.css',
|
||||
'./node_modules/bootstrap5-toggle/css/bootstrap5-toggle.css',
|
||||
'./public/css/bootstrap.autocomplete.css',
|
||||
'./public/css/interface.css',
|
||||
'./public/css/invoice.css',
|
||||
'./public/css/ospos_print.css',
|
||||
'./public/css/ospos.css',
|
||||
'./public/css/popupbox.css',
|
||||
'./public/css/receipt.css',
|
||||
'./public/css/register.css',
|
||||
'./public/css/reports.css'
|
||||
]).pipe(rev()).pipe(gulp.dest('public/resources/css'));
|
||||
return gulp.src('./app/Views/partial/header.php').pipe(inject(debugcss,{addRootSlash: false, ignorePath: '/public/', starttag: '<!-- inject:debug:css -->'})).pipe(gulp.dest('./app/Views/partial'));
|
||||
@@ -230,19 +224,18 @@ gulp.task('prod-css', function() {
|
||||
var opensourcepos3css = gulp.src(['./node_modules/bootstrap-select/dist/css/bootstrap-select.min.css',
|
||||
'./node_modules/bootstrap-table/dist/bootstrap-table.min.css',
|
||||
'./node_modules/bootstrap-table/dist/extensions/sticky-header/bootstrap-table-sticky-header.min.css',
|
||||
'./node_modules/bootstrap-toggle/css/bootstrap-toggle.min.css',
|
||||
'./node_modules/bootstrap5-toggle/css/bootstrap5-toggle.min.css',
|
||||
'./node_modules/chartist/dist/chartist.min.css']);
|
||||
|
||||
var opensourcepos4css = gulp.src('./node_modules/chartist-plugin-tooltips/dist/chartist-plugin-tooltip.css').pipe(cleanCSS({compatibility: 'ie8'}));
|
||||
|
||||
var opensourcepos5css = gulp.src(['./node_modules/chartist-plugin-tooltips/dist/chartist-plugin-tooltip.css',
|
||||
'./public/css/bootstrap.autocomplete.css',
|
||||
'./public/css/interface.css',
|
||||
'./public/css/invoice.css',
|
||||
'./public/css/ospos.css',
|
||||
'./public/css/ospos_print.css',
|
||||
'./public/css/popupbox.css',
|
||||
'./public/css/receipt.css',
|
||||
'./public/css/register.css',
|
||||
'./public/css/reports.css'
|
||||
]).pipe(cleanCSS({compatibility: 'ie8'}));
|
||||
|
||||
@@ -294,8 +287,8 @@ gulp.task('default',
|
||||
gulp.series('clean',
|
||||
'update-licenses',
|
||||
'copy-bootswatch',
|
||||
'copy-bootswatch5',
|
||||
'copy-bootstrap',
|
||||
'copy-js',
|
||||
'debug-js',
|
||||
'prod-js',
|
||||
'debug-css',
|
||||
|
||||
1227
package-lock.json
generated
1227
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
31
package.json
31
package.json
@@ -30,19 +30,17 @@
|
||||
},
|
||||
"type": "module",
|
||||
"dependencies": {
|
||||
"bootstrap": "^3.4.1",
|
||||
"bootstrap-daterangepicker": "^2.1.27",
|
||||
"bootstrap": "^5.3.8",
|
||||
"bootstrap-daterangepicker": "^3.1.0",
|
||||
"bootstrap-datetime-picker": "2.4.4",
|
||||
"bootstrap-icons": "^1.13.1",
|
||||
"bootstrap-notify": "^3.1.3",
|
||||
"bootstrap-select": "^1.13.18",
|
||||
"bootstrap-table": "^1.23.5",
|
||||
"bootstrap-notify": "github:BudsieBuds/bootstrap-notify#master",
|
||||
"bootstrap-select": "^1.14.0-beta3",
|
||||
"bootstrap-table": "^1.24.2",
|
||||
"bootstrap-tagsinput-2021": "^0.8.6",
|
||||
"bootstrap-toggle": "^2.2.2",
|
||||
"bootstrap3-dialog": "github:nakupanda/bootstrap3-dialog#master",
|
||||
"bootstrap5": "npm:bootstrap@^5.3.5",
|
||||
"bootswatch": "^3.4.1",
|
||||
"bootswatch5": "npm:bootswatch@^5.3.5",
|
||||
"bootstrap5-toggle": "^5.1.2",
|
||||
"bootswatch": "^5.3.8",
|
||||
"chartist": "^0.11.4",
|
||||
"chartist-plugin-axistitle": "^0.0.7",
|
||||
"chartist-plugin-barlabels": "^0.0.5",
|
||||
@@ -63,10 +61,11 @@
|
||||
"js-cookie": "^2.2.1",
|
||||
"jspdf": "^3.0.2",
|
||||
"jspdf-autotable": "^5.0.2",
|
||||
"tableexport.jquery.plugin": "^1.30.0"
|
||||
"tableexport.jquery.plugin": "^1.30.0",
|
||||
"tom-select": "^2.4.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"gulp": "^5.0.0",
|
||||
"gulp": "^5.0.1",
|
||||
"gulp-clean": "^0.4.0",
|
||||
"gulp-clean-css": "^4.3.0",
|
||||
"gulp-concat": "^2.6.1",
|
||||
@@ -74,14 +73,14 @@
|
||||
"gulp-gzip": "^1.4.2",
|
||||
"gulp-header": "^2.0.9",
|
||||
"gulp-inject": "^5.0.5",
|
||||
"gulp-rename": "^2.0.0",
|
||||
"gulp-rev": "^10.0.0",
|
||||
"gulp-rename": "^2.1.0",
|
||||
"gulp-rev": "^11.0.0",
|
||||
"gulp-run": "^1.7.1",
|
||||
"gulp-tar": "^4.0.0",
|
||||
"gulp-tar": "^5.0.0",
|
||||
"gulp-uglify": "^3.0.2",
|
||||
"gulp-zip": "^6.1.0",
|
||||
"license-report": "^6.7.2",
|
||||
"npm-check-updates": "^17.1.14",
|
||||
"license-report": "^6.8.0",
|
||||
"npm-check-updates": "^18.1.1",
|
||||
"readable-stream": "^4.4.2",
|
||||
"stream-series": "^0.1.1"
|
||||
}
|
||||
|
||||
71
public/css/interface.css
Normal file
71
public/css/interface.css
Normal file
@@ -0,0 +1,71 @@
|
||||
/* Standard Desktop Styling */
|
||||
html {
|
||||
height: -webkit-fill-available; /* Prevent mobile webkit browsers from dropping footer behind the navigation bar */
|
||||
}
|
||||
|
||||
body {
|
||||
min-height: 100vh;
|
||||
min-height: -webkit-fill-available; /* Prevent mobile webkit browsers from dropping footer behind the navigation bar */
|
||||
}
|
||||
|
||||
@media (min-width: 1640px) {
|
||||
.container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {
|
||||
max-width: 1560px;
|
||||
}
|
||||
}
|
||||
|
||||
nav img {
|
||||
height: 2.5em;
|
||||
}
|
||||
|
||||
nav li:hover {
|
||||
background-color: rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
|
||||
main {
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
section>div {
|
||||
flex-basis: 10%;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
section a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
section>div img {
|
||||
transition: all 0.1s ease-in-out;
|
||||
}
|
||||
|
||||
section>div:hover img {
|
||||
transform: scale(1.05);
|
||||
}
|
||||
|
||||
section>div:hover .tile-text span {
|
||||
color: rgba(255, 255, 255, 0.75)
|
||||
}
|
||||
|
||||
section img {
|
||||
height: 6em;
|
||||
}
|
||||
|
||||
@media (max-width: 991.98px) {
|
||||
.container-navbar {
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
nav img {
|
||||
height: 1.5em;
|
||||
}
|
||||
|
||||
#navbar:last-child {
|
||||
padding-bottom: 0.5em;
|
||||
}
|
||||
}
|
||||
|
||||
.mw-register {
|
||||
min-width: 1114px;
|
||||
}
|
||||
@@ -1,186 +0,0 @@
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
html,
|
||||
body {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
a.none {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.topbar {
|
||||
color: #eee;
|
||||
font-size: 12px;
|
||||
background: #182735;
|
||||
padding: 0.2em;
|
||||
}
|
||||
|
||||
/* Add container-xxl width from Bootstrap 5 */
|
||||
@media (min-width: 1400px) {
|
||||
.container {
|
||||
width: 1320px;
|
||||
}
|
||||
}
|
||||
|
||||
.navbar {
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.tab-pane {
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
.navbar-default .navbar-nav>.active>a,
|
||||
.navbar-default .navbar-nav>.active>a:hover,
|
||||
.navbar-default .navbar-nav>.active>a:focus {
|
||||
color: #2C3E50;
|
||||
background-color: #FFFFFF;
|
||||
}
|
||||
|
||||
.jumbotron.push-spaces {
|
||||
margin: 0; /* Add this */
|
||||
}
|
||||
|
||||
.navbar .menu-icon {
|
||||
text-align: center;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.navbar .menu-icon img {
|
||||
width: 24px;
|
||||
}
|
||||
|
||||
.wrapper {
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
#title_bar {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 3em;
|
||||
}
|
||||
|
||||
#page_title {
|
||||
font-size: 22px;
|
||||
font-family: "Lato", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
#page_subtitle {
|
||||
margin-bottom: 0.5em;
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#home_module_list,
|
||||
#office_module_list {
|
||||
position: relative;
|
||||
padding: 2em 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.module_item {
|
||||
min-width: 7em;
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.module_item a {
|
||||
display: block;
|
||||
}
|
||||
|
||||
#config_wrapper {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#config_info {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
#config_info .wide {
|
||||
width: 30%;
|
||||
}
|
||||
|
||||
#integrations_header {
|
||||
margin: 10px 0;
|
||||
text-align: center;
|
||||
font-size: 1.4em;
|
||||
font-weight: normal;
|
||||
padding: 10px 0
|
||||
}
|
||||
|
||||
#footer {
|
||||
margin-top: 5em;
|
||||
position: relative;
|
||||
text-align: center;
|
||||
font-size: 11px;
|
||||
color: #777777;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
a.rollover img {
|
||||
padding: 3px;
|
||||
}
|
||||
|
||||
#filters.btn-group {
|
||||
vertical-align: none;
|
||||
}
|
||||
|
||||
button.btn.dropdown-toggle.btn-sm {
|
||||
background-color: white;
|
||||
color: black;
|
||||
border: 2px solid #dce4ec;
|
||||
}
|
||||
|
||||
.dropdown-menu {
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.bootstrap-tagsinput {
|
||||
background-color: white;
|
||||
color: black;
|
||||
border: 2px solid #dce4ec;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
label.required {
|
||||
color: red;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.navbar-nav>li>a {
|
||||
padding: 10px 10px 9px;
|
||||
}
|
||||
|
||||
.modal-dlg .modal-dialog {
|
||||
width: 500px;
|
||||
}
|
||||
|
||||
.modal-dlg-wide .modal-dialog {
|
||||
width: 750px;
|
||||
}
|
||||
}
|
||||
|
||||
.modal-body {
|
||||
max-height: calc(100vh - 212px);
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.no-gutter [class*="-1"] {
|
||||
padding-right: 0;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.icon-spacing {
|
||||
margin-right: .5em;
|
||||
}
|
||||
|
||||
/* Recreate font-monospace class from Bootstrap 5 */
|
||||
.font-monospace {
|
||||
font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
|
||||
}
|
||||
@@ -1,108 +0,0 @@
|
||||
#register_wrapper {
|
||||
float: left;
|
||||
width: 70%;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
#mode_form,
|
||||
#add_item_form {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#mode_form .panel-body,
|
||||
#add_item_form .panel-body {
|
||||
padding: 0.7em;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#mode_form ul,
|
||||
#add_item_form ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#mode_form ul li,
|
||||
#add_item_form ul li {
|
||||
margin-left: 1em;
|
||||
}
|
||||
|
||||
.first_li {
|
||||
margin-left: 0.2em !important;
|
||||
}
|
||||
|
||||
#mode_form ul.dropdown-menu.inner,
|
||||
#add_item_form ul.dropdown-menu.inner {
|
||||
margin-left: -1em !important;
|
||||
}
|
||||
|
||||
#register {
|
||||
padding: 0;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
#register th {
|
||||
padding: 5px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#register td {
|
||||
padding: 3px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#overall_sale {
|
||||
width: 29%;
|
||||
float: left;
|
||||
margin-left: 0.1em;
|
||||
padding-bottom: 1em;
|
||||
padding-top: 1em;
|
||||
font-size: 13px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#overall_sale .panel-body {
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
#overall_sale .form-group {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#overall_sale .btn {
|
||||
margin-top: 0.5em;
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
#payment_details,
|
||||
#buttons_sale,
|
||||
#suspended_sales_table {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.sales_table_100 {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#sale_totals,
|
||||
#payment_totals {
|
||||
border-top: 1px solid #000;
|
||||
}
|
||||
|
||||
input#amount_tendered:disabled {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#payment_details {
|
||||
float: left;
|
||||
border-top: 1px solid #000;
|
||||
margin-top: 0.2em;
|
||||
padding: 0.5em;
|
||||
text-align: left;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.alert {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
17
public/js/bs-modal_switch_content.js
Normal file
17
public/js/bs-modal_switch_content.js
Normal file
@@ -0,0 +1,17 @@
|
||||
function modalSwitchProfile() {
|
||||
document.getElementById("modal-profile").classList.remove("d-none");
|
||||
document.getElementById("modal-password").classList.add("d-none");
|
||||
document.getElementById("modal-button-profile").classList.add("active");
|
||||
document.getElementById("modal-button-password").classList.remove("active");
|
||||
document.getElementById("modal-button-save").classList.add("d-none");
|
||||
document.getElementById("modal-button-logout").classList.remove("d-none");
|
||||
}
|
||||
|
||||
function modalSwitchPassword() {
|
||||
document.getElementById("modal-password").classList.remove("d-none");
|
||||
document.getElementById("modal-profile").classList.add("d-none");
|
||||
document.getElementById("modal-button-password").classList.add("active");
|
||||
document.getElementById("modal-button-profile").classList.remove("active");
|
||||
document.getElementById("modal-button-logout").classList.add("d-none");
|
||||
document.getElementById("modal-button-save").classList.remove("d-none");
|
||||
}
|
||||
22
public/js/bs-tab_anchor_linking.js
Normal file
22
public/js/bs-tab_anchor_linking.js
Normal file
@@ -0,0 +1,22 @@
|
||||
// Deep linking - load tab on refresh
|
||||
let url = location.href.replace(/\/$/, "");
|
||||
if (location.hash) {
|
||||
const hash = url.split("#");
|
||||
const currentTab = document.querySelector('#configs-list-tab button[href="#' + hash[1] + '"]' || '#configs-dropdown a[href="#' + hash[1] + '"]');
|
||||
const curTab = new bootstrap.Tab(currentTab);
|
||||
curTab.show();
|
||||
url = location.href.replace(/\/#/, "#");
|
||||
history.replaceState(null, null, url);
|
||||
}
|
||||
|
||||
// Change url based on selected tab
|
||||
const selectableTabList = [].slice.call(document.querySelectorAll('button[data-bs-toggle="tab"]' || 'a[data-bs-toggle="tab"]'));
|
||||
selectableTabList.forEach((selectableTab) => {
|
||||
const selTab = new bootstrap.Tab(selectableTab);
|
||||
selectableTab.addEventListener("click", function () {
|
||||
var newUrl;
|
||||
const hash = selectableTab.getAttribute("href");
|
||||
newUrl = url.split("#")[0] + hash;
|
||||
history.replaceState(null, null, newUrl);
|
||||
});
|
||||
});
|
||||
3
public/js/bs-tooltips.js
Normal file
3
public/js/bs-tooltips.js
Normal file
@@ -0,0 +1,3 @@
|
||||
// Bootstrap 5 - Initialize all tooltips on a page - from https://getbootstrap.com/docs/5.3/components/tooltips/#enable-tooltips
|
||||
const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]')
|
||||
const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl))
|
||||
20
public/js/bs-validation.js
Normal file
20
public/js/bs-validation.js
Normal file
@@ -0,0 +1,20 @@
|
||||
// Bootstrap 5 - from https://getbootstrap.com/docs/5.3/forms/validation/#custom-styles
|
||||
// Example starter JavaScript for disabling form submissions if there are invalid fields
|
||||
(() => {
|
||||
'use strict'
|
||||
|
||||
// Fetch all the forms we want to apply custom Bootstrap validation styles to
|
||||
const forms = document.querySelectorAll('.needs-validation')
|
||||
|
||||
// Loop over them and prevent submission
|
||||
Array.from(forms).forEach(form => {
|
||||
form.addEventListener('submit', event => {
|
||||
if (!form.checkValidity()) {
|
||||
event.preventDefault()
|
||||
event.stopPropagation()
|
||||
}
|
||||
|
||||
form.classList.add('was-validated')
|
||||
}, false)
|
||||
})
|
||||
})()
|
||||
7
public/js/clipboard.min.js
vendored
7
public/js/clipboard.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -251,8 +251,11 @@
|
||||
localStorage[options.employee_id] = JSON.stringify(user_settings);
|
||||
dialog_support.init("a.modal-dlg");
|
||||
},
|
||||
loadingTemplate: function (loadingMessage) {
|
||||
return '<div class="w-100 h-100 bg-body text-center pt-2"><div class="spinner-grow spinner-grow-sm"></div><span class="ps-1" role="status">' + loadingMessage + '</span></div>'
|
||||
},
|
||||
loadingFontSize: '1em',
|
||||
queryParamsType: 'limit',
|
||||
iconSize: 'sm',
|
||||
silentSort: true,
|
||||
paginationVAlign: 'bottom',
|
||||
escape: true
|
||||
|
||||
Reference in New Issue
Block a user