first commit
This commit is contained in:
84
admin/templates/list/artsections.tpl
Normal file
84
admin/templates/list/artsections.tpl
Normal file
@@ -0,0 +1,84 @@
|
||||
{extends "../list.tpl"}
|
||||
|
||||
{block css append}
|
||||
<link href="./static/js/jquery.tree-drag-drop.css?t={$header.date}" rel="stylesheet" media="screen">
|
||||
<style>
|
||||
{$sizeSum = 0}
|
||||
{foreach $columns.fields as $name => $column}
|
||||
{if ($column.wpjAdmin and !isSuperuser()) or $column.visible == 'N'}
|
||||
{continue}
|
||||
{/if}
|
||||
{$sizeSum = $sizeSum + $column.size}
|
||||
{/foreach}
|
||||
{if $sizeSum > 0}{$singlePartRelSize = 100/$sizeSum}{else}{$singlePartRelSize = 10}{/if}
|
||||
{$partCounter = 0}
|
||||
{foreach $columns.fields as $name => $column}
|
||||
{if ($column.wpjAdmin and !isSuperuser()) or $column.visible == 'N'}
|
||||
{continue}
|
||||
{/if}
|
||||
.tdd-row > .tdd-column-{$column@index + 1} {
|
||||
left: {$singlePartRelSize*$partCounter}%;
|
||||
width: {$singlePartRelSize*$column.size}%;
|
||||
}
|
||||
|
||||
{$partCounter = $partCounter + $column.size}
|
||||
{/foreach}
|
||||
</style>
|
||||
<link href="./static/js/jquery.tree-drag-drop.css?t={$header.date}" rel="stylesheet" media="screen">
|
||||
{/block}
|
||||
|
||||
{block js append}
|
||||
<script src="./static/js/jquery.tree-drag-drop.js?t={$header.date}"></script>
|
||||
{/block}
|
||||
|
||||
{block "list-filter"}{/block}
|
||||
|
||||
{block bottomPagination}{/block}
|
||||
|
||||
{block name="list-panel-class"}menu-list{/block}
|
||||
|
||||
{block listTable}
|
||||
<div class="tdd-row thh-row">
|
||||
{foreach $columns.fields as $label => $column}
|
||||
{if ($column.wpjAdmin and !isSuperuser()) or $column.visible == 'N'}
|
||||
{continue}
|
||||
{/if}
|
||||
<div class="tdd-column tdd-column-{$column@index + 1} {$view->resolveCallable($column.class, $entry) nofilter}">
|
||||
<small>{$object->printHeaderLabel($column.title, $column)} </small>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
|
||||
{function printTree}
|
||||
{foreach $data as $entry}
|
||||
{$width = 500 - ($entry.level * 26)}
|
||||
<li class="node {$view->resolveCallable($tableDef.class, $entry)}" data-id="{$view->getListRowValue($entry, $tableDef.id)}">
|
||||
<div class="nodeWrapper tdd-row">
|
||||
{foreach $tableDef.fields as $name => $column}
|
||||
<div class="list_item tdd-column tdd-column-{$column@index + 1} {$view->resolveCallable($column.class, $entry) nofilter}">
|
||||
{$view->printListRowItem($column, $entry)}
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
{if !empty($entry.submenu)}
|
||||
<ul class="tdd-tree">
|
||||
{printTree data=$entry.submenu tableDef=$tableDef}
|
||||
</ul>
|
||||
{/if}
|
||||
</li>
|
||||
{/foreach}
|
||||
{/function}
|
||||
<div class="treeDragDrop table" id="treeDragDrop_artsections">
|
||||
<ul class="tdd-tree nestedSortable nestedSortableRoot">
|
||||
{printTree data=$SQL tableDef=$columns}
|
||||
</ul>
|
||||
</div>
|
||||
{/block}
|
||||
|
||||
{block unsortable}unsortable{/block}
|
||||
|
||||
<script type="text/javascript">
|
||||
{block onready append}
|
||||
initListTree('sections', "{$ctrl.currUrl.Rel nofilter}&acn=drag");
|
||||
{/block}
|
||||
</script>
|
||||
15
admin/templates/list/dbbackup.tpl
Normal file
15
admin/templates/list/dbbackup.tpl
Normal file
@@ -0,0 +1,15 @@
|
||||
{extends "list.tpl"}
|
||||
|
||||
<script>
|
||||
{block onready append}
|
||||
$('body').on('click', '[data-rename]', function() {
|
||||
var $this = $(this),
|
||||
newName = window.prompt("Zadejte nové jméno zálohy", $this.data('rename'));
|
||||
|
||||
if (newName)
|
||||
window.location = $this.attr('href') + '&new_name=' + newName;
|
||||
|
||||
return false;
|
||||
});
|
||||
{/block}
|
||||
</script>
|
||||
216
admin/templates/list/menu.tpl
Normal file
216
admin/templates/list/menu.tpl
Normal file
@@ -0,0 +1,216 @@
|
||||
{extends "../list.tpl"}
|
||||
|
||||
{block css append}
|
||||
<style>
|
||||
{$sizeSum = 0}
|
||||
{foreach $columns.fields as $name => $column}
|
||||
{if ($column.wpjAdmin and !isSuperuser()) or $column.visible == 'N'}
|
||||
{continue}
|
||||
{/if}
|
||||
{$sizeSum = $sizeSum + $column.size}
|
||||
{/foreach}
|
||||
{if $sizeSum > 0}{$singlePartRelSize = 100/$sizeSum}{else}{$singlePartRelSize = 10}{/if}
|
||||
{$partCounter = 0}
|
||||
{foreach $columns.fields as $name => $column}
|
||||
{if ($column.wpjAdmin and !isSuperuser()) or $column.visible == 'N'}
|
||||
{continue}
|
||||
{/if}
|
||||
.tdd-row > .tdd-column-{$column@index + 1} {
|
||||
left: {$singlePartRelSize*$partCounter}%;
|
||||
width: {$singlePartRelSize*$column.size}%;
|
||||
}
|
||||
|
||||
{$partCounter = $partCounter + $column.size}
|
||||
{/foreach}
|
||||
</style>
|
||||
{/block}
|
||||
|
||||
{block name="list-panel-class"}menu-list{/block}
|
||||
|
||||
{block addFilter}
|
||||
{* todo podle sekcí ?? *}
|
||||
{*<div class="filter-item">
|
||||
{if $smarty.get.opened == 'all'}
|
||||
<a class="btn btn-xs btn-ghost" href="launch.php?s={$view->getPageHandler()}&type={$view->getListName()}">
|
||||
<i class="bi bi-dash-circle m-r-1"></i>Sbalit vše
|
||||
</a>
|
||||
{else}
|
||||
<a class="btn btn-xs btn-ghost" href="launch.php?s={$view->getPageHandler()}&type={$view->getListName()}&opened=all">
|
||||
<i class="bi bi-plus-circle m-r-1"></i>Rozbalit vše
|
||||
</a>
|
||||
{/if}
|
||||
</div>*}
|
||||
{/block}
|
||||
|
||||
{block "list-filter-pager"}
|
||||
{if $pager}
|
||||
<div class="filter-item">
|
||||
<span class="small text-muted">
|
||||
{$pager.total|number_format:0:".":" "} položek
|
||||
</span>
|
||||
</div>
|
||||
{/if}
|
||||
{/block}
|
||||
|
||||
{block "list-filter-columns-settings"}{/block}
|
||||
|
||||
{block listTable}
|
||||
<div class="tdd-row thh-row">
|
||||
{foreach $columns.fields as $label => $column}
|
||||
{if ($column.wpjAdmin and !isSuperuser()) or $column.visible == 'N'}
|
||||
{continue}
|
||||
{/if}
|
||||
<div class="tdd-column tdd-column-{$column@index + 1} {$view->resolveCallable($column.class, $entry) nofilter}">
|
||||
<small>{$object->printHeaderLabel($column.title, $column)} </small>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
<div class="table">
|
||||
{foreach $SQL.menu as $menuID => $menu}
|
||||
<div data-node-id="{$menuID}">
|
||||
<div class="sections-root">
|
||||
<div class="tdd-row">
|
||||
{* todo dynamic column index *}
|
||||
<div class="tdd-column tdd-column-1">
|
||||
<strong>{$menu.name}</strong>
|
||||
</div>
|
||||
<div class="tdd-column tdd-column-2">
|
||||
{if isSuperuser() and $menuID}
|
||||
<a href="javascript:nw('menu', {$menu.id}, '')">[{$menuID}] {if $menu.code}[{$menu.code}]{/if}</a>
|
||||
{/if}
|
||||
</div>
|
||||
<div class="tdd-column tdd-column-5 columnBtns">
|
||||
<div class="dropdown">
|
||||
<a class="btn btn-success btn-block btn-sm dropdown-toggle" data-toggle="dropdown" id="newItemDropdown_{$menuID}">
|
||||
<span class="bi bi-plus-lg m-r-1"></span>{'nestNewItem'|translate:'menulinks'}
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
{foreach $SQL.menuItemTypes as $typeID => $typeName}
|
||||
<li>
|
||||
<a href="javascript:nw('menu', '0', '{$menuID}&data[type]={$typeID}{if $menuID !== ''}&data[id_menu]={$menuID}{/if}&data[parent]={if $menuID === ''}null{else}{$menuID}{/if}');">
|
||||
<span class="{$SQL.menuItemTypesClasses[$typeID]}"></span> {'add'|cat:$typeName|translate:'menulinks'}
|
||||
</a>
|
||||
</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<form action="" method="post">
|
||||
{function printTree}
|
||||
{foreach $data as $entry}
|
||||
<li class="node {$view->resolveCallable($tableDef.class, $entry)}" data-node-id="{$view->getListRowValue($entry, $tableDef.id)}">
|
||||
<div class="nodeWrapper tdd-row">
|
||||
{foreach $tableDef.fields as $name => $column}
|
||||
<div class="list_item tdd-column tdd-column-{$column@index + 1} {$view->resolveCallable($column.class, $entry) nofilter}">
|
||||
{$view->printListRowItem($column, $entry)}
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
{if !empty($entry.submenu)}
|
||||
<ul>
|
||||
{printTree data=$entry.submenu tableDef=$tableDef}
|
||||
</ul>
|
||||
{/if}
|
||||
</li>
|
||||
{/foreach}
|
||||
{/function}
|
||||
|
||||
<div class="treeDragDrop table" id="treeDragDrop_{if $menuID}{$menuID}{else}null{/if}">
|
||||
<ul class="tdd-tree nestedSortable nestedSortableRoot">
|
||||
{printTree data=$menu['submenu'] tableDef=$columns}
|
||||
</ul>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
{/block}
|
||||
|
||||
{block js append}
|
||||
<script src="./static/js/jquery.mjs.nestedSortable.js"></script>
|
||||
{/block}
|
||||
|
||||
<script type="text/javascript">
|
||||
{block onready append}
|
||||
$('.nestedSortableRoot').on('click', '.opener', function(event) {
|
||||
event.preventDefault();
|
||||
$(this).closest('li').toggleClass('mjs-nestedSortable-collapsed').toggleClass('mjs-nestedSortable-expanded');
|
||||
$(this).toggleClass('bi-plus-circle').toggleClass('bi-dash-circle');
|
||||
return false;
|
||||
});
|
||||
var sortableContainers = [];
|
||||
{foreach $SQL.menu as $menuID => $menu}
|
||||
{*initListTree("sections", "{$ctrl.currUrl.Rel nofilter}&acn=drag&id_menu={$id_menu}", '#treeDragDrop_{$id_menu}');*}
|
||||
var nodesContainer = $('#treeDragDrop_{if $menuID}{$menuID}{else}null{/if} > ul');
|
||||
sortableContainers.push(nodesContainer);
|
||||
nodesContainer.nestedSortable({
|
||||
handle: '.drag-drop-mover',
|
||||
items: 'li.node',
|
||||
listType: 'ul',
|
||||
toleranceElement: '> div.nodeWrapper',
|
||||
placeholder: 'placeholder',
|
||||
isTree: true,
|
||||
connectWith: '.nestedSortableRoot',
|
||||
start: function(event, ui) {
|
||||
ui.item.startPos = ui.item.index();
|
||||
var $parent = ui.item.parents('[data-node-id]');
|
||||
ui.item.startParent = $parent.length ? $parent.data('node-id') : null;
|
||||
},
|
||||
update: function(event, ui) {
|
||||
// fire only once when moving between multiple nestedSortables (use the update method of the target)
|
||||
// https://stackoverflow.com/a/7340208
|
||||
if (this !== ui.item.closest('.nestedSortableRoot')[0]) {
|
||||
return;
|
||||
}
|
||||
$.each(sortableContainers, function(index, sortable) {
|
||||
sortable.nestedSortable('disable');
|
||||
});
|
||||
|
||||
// fix collapse toggle
|
||||
$('.nestedSortableRoot .node').each(function(index, el) {
|
||||
var $node = $(el);
|
||||
var $nodeToggle = $node.find('> .nodeWrapper > .nodeToggle');
|
||||
if ($node.find('> ul > .node').length) {
|
||||
$nodeToggle.fadeIn();
|
||||
} else {
|
||||
$nodeToggle.fadeOut();
|
||||
}
|
||||
if ($node.is('.mjs-nestedSortable-expanded')) {
|
||||
$nodeToggle.find('> span').addClass('glyphicon-minus-sign').removeClass('glyphicon-plus-sign');
|
||||
}
|
||||
});
|
||||
|
||||
var $parent = ui.item.parents('[data-node-id]');
|
||||
var data = {ldelim}tree: {ldelim}{rdelim}{rdelim};
|
||||
data['tree']['id'] = ui.item.data('node-id');
|
||||
if ($parent.length) {
|
||||
data['tree']['target'] = $parent.data('node-id');
|
||||
}
|
||||
data['tree']['position'] = ui.item.index();
|
||||
|
||||
// up or down?
|
||||
if (ui.item.startParent === data['tree']['target'] && ui.item.startPos <= data['tree']['position']) {
|
||||
data['tree']['position'] += 1;
|
||||
}
|
||||
|
||||
$.post('{$ctrl.currUrl.Rel nofilter}&acn=drag&menuID={if $menuID}{$menuID}{else}null{/if}', data, function(res) {
|
||||
//console.log (res.data.msg);
|
||||
//TODO: error handling
|
||||
return true;
|
||||
});
|
||||
|
||||
$.each(sortableContainers, function(index, sortable) {
|
||||
sortable.nestedSortable('enable');
|
||||
});
|
||||
},
|
||||
});
|
||||
{/foreach}
|
||||
{/block}
|
||||
</script>
|
||||
|
||||
{block unsortable}unsortable{/block}
|
||||
|
||||
{block bottomPagination}
|
||||
{/block}
|
||||
131
admin/templates/list/orderPayment.tpl
Normal file
131
admin/templates/list/orderPayment.tpl
Normal file
@@ -0,0 +1,131 @@
|
||||
{extends "../list.tpl"}
|
||||
|
||||
{block "content"}
|
||||
<form method="post" id="payments-form">
|
||||
|
||||
<script>
|
||||
var $form = $('#payments-form');
|
||||
</script>
|
||||
|
||||
{$smarty.block.parent}
|
||||
</form>
|
||||
{/block}
|
||||
|
||||
{block name="list-filter" prepend}
|
||||
{$addItem = $object->getAddItem()}
|
||||
{if !$addItem}
|
||||
<div class="panel-heading">
|
||||
<div class="panel-group panel-group-lists" id="orderPayments">
|
||||
<div>
|
||||
<div class="row bottom-space">
|
||||
{if $module.POS}
|
||||
<div class="col-md-3 control-label">
|
||||
<strong>Fyzicky v kase: </strong> {$in_pos|format_price}
|
||||
</div>
|
||||
{/if}
|
||||
<div class="col-md-{if $module.POS}}2{else}5{/if}">
|
||||
<a href="#" data-form-add class="btn btn-sm btn-success pull-left"><span class="glyphicon glyphicon-plus"></span> Přidat platbu</a>
|
||||
</div>
|
||||
|
||||
{ifmodule BANK_AUTO_PAYMENTS__FIO_BANK}
|
||||
<div class="col-md-2 col-md-offset-1 text-right">
|
||||
<button type="submit" name="acn" value="fioCheckPayments" href="" class="btn btn-sm btn-success btn-block">
|
||||
<span class="glyphicon glyphicon-credit-card"></span> Zkontrolovat platby
|
||||
</button>
|
||||
</div>
|
||||
{elsemodule}
|
||||
<div class="col-md-3">
|
||||
</div>
|
||||
{/ifmodule}
|
||||
|
||||
{if $module.POS}
|
||||
<div class="col-md-2 text-right">
|
||||
<a href="launch.php?s=printCenter.php&type=order&ID=1&set=POSClosure&date_from={$smarty.get.dateFrom}&date_to={$smarty.get.dateTo}&{if $specific_pos}specific_pos={$specific_pos}{/if}"
|
||||
class="btn btn-sm btn-primary btn-block"
|
||||
target="_blank">
|
||||
<span class="glyphicon glyphicon-print"></span> Vytisknout pokladní uzávěrku
|
||||
</a>
|
||||
</div>
|
||||
{/if}
|
||||
{if $module.POS || $module.NEW_POS}
|
||||
<div class="col-md-2 {if !$module.POS}col-md-offset-2{/if}">
|
||||
<button type='button' class="btn btn-sm btn-block btn-primary" name="action" value="multiInvoicePrint" onclick='$.redirectPost({ url:"launch.php?s=printCenter.php&type=order&set=order&", data: $form.serializeArray(), target:"Tisk faktur" })'> <span class="glyphicon glyphicon-print"></span> Vytisknout faktury</button>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
<div id="addItem">
|
||||
<div class="panel panel-heading panel-header">
|
||||
<div class="row">
|
||||
<div class="col-md-3 control-label">
|
||||
<strong>Poznámka</strong>
|
||||
</div>
|
||||
<div class="col-md-2 control-label">
|
||||
<strong>Přijato</strong>
|
||||
</div>
|
||||
<div class="col-md-2 control-label">
|
||||
<strong>Vydáno</strong>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<form method="post" action="">
|
||||
<div class="panel panel-body panel-send" id="orderPayments">
|
||||
<div class="form-group" data-form-new>
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
<input type="text" class="form-control input-sm" name="data[orderPayments][0][note]" value=""/>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<div class="input-group">
|
||||
<input type="text" class="form-control input-sm" name="data[orderPayments][0][inserted]" value=""/>
|
||||
<span class="input-group-addon">{$dbcfg.currency}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<div class="input-group">
|
||||
<input type="text" class="form-control input-sm" name="data[orderPayments][0][choosed]" value=""/>
|
||||
<span class="input-group-addon">{$dbcfg.currency}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-1">
|
||||
<input type="submit" name="Submit" class="btn btn-sm btn-primary pull-left" value="Přidat" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<input type="checkbox" style="display:none" name="cash" id="order_payments_show_in_cash" {if $smarty.get.cash || $smarty.post.cash}checked{/if}>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
if ($form) {
|
||||
$form.on('keypress', function(event) {
|
||||
if (event.key === 'Enter') {
|
||||
event.preventDefault();
|
||||
$form.find('input[type="submit"][name="Submit"]').trigger('click');
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
initForm({
|
||||
selector: '#orderPayments',
|
||||
beforeAdd: function(original){
|
||||
var $new = original();
|
||||
$new.find(':input[type=text]').val('');
|
||||
$new.find(':input[type=submit]').remove('');
|
||||
}
|
||||
});
|
||||
{*
|
||||
var checked = JSON.parse(localStorage.getItem("order_payments_show_in_cash"));
|
||||
if (checked == true){
|
||||
{if !$smarty.get.cash}
|
||||
window.location.href = window.location.href+'&cash=1';
|
||||
{/if}
|
||||
}
|
||||
*}
|
||||
</script>
|
||||
{/if}
|
||||
{/block}
|
||||
125
admin/templates/list/orders.tpl
Normal file
125
admin/templates/list/orders.tpl
Normal file
@@ -0,0 +1,125 @@
|
||||
{extends "../list.tpl"}
|
||||
|
||||
{block 'table-class'}table table-striped{/block}
|
||||
|
||||
{block "list-filter" append}
|
||||
{if !empty($sold)}
|
||||
<div class="panel-heading">
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
Prodejnost: <strong>Celkem</strong>: {$sold_total}
|
||||
</div>
|
||||
{foreach $sold as $year}
|
||||
<div class="col-md-2">
|
||||
<strong>{$year.year}</strong>: {$year.count}ks
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
{/block}
|
||||
|
||||
{block content}
|
||||
<style>
|
||||
{block "list-styles"}
|
||||
/* Delivery type statuses */
|
||||
{foreach $styles as $id => $style}
|
||||
{if $style.value}
|
||||
.badge-{$id} {
|
||||
background-color: {$style.value};
|
||||
border-color: {$style.value};
|
||||
}
|
||||
{else}
|
||||
.badge-{$id} {
|
||||
background: transparent;
|
||||
border-color: transparent;
|
||||
padding: 0;
|
||||
border-radius: 0;
|
||||
}
|
||||
{/if}
|
||||
{/foreach}
|
||||
|
||||
/* Order statuses */
|
||||
{foreach getOrderStatuses() as $id => $status}
|
||||
{if $dbcfg.highlight_order_rows == "Y"}
|
||||
{if $status.color}
|
||||
.status{$id}, .status{$id} td {
|
||||
background-color: {$status.color|color_lighter:13};
|
||||
}
|
||||
|
||||
.status{$id}:hover, .status{$id}:hover td {
|
||||
background-color: {$status.color|color_lighter:10};
|
||||
}
|
||||
{/if}
|
||||
tr.storno, tr.storno td {
|
||||
background-color: #f3cacb;
|
||||
}
|
||||
|
||||
tr.storno:hover, tr.storno:hover td {
|
||||
background-color: {'#f3cacb'|color_lighter:-5};
|
||||
}
|
||||
{/if}
|
||||
{if $status.color and $id != 0}
|
||||
.badge.status-{$id} {
|
||||
background-color: #{$status.color};
|
||||
border-color: #{$status.color};
|
||||
}
|
||||
{/if}
|
||||
{/foreach}
|
||||
{/block}
|
||||
</style>
|
||||
{$smarty.block.parent}
|
||||
{/block}
|
||||
|
||||
{block buttons prepend}
|
||||
{$sum = $view->getTotalPriceSum()}
|
||||
{if $sum}
|
||||
<div class="well well-sm m-b-0">
|
||||
Cena celkem: {$sum|format_price}
|
||||
</div>
|
||||
{/if}
|
||||
{/block}
|
||||
|
||||
|
||||
<script type="text/javascript">
|
||||
{block onready append}
|
||||
{block js_autoreload}
|
||||
{if !$dbcfg.autoreload_orders_list || $dbcfg.autoreload_orders_list == "Y"}
|
||||
var minute_timeout = false;
|
||||
var second_timeout = false;
|
||||
|
||||
setTimeout(function()
|
||||
{
|
||||
minute_timeout = true;
|
||||
if (minute_timeout && second_timeout)
|
||||
{
|
||||
customRefresh();
|
||||
window.location.reload();
|
||||
}
|
||||
}, 60000);
|
||||
|
||||
reloader();
|
||||
|
||||
function reloader()
|
||||
{
|
||||
resetTimer('orderList', 20000, function()
|
||||
{
|
||||
second_timeout = true;
|
||||
if (minute_timeout && second_timeout)
|
||||
{
|
||||
customRefresh();
|
||||
window.location.reload();
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
$(document).mousedown(function(){
|
||||
reloader();
|
||||
});
|
||||
$(document).keydown(function(){
|
||||
reloader();
|
||||
});
|
||||
{/if}
|
||||
{/block}
|
||||
{/block}
|
||||
</script>
|
||||
149
admin/templates/list/ordersMassProcess.tpl
Normal file
149
admin/templates/list/ordersMassProcess.tpl
Normal file
@@ -0,0 +1,149 @@
|
||||
{extends "list.tpl"}
|
||||
|
||||
{block 'list-header-check'}
|
||||
<div class="checkbox">
|
||||
<input type="checkbox" name="select-all" id="select-all" checked/>
|
||||
<label for="select-all">{*Zaškrtnout vše*}</label>
|
||||
</div>
|
||||
{/block}
|
||||
|
||||
{block 'table-class'}table table-mass-process{/block}
|
||||
|
||||
{block content}
|
||||
<style>
|
||||
{block "list-styles"}
|
||||
/* Order statuses */
|
||||
{foreach getOrderStatuses() as $id => $status}
|
||||
{if $status.color and $id != 0}
|
||||
.badge.status-{$id} {
|
||||
background-color: #{$status.color};
|
||||
border-color: #{$status.color};
|
||||
}
|
||||
{/if}
|
||||
{/foreach}
|
||||
{/block}
|
||||
</style>
|
||||
|
||||
<form method="post" id="balikobot-form">
|
||||
{$smarty.block.parent}
|
||||
</form>
|
||||
<script>
|
||||
var $form = $('#balikobot-form');
|
||||
$('#select-all').click(function(event) {
|
||||
if (this.checked) {
|
||||
$form.find(':checkbox').each(function() {
|
||||
this.checked = true;
|
||||
});
|
||||
} else {
|
||||
$form.find(':checkbox').each(function() {
|
||||
this.checked = false;
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
var unchecked = localStorage.getItem('listcheckedbalikonos');
|
||||
if (unchecked) {
|
||||
unchecked = JSON.parse(unchecked);
|
||||
for (var i = 0; i < unchecked.length; i++) {
|
||||
$("[value='" + unchecked[i] + "']").prop('checked', false);
|
||||
}
|
||||
localStorage.removeItem('listcheckedbalikonos');
|
||||
}
|
||||
|
||||
$("thead a").click(function() {
|
||||
var orders = $("[name='orders[]']:not(:checked)");
|
||||
|
||||
var unchecked = [];
|
||||
for (var i = 0; i < orders.length; i++) {
|
||||
unchecked.push(orders.eq(i).val());
|
||||
}
|
||||
|
||||
localStorage.setItem('listcheckedbalikonos', JSON.stringify(unchecked));
|
||||
|
||||
});
|
||||
</script>
|
||||
{/block}
|
||||
|
||||
{block bottomPagination}
|
||||
<div class="pagination-sticky">
|
||||
{include "utils/pager.tpl"}
|
||||
|
||||
<div class="pagination-buttons">
|
||||
{block buttons}
|
||||
<div class="{if $pageCount > 5}dropup{else}dropdown{/if} dropup-actions">
|
||||
<button class="btn dropdown-toggle" type="button" id="massProcessDropdownTrigger" data-toggle="dropdown">
|
||||
Tisk
|
||||
</button>
|
||||
<ul class="dropdown-menu" aria-labelledby="adminActionsDropdownTrigger" id="massProcessDropdown">
|
||||
{block buttons_dropup}
|
||||
<li>
|
||||
<a href=""
|
||||
onclick='$.redirectPost({ url:"launch.php?s=printCenter.php&type=order&set=order&", data:$form.serializeArray(), target:"Tisk faktur" });return false;'>
|
||||
HTML faktury</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href=""
|
||||
onclick='$.redirectPost({ url:"launch.php?s=printCenterPDF.php&type=order&set=multiplePDF&invoice_force=2", data:$form.serializeArray(), target:"Tisk faktur" });return false;'>
|
||||
PDF faktury</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href=""
|
||||
onclick='$.redirectPost({ url:"launch.php?s=printCenter.php&type=order&set=order&template=orderViewprintPickingList.tpl", data:$form.serializeArray(), target:"Tisk vychystávacího listu" });return false;'>
|
||||
Vychystávací listy</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href=""
|
||||
onclick='$.redirectPost({ url:"launch.php?s=printCenter.php&type=orders&template=massOrderViewprintPickingList.tpl", data:$form.serializeArray(), target:"Tisk hromadného vychystávacího listu" });return false;'>
|
||||
Hromadný vychystávací list</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href=""
|
||||
onclick='$.redirectPost({ url:"launch.php?s=printCenter.php&type=order&recap=1", data:$form.serializeArray(), target:"Tisk rekapitulace objednávky" });return false;'>
|
||||
Rekapitulace objednávky</a>
|
||||
</li>
|
||||
{/block}
|
||||
</ul>
|
||||
</div>
|
||||
{/block}
|
||||
|
||||
{block delivery_buttons}{/block}
|
||||
|
||||
{if !$smarty.get.balikonos}
|
||||
<div class="status-change">
|
||||
<div class="chosen-wrapper">
|
||||
{if $pageCount <= 5}
|
||||
{$css_class = "selecter selecter-down"}
|
||||
{else}
|
||||
{$css_class = "selecter selecter-up"}
|
||||
{/if}
|
||||
{print_select name="status" var=$cfg.Order.Status.global selected=$cfg.Modules.orders_mass_process.invoice_default_to
|
||||
param='form="balikobot-form"' class=$css_class}
|
||||
</div>
|
||||
|
||||
<div class="checkbox">
|
||||
<input type="checkbox" name="donotsend" value="ON" class="check" id="donotsend">
|
||||
<label for="donotsend"><strong>Ne</strong>odesílat zákazníkovi e-mail</label>
|
||||
</div>
|
||||
|
||||
<button type='submit' name=acn class="btn btn-primary" value="multiInvoiceChangeStatus" form="balikobot-form"
|
||||
onclick="if (!confirm('Opravdu chcete změnit stav?')) return false;">Změnit stav
|
||||
</button>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{if findModule("balikonos")}
|
||||
{if $cfg.Modules.balikonos.provider === 'balikobot'}
|
||||
<button type='button' class="btn btn-primary" name=action value=balikonos data-submit-loading
|
||||
onclick='$.redirectPost({ url:"launch.php?s=list.php&type=balikobot&action=insert{if $smarty.get.balikobot_user}&balikobot_user={$smarty.get.balikobot_user}{/if}", data:$form.serializeArray() })'>
|
||||
Nahrát do Balíkobota
|
||||
</button>
|
||||
{else}
|
||||
<button type='button' class="btn btn-primary" name=action value=balikonos data-submit-loading
|
||||
onclick='$.redirectPost({ url:"launch.php?s=list.php&type=balikonos&action=insert", data:$form.serializeArray() })'>
|
||||
Nahrát do Balíkonoše
|
||||
</button>
|
||||
{/if}
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
{/block}
|
||||
181
admin/templates/list/photos.tpl
Normal file
181
admin/templates/list/photos.tpl
Normal file
@@ -0,0 +1,181 @@
|
||||
{extends "../list.tpl"}
|
||||
|
||||
{block "list-filter"}
|
||||
{/block}
|
||||
|
||||
{block "list-wrapper-class"}list-photos{/block}
|
||||
{block "list-panel-class"}{/block}
|
||||
|
||||
{block listTable}
|
||||
<div class="row">
|
||||
<form data-photos-container class="photos-selection-container">
|
||||
<div class="{if $searchWnd}col-md-2 col-sm-3 col-xs-6{else}col-md-1 col-sm-2 col-xs-4{/if}" data-uploader-wrapper>
|
||||
<div class="file-uploader" data-file-upload>
|
||||
<div id="file-uploader"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div data-file-upload-list
|
||||
class="{if $searchWnd}col-md-2 col-sm-3 col-xs-6{else}col-md-1 col-sm-2 col-xs-4{/if} photos photos-file-upload-list"></div>
|
||||
|
||||
{foreach from=$SQL item=image}
|
||||
<div class="{if $searchWnd}col-md-2 col-sm-3 col-xs-6{else}col-md-1 col-sm-2 col-xs-4{/if} photos">
|
||||
{if getVal('multiSelect')}
|
||||
<div class="checkbox">
|
||||
<input type="checkbox" id="checkbox_{$image.id}" data-photo="{$image.id}" class="check">
|
||||
<label for="checkbox_{$image.id}"></label>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="thumbnail">
|
||||
{if $image.id_video}
|
||||
<span class="glyphicon glyphicon-film"></span>
|
||||
{/if}
|
||||
{if $image.image_tablet || $image.image_mobile}
|
||||
<span class="glyphicon glyphicon-phone"></span>
|
||||
{/if}
|
||||
<a href="{if getVal('multiSelect')}#photo{else}javascript:{if $searchWnd}searchResult('{$image.id}'){else}nw('photo', '{$image.id}'){/if};{/if}">
|
||||
<img src="{static_url url=$image.img.src}" class="img-rounded img-responsive" alt="">
|
||||
</a>
|
||||
{if $image.descr}
|
||||
<div class="caption text-center list_item">{$image.descr}</div>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
{/foreach}
|
||||
</form>
|
||||
</div>
|
||||
{/block}
|
||||
|
||||
{block bottomPagination}
|
||||
<div class="row footer window-btns">
|
||||
<div class="col-xs-8">
|
||||
{include "utils/pager.tpl"}
|
||||
</div>
|
||||
<div class="col-xs-4">
|
||||
{if getVal('multiSelect')}
|
||||
<button class="btn btn-primary btn-block submitPhotosSelectionBtn" data-submit-selection-btn>Vybrat obrázky</button>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
{/block}
|
||||
|
||||
{* Image uploader *}
|
||||
{block js append}
|
||||
<script src="/admin/static/fineuploader/jquery.fine-uploader.min.js"></script>
|
||||
<script type="text/template" id="qq-simple-thumbnails-template">
|
||||
<div class="qq-uploader-selector qq-uploader">
|
||||
<div class="qq-upload-drop-area-selector qq-upload-drop-area" qq-hide-dropzone>
|
||||
<div>
|
||||
<span></span>Přesuňte soubory sem
|
||||
</div>
|
||||
</div>
|
||||
<div class="qq-upload-button-selector">
|
||||
<p>
|
||||
<strong>Nahrát obrázek{ifmodule VIDEOS} nebo video{/ifmodule}</strong>
|
||||
<small>podporované formáty jsou .jpg, .jpeg, .png, .webp, .avif, .gif{if {find_module name='videos'}}, .mp4, .mkv, .m4a{/if}</small>
|
||||
</p>
|
||||
</div>
|
||||
<span class="qq-drop-processing-selector qq-drop-processing">
|
||||
<span class="qq-drop-processing-spinner-selector qq-drop-processing-spinner"></span>
|
||||
<span>Zpracovávám soubory...</span>
|
||||
</span>
|
||||
|
||||
<div class="qq-upload-list-selector qq-upload-list">
|
||||
<div class="qq-upload-instance">
|
||||
<span class="qq-upload-spinner-selector qq-upload-spinner"></span>
|
||||
<input class="qq-edit-filename-selector qq-edit-filename" tabindex="0" type="text">
|
||||
<a class="qq-upload-cancel-selector qq-upload-cancel" href="#">Zrušit <span class="fc icons_close"></span></a>
|
||||
<span class="qq-upload-status-text-selector qq-upload-status-text"></span>
|
||||
<span class="qq-upload-file-selector qq-upload-file"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
{/block}
|
||||
|
||||
<script>
|
||||
{block onready append}
|
||||
// Keep in sync with engine/admin/templates/adminPhotos.tpl !!
|
||||
var $el = $('[data-file-upload]');
|
||||
var $fileUploader = $el.find('#file-uploader');
|
||||
var extensions = ['jpeg', 'jpg', 'png', 'svg', 'webp', 'avif', 'gif'];
|
||||
{ifModule VIDEOS}
|
||||
extensions.push('mp4', 'mkv', 'm4a', 'm4v', 'mov');
|
||||
{/ifModule}
|
||||
|
||||
var uploaderOptions = {
|
||||
template: 'qq-simple-thumbnails-template',
|
||||
listElement: $('[data-file-upload-list]')[0],
|
||||
thumbnails: {
|
||||
placeholders: {
|
||||
waitingPath: 'static/fineuploader/placeholders/waiting-generic.png',
|
||||
notAvailablePath: 'static/fineuploader/placeholders/not_available-generic.png',
|
||||
},
|
||||
},
|
||||
request: {
|
||||
inputName: 'uploader',
|
||||
endpoint: 'launch.php?s=list.php&type=photos&acn=uploadImage&photos_type={$smarty.get.photos_type}',
|
||||
},
|
||||
blobProperties: {
|
||||
name: 'filename',
|
||||
},
|
||||
validation: {
|
||||
allowedExtensions: extensions,
|
||||
},
|
||||
callbacks: {
|
||||
onComplete: function(id, name, response) {
|
||||
var imageId = response.id;
|
||||
|
||||
if (response.success) {
|
||||
var href = '#photo';
|
||||
{if !getVal('multiSelect')}
|
||||
href = "javascript:{if $searchWnd}searchResult('" + imageId + "'){else}nw('photo', '" + imageId + "'){/if};";
|
||||
{/if}
|
||||
|
||||
var $photo = $('<div class="{if $searchWnd}col-md-2 col-sm-3 col-xs-6{else}col-md-1 col-sm-2 col-xs-4{/if} photos">\n' +
|
||||
'{if getVal('multiSelect')}<div class="checkbox">' +
|
||||
'<input type="checkbox" id="checkbox_' + imageId + '" data-photo="' + imageId + '" class="check" checked="checked">' +
|
||||
'<label for="checkbox_' + imageId + '"></label></div>{/if}' +
|
||||
' <div class="thumbnail">\n' +
|
||||
' <a href="' + href + '">\n' +
|
||||
' <img src="" class="img-rounded img-responsive" alt="">\n' +
|
||||
' </a>' +
|
||||
' <div class="caption text-center list_item">' + name + '</div>' +
|
||||
' </div>' +
|
||||
' </div>');
|
||||
$fileUploader.fineUploader('drawThumbnail', id, $photo.find('img'), 250, false);
|
||||
$('[data-uploader-wrapper]').after($photo);
|
||||
}
|
||||
},
|
||||
onAllComplete: function(succeeded, failed) {
|
||||
if (!failed.length) {
|
||||
$('[data-file-upload-list]').empty();
|
||||
}
|
||||
},
|
||||
},
|
||||
maxConnections: 1,
|
||||
};
|
||||
|
||||
$fileUploader.fineUploader(uploaderOptions);
|
||||
|
||||
{if getVal('multiSelect')}
|
||||
var $photosContainer = $('[data-photos-container]');
|
||||
$photosContainer.on('click', '.thumbnail > a', function(event) {
|
||||
event.preventDefault();
|
||||
var $checkbox = $(this).closest('.photos').find('input[type=checkbox]');
|
||||
$checkbox.prop('checked', !$checkbox.prop('checked'));
|
||||
});
|
||||
|
||||
$('[data-submit-selection-btn]').on('click', function(event) {
|
||||
event.preventDefault();
|
||||
var selectedIDs = [];
|
||||
$photosContainer.find('[data-photo]:checked').each(function(index, el) {
|
||||
selectedIDs.push($(el).attr('data-photo'));
|
||||
});
|
||||
searchResult(selectedIDs);
|
||||
});
|
||||
{/if}
|
||||
|
||||
{/block}
|
||||
</script>
|
||||
13
admin/templates/list/pos.tpl
Normal file
13
admin/templates/list/pos.tpl
Normal file
@@ -0,0 +1,13 @@
|
||||
{extends "../list.tpl"}
|
||||
|
||||
{block name="list-filter"}
|
||||
<div class="panel-heading">
|
||||
<div class="row">
|
||||
{ifmodule POS}
|
||||
<div class="col-md-3">
|
||||
<strong>Fyzicky v kase: </strong>{$var.in_pos|format_price}
|
||||
</div>
|
||||
{/ifmodule}
|
||||
</div>
|
||||
</div>
|
||||
{/block}
|
||||
767
admin/templates/list/products.massModification.fields.tpl
Normal file
767
admin/templates/list/products.massModification.fields.tpl
Normal file
@@ -0,0 +1,767 @@
|
||||
{function printDefaultField style="" maxlength="" attributes=""}
|
||||
<input data-type="{$namefield}" type="text" class="input full-size" name="{$item.input[0]}[{$IDpr}]" value="{$row[$item.field]}" onchange="update(this,'{$IDpr}')" {if $maxlength}maxlength="{$maxlength}"{/if} {if $style}style="{$style}"{/if} {$attributes} />
|
||||
{/function}
|
||||
|
||||
{function printCustomDataField style="" maxlength="" attributes=""}
|
||||
<input data-type="{$namefield}" type="text" class="input full-size" name="{$item.input[0]}[{$IDpr}][{$item.input[1]}]" value="{$row[$item.field]}" onchange="update(this,'{$IDpr}')" {if $maxlength}maxlength="{$maxlength}"{/if} {if $style}style="{$style}"{/if} {$attributes} />
|
||||
{/function}
|
||||
|
||||
{function printUnitSelection}
|
||||
{if $param.unit|count > 1}
|
||||
<span class="param-unit">
|
||||
<select class='selecter unit noflex' name="parameters[{$IDpr}][{$IDp}][{$param.value_id}][unit]" {$event}>
|
||||
{foreach $param.unit as $key => $unit}
|
||||
<option value="{$unit}" {if $unit == $param.row.unit}selected{/if}>{$unit}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</span>
|
||||
{else}
|
||||
{$param.unit[0]}
|
||||
{/if}
|
||||
{/function}
|
||||
|
||||
{function printField}
|
||||
{$ret = $object->printEditField($key, $row, $IDpr)}
|
||||
|
||||
{if $ret !== false && mb_substr($namefield, 0, 10) === 'figureFeed'}
|
||||
{$data = $view->getFeedData($item.feed.id, $IDpr)}
|
||||
{switch $item.item}
|
||||
{case "title"}
|
||||
<input data-type="{$namefield}" type="text" class="input full-size" name="feed[{$IDpr}][{$item.feed.id}][{$item.item}]" value="{$data[$item.item]}" onchange="update(this,'{$IDpr}')" maxlength="255" />
|
||||
{/case}
|
||||
{case "active"}
|
||||
{$figures = ['' => 'Nerozhoduje', '1' => 'Ano', '0' => 'Ne']}
|
||||
{if !$IDpr}
|
||||
{$figures['-1'] = "Vyberte"}
|
||||
{$data[$item.item] = "-1"}
|
||||
{/if}
|
||||
{$param = "onchange='update(this, {$IDpr})'"}
|
||||
{print_select name="feed[{$IDpr}][{$item.feed.id}][{$item.item}]" var=$figures selected=$data[$item.item] param=$param}
|
||||
{/case}
|
||||
{case "cpc"}
|
||||
<input type="text" class="input" name="feed[{$IDpr}][{$item.feed.id}][{$item.item}]" size="10" maxlength="50" value="{$data[$item.item]}" onchange="update(this,'{$IDpr}')" />
|
||||
{/case}
|
||||
{case "gift_text"}
|
||||
<input type="text" class="input" name="feed[{$IDpr}][{$item.feed.id}][{$item.item}]" maxlength="160" value="{$data[$item.item]}" onchange="update(this,'{$IDpr}')" />
|
||||
{/case}
|
||||
{case "id_section"}
|
||||
<select class="ajax-selecter" name="feed[{$IDpr}][{$item.feed.id}][{$item.item}]" data-type="feed_{if $item.feed.section_mapping}{$item.feed.section_mapping}{else}{$item.feed.type}{/if}" data-text-single="Vyberte sekci">
|
||||
<option value="{$data[$item.item]}" selected>{$data['section_name']}</option>
|
||||
</select>
|
||||
{/case}
|
||||
{default}
|
||||
{printDefaultField}
|
||||
{/switch}
|
||||
|
||||
{elseif $ret !== false && mb_strpos($namefield, 'storeItems') !== false}
|
||||
{$data = $view->getStoresData($item.store.id, $IDpr)}
|
||||
<input data-type="{$namefield}" type="text" class="input full-size" name="store[{$IDpr}][{$item.store.id}][{$item.item}]" value="{$data[$item.item]}" onchange="update(this,'{$IDpr}')"/>
|
||||
{elseif $ret !== false && mb_substr($namefield, 0, 15) === 'figurePriceList'}
|
||||
{$data = $view->getPriceListData($item.priceList.id, $IDpr)}
|
||||
<input data-type="{$namefield}" type="text" class="input full-size" name="priceList[{$IDpr}][{$item.priceList.id}][{$item.item}]" value="{$data[$item.item]}" onchange="update(this,'{$IDpr}')" maxlength="255" />
|
||||
{elseif mb_substr($namefield, 0, 15) === 'figureParameter'}
|
||||
{$IDp = $item.parameter}
|
||||
<div class="multi-item" data-multi-id="{$IDpr}" data-id_parameter="{$IDp}" data-multi="item">
|
||||
{if findModule('products_parameters', 'configurations')}
|
||||
<div>
|
||||
<label>
|
||||
<input type="hidden" name="parameters_configurations[{$IDpr}][{$IDp}][enabled]" value="N">
|
||||
<input type="checkbox" name="parameters_configurations[{$IDpr}][{$IDp}][enabled]" value="Y"
|
||||
{if $view->productHasParametersConfigurations($IDpr, $IDp)}checked="checked"{/if}
|
||||
onchange="update(this, '{$IDpr}')">
|
||||
Volitelné u produktu
|
||||
<a class="help-tip" data-toggle="tooltip"
|
||||
title="Požadovat od zákazníka vybrat hodnotu parametru před vložením do košíku. Zvolíte-li příplatek, tato částka se přičte k ceně produktu.">
|
||||
<i class="bi bi-question-circle"></i>
|
||||
</a>
|
||||
</label>
|
||||
</div>
|
||||
{/if}
|
||||
{foreach $ret as $key => $param}
|
||||
<div class="param-row" data-multi="row" data-multi-id="{$param.value_id}">
|
||||
{if $param.value_type == 'list'}
|
||||
<select type="text"
|
||||
name="parameters[{$IDpr}][{$IDp}][{$param.value_id}][value]"
|
||||
class="selecter"
|
||||
data-preload="ParametersValuesOnly"
|
||||
data-filter-type="autocomplete" data-autocomplete="parametersListValuesByParameter"
|
||||
data-autocomplete-params="id_parameter={$IDp}" onchange="update(this,'{$IDpr}')">
|
||||
<option value=""></option>
|
||||
<option value="{$param.value}" selected="selected"></option>
|
||||
</select>
|
||||
{else}
|
||||
<input type="text" class="input fullflex" style="min-width: 50px;" name="parameters[{$IDpr}][{$IDp}][{$param.value_id}][value]" size="10" maxlength="255" value="{$param.value}"/>
|
||||
{/if}
|
||||
<div class="unit">{printUnitSelection}</div>
|
||||
{if findModule('products_parameters', 'configurations')}
|
||||
<label>
|
||||
Příplatek:
|
||||
<input type="text" style="width: 60px;" class="input" name="parameters[{$IDpr}][{$IDp}][{$param.value_id}][price]"
|
||||
size="10" maxlength="50" value="{$param.row.configuration_price}" onchange="update(this,'{$IDpr}')"/>
|
||||
</label>
|
||||
{/if}
|
||||
<input data-multi="delete" class="hidden" type="checkbox" name="parameters[{$IDpr}][{$IDp}][{$param.value_id}][delete]"/>
|
||||
<span class="label noflex" data-multi="add" title="Přidat parametr"><i class="glyphicon glyphicon-plus"></i></span>
|
||||
<span class="label noflex" data-multi="del" title="Odebrat parametr"><i class="glyphicon glyphicon-minus"></i></span>
|
||||
</div>
|
||||
{/foreach}
|
||||
{elseif $ret !== false}
|
||||
{switch $namefield}
|
||||
{case "figureProducer"}
|
||||
{$name = $view->getProducerName($row.producer)}
|
||||
{print_select name="producer[{$IDpr}]" var=[$row.producer => $view->getProducerName($row.producer)] param="data-type='producers' data-value='{$name}'" class="ajax-selecter"}
|
||||
{/case}
|
||||
{case "figureDiscount"}
|
||||
{printDefaultField style="width: calc(100% - 2em);"} %
|
||||
{/case}
|
||||
|
||||
{case "figureLongDescr"}
|
||||
<textarea name="longDescr[{$IDpr}]" rows="14" cols="30">{$row.long_descr}</textarea>
|
||||
{insert_wysiwyg target="longDescr[{$IDpr}]" type="ProductDescription"}
|
||||
<script type="text/javascript">
|
||||
CKEDITOR.instances['longDescr[{$IDpr}]'].on('change', function() {
|
||||
var me = this;
|
||||
resetTimer('longDescr', 200, function() {
|
||||
me.updateElement();
|
||||
update(me.element.$, '{$IDpr}');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{/case}
|
||||
{case "figureParamsDescr"}
|
||||
<textarea name="paramsDescr[{$IDpr}]" rows="14" cols="30">{$row.parameters}</textarea>
|
||||
{insert_wysiwyg target="paramsDescr[{$IDpr}]" type="ProductDescription"}
|
||||
<script type="text/javascript">
|
||||
CKEDITOR.instances['paramsDescr[{$IDpr}]'].on('change', function() {
|
||||
var me = this;
|
||||
resetTimer('paramsDescr', 200, function() {
|
||||
me.updateElement();
|
||||
update(me.element.$, '{$IDpr}');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{/case}
|
||||
{case "figureFigure"}
|
||||
{$figures = ['Y' => 'Viditelné', 'N' => 'Skryté', 'O' => 'Prodej ukončen']}
|
||||
{if !$row.figure}
|
||||
{$figures['0'] = "Nezvoleno"}
|
||||
{$row.figure = "0"}
|
||||
{/if}
|
||||
{$param = "id='figures{$IDpr}' onchange='update(this, {$IDpr})'"}
|
||||
{print_select name="figures[{$IDpr}]" var=$figures selected=$row.figure param=$param}
|
||||
{/case}
|
||||
|
||||
{case 'figureCharge'}
|
||||
<div style="white-space: nowrap;">
|
||||
<div style="float: left;">
|
||||
{$param = "onchange='update(this, {$IDpr})'"}
|
||||
{print_select name="charge_id[{$IDpr}]" var=$CHARGES selected=$row.charge_id param=$param}
|
||||
</div>
|
||||
<div>
|
||||
<span class="small" for="charge_included{$IDpr}" style="padding: 0px 3px; opacity:.5;"> included:</span>
|
||||
<input type="checkbox" id="charge_included{$IDpr}" name="charge_included[{$IDpr}]"
|
||||
onchange="update(this,'{$IDpr}')" value="Y" {$row['charge_included']|checked:'Y'} />
|
||||
</div>
|
||||
</div>
|
||||
{/case}
|
||||
|
||||
{case "figureCollections"}
|
||||
<div class="multi-item" data-multi-id="{$IDpr}" data-multi="item">
|
||||
{foreach $ret.own as $key => $product}
|
||||
<div class="section-row" data-multi="row" data-multi-id="{$key}">
|
||||
<div class="fullflex">
|
||||
<select class="ajax-selecter" name="collections[{$IDpr}][{$key}][id_product_related]" data-type="product_id">
|
||||
<option value="{$product.id}" selected>{$product.title}</option>
|
||||
</select>
|
||||
</div>
|
||||
<input data-multi="delete" class="hidden" type="checkbox" name="collections[{$IDpr}][{$key}][delete]"/>
|
||||
<span class="label noflex" data-multi="add" title="Přidat"><i class="glyphicon glyphicon-plus"></i></span>
|
||||
<span class="label noflex" data-multi="del" title="Odebrat"><i class="glyphicon glyphicon-minus"></i></span>
|
||||
</div>
|
||||
{/foreach}
|
||||
{if !empty($ret.others)}<br /><strong>v cizích:</strong>{/if}
|
||||
{foreach $ret.others as $product}
|
||||
<a href="javascript:nw('product', '{$product.id}', 'noopener');" tabindex="-1">
|
||||
{$product.title}
|
||||
</a>
|
||||
<br />
|
||||
{/foreach}
|
||||
</div>
|
||||
{/case}
|
||||
|
||||
{case "figureProductSets"}
|
||||
<div class="multi-item" data-multi-id="{$IDpr}" data-multi="item">
|
||||
{foreach $ret as $key => $product}
|
||||
<div class="section-row" data-multi="row" data-multi-id="{$key}">
|
||||
<div class="fullflex">
|
||||
<select class="ajax-selecter" name="sets[{$IDpr}][{$key}][id_product_set]" data-type="product_id">
|
||||
<option value="{$product.id}" selected>{$product.title}</option>
|
||||
</select>
|
||||
</div>
|
||||
<input data-multi="delete" class="hidden" type="checkbox" name="sets[{$IDpr}][{$key}][delete]"/>
|
||||
<span class="label noflex" data-multi="add" title="Přidat"><i class="glyphicon glyphicon-plus"></i></span>
|
||||
<span class="label noflex" data-multi="del" title="Odebrat"><i class="glyphicon glyphicon-minus"></i></span>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
{/case}
|
||||
|
||||
{case "figureProductGifts"}
|
||||
<div class="multi-item" data-multi-id="{$IDpr}" data-multi="item">
|
||||
{foreach $ret as $key => $product}
|
||||
<div class="section-row" data-multi="row" data-multi-id="{$key}">
|
||||
<div class="fullflex">
|
||||
<select class="ajax-selecter" name="gifts[{$IDpr}][{$key}][id_product_gift]" data-type="product_id">
|
||||
<option value="{$product.id}" selected>{$product.title}</option>
|
||||
</select>
|
||||
</div>
|
||||
<input data-multi="delete" class="hidden" type="checkbox" name="gifts[{$IDpr}][{$key}][delete]"/>
|
||||
<span class="label noflex" data-multi="add" title="Přidat"><i class="glyphicon glyphicon-plus"></i></span>
|
||||
<span class="label noflex" data-multi="del" title="Odebrat"><i class="glyphicon glyphicon-minus"></i></span>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
{/case}
|
||||
|
||||
{case "figureProductLabels"}
|
||||
<div class="multi-item" data-multi-id="{$IDpr}" data-multi="item">
|
||||
{foreach $ret as $key => $label}
|
||||
<div class="section-row" data-multi="row" data-multi-id="{$key}">
|
||||
<div class="fullflex">
|
||||
<select class="ajax-selecter" name="labels[{$IDpr}][{$key}][id_label]" data-type="labels">
|
||||
<option value="{$label.id}" selected>{$label.name}</option>
|
||||
</select>
|
||||
</div>
|
||||
<input data-multi="delete" class="hidden" type="checkbox" name="labels[{$IDpr}][{$key}][delete]"/>
|
||||
<span class="label noflex" data-multi="add" title="Přidat"><i class="glyphicon glyphicon-plus"></i></span>
|
||||
<span class="label noflex" data-multi="del" title="Odebrat"><i class="glyphicon glyphicon-minus"></i></span>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
{/case}
|
||||
|
||||
{case "figurePhotos"}
|
||||
<div class="photos-items" style="display: inline; float: left;" data-id="{$IDpr}">
|
||||
<input type="hidden" class="prod-id" name="photo[{$IDpr}]" value="{$IDpr}" onchange="update(this,'{$IDpr}')">
|
||||
<span class="photos-row-form" style="float:left; display:none">
|
||||
<input type="hidden" class="photo-id" name="photos[{$IDpr}][][id_photo]" value="">
|
||||
{if $IDpr}
|
||||
<a style="cursor: pointer; position: relative;top: 25px;left: 65px;">
|
||||
<span class="list-no glyphicon glyphicon-remove-circle photos-del">
|
||||
<i>Smazat obrázek</i>
|
||||
</span>
|
||||
</a>
|
||||
{/if}
|
||||
<span class="thumbnail" style="margin: 0"><img class="img-rounded" style="height:80px !important;" src="" title="Obrázek č. " /></span>
|
||||
{if !empty($cfg.Photo.kind)}
|
||||
<span>
|
||||
<select class="selecter" name="photos[{$IDpr}][{$key}][show_in_lead]">
|
||||
{foreach $cfg.Photo.kind as $type => $name}
|
||||
<option {if $photo.show_in_lead == $type}selected{/if} value="{$type}">{$name}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</span>
|
||||
{/if}
|
||||
</span>
|
||||
<div style="float:right ">
|
||||
{* <input type="hidden" class="input photo-name" name="photos[{$IDpr}][]" id="photo{$IDpr}" size="45" maxlength="80" value="" onchange="update(this,'{$IDpr}')" />*}
|
||||
<a href="" title="Vyhledat obrázek" class="btn btn-sm add-photo {if $IDpr}disabled{/if}" id="photo{$IDpr}">
|
||||
<span class=" glyphicon glyphicon-search"></span>
|
||||
</a>
|
||||
</div>
|
||||
{foreach $ret as $key => $photo}
|
||||
<span class="photos-row" style="float:left;max-width: 88px !important;">
|
||||
<input type="hidden" name="photos[{$IDpr}][{$key}][id_photo]" value="{$photo.id}">
|
||||
<a style="cursor: pointer; position: relative;top: 25px;left: 65px;">
|
||||
<span class="list-no glyphicon glyphicon-remove-circle photos-del disabled">
|
||||
<i>Smazat obrázek</i>
|
||||
</span>
|
||||
</a>
|
||||
<span class="thumbnail" style="margin: 0">
|
||||
<img class="img-rounded" style="height:80px !important;" src="{$photo.src}" title="Obrázek č. {$photo.id}" />
|
||||
</span>
|
||||
{if !empty($cfg.Photo.kind)}
|
||||
<span>
|
||||
<select class="selecter" name="photos[{$IDpr}][{$key}][show_in_lead]">
|
||||
{foreach $cfg.Photo.kind as $type => $name}
|
||||
<option {if $photo.show_in_lead == $type}selected{/if} value="{$type}">{$name}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</span>
|
||||
{/if}
|
||||
</span>
|
||||
{/foreach}
|
||||
|
||||
</div>
|
||||
{/case}
|
||||
{case "figureRelated"}
|
||||
<div class="multi-item" data-multi-id="{$IDpr}" data-multi="item">
|
||||
{foreach $ret as $key => $product}
|
||||
<div class="section-row" data-multi="row" data-multi-id="{$key}">
|
||||
<div class="fullflex">
|
||||
<select class="ajax-selecter" name="products_related[{$IDpr}][{$key}][id_rel_product]" data-type="product_id">
|
||||
<option value="{$product.id_rel_product}" selected>{$product.title}</option>
|
||||
</select>
|
||||
</div>
|
||||
{if $view->productsRelatedTypes}
|
||||
<div style="width:100px !important;">
|
||||
{print_select var=$view->productsRelatedTypes name="products_related[{$IDpr}][{$key}][type]" selected=$product.type}
|
||||
</div>
|
||||
{/if}
|
||||
<input data-multi="delete" class="hidden" type="checkbox" name="products_related[{$IDpr}][{$key}][delete]"/>
|
||||
<span class="label noflex" data-multi="add" title="Přidat sekci"><i class="glyphicon glyphicon-plus"></i></span>
|
||||
<span class="label noflex" data-multi="del" title="Odebrat sekci"><i class="glyphicon glyphicon-minus"></i></span>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
|
||||
{/case}
|
||||
{case "figureMetaTitle"}
|
||||
{printDefaultField maxlength=70}
|
||||
{/case}
|
||||
{case "figureMetaDescription"}
|
||||
<textarea class="form-control input-sm" name="metaDescription[{$IDpr}]" maxlength="250" onclick="update(this,'{$IDpr}')">{$row.meta_description}</textarea>
|
||||
{/case}
|
||||
{case "figureMetaKeywords"}
|
||||
{printDefaultField maxlength=100}
|
||||
{/case}
|
||||
{case "figureAttachments"}
|
||||
<div class="multi-item" data-multi-id="{$IDpr}" data-multi="item">
|
||||
{foreach array_merge($ret, [[]]) as $key => $attach}
|
||||
<div class="section-row row attachments" style="margin-left: 0;" data-multi="row" data-multi-id="{$attach@iteration}">
|
||||
<div class="col-md-5">
|
||||
<div class="input-group">
|
||||
<input type="text" class="input" style="width: 220px;" id="attachLink" name="attachments[{$IDpr}][{$attach@iteration}][link]" value="{$attach.link}" placeholder="{'attachmentNote'|translate:"products"}"/>
|
||||
<div class="input-group-btn attach" style="width: 20px;">
|
||||
{insert_file_browse link="attachLink"}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<input type="text" class="input" style="width: 220px;" name="attachments[{$IDpr}][{$attach@iteration}][title]" value="{$attach.title}" placeholder="Název přílohy"/>
|
||||
</div>
|
||||
{ifmodule ATTACHMENTS__ATTACHMENTS_TYPES}
|
||||
<div class="col-md-4">
|
||||
<select title="Vyberte typ" name="attachments[{$IDpr}][{$attach@iteration}][type]" class="selecter">
|
||||
{foreach $cfg['Modules']['attachments']['attachments_types'] as $code => $label}
|
||||
<option value="{$code}" {if $code == $attach.type}selected{/if}>{$label}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
{/ifmodule}
|
||||
<input data-multi="delete" class="hidden" type="checkbox" name="attachments[{$IDpr}][{$attach@iteration}][delete]"/>
|
||||
<span class="label noflex" data-multi="add" title="Přidat článek"><i class="glyphicon glyphicon-plus"></i></span>
|
||||
<span class="label noflex" data-multi="del" title="Odebrat článek"><i class="glyphicon glyphicon-minus"></i></span>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
{/case}
|
||||
{case "productsLinks"}
|
||||
<div class="multi-item" data-multi-id="{$IDpr}" data-multi="item">
|
||||
{foreach array_merge($ret, [[]]) as $key => $link}
|
||||
<div class="section-row row attachments" style="margin-left: 0;" data-multi="row" data-multi-id="{$link@iteration}">
|
||||
<div class="col-md-5">
|
||||
<div class="input-group">
|
||||
<input type="text" class="input" style="width: 250px;" id="attachLink" name="links[{$IDpr}][{$link@iteration}][link]" value="{$link.link}" placeholder="{'attachmentNote'|translate:"products"}" />
|
||||
<div class="input-group-btn attach" style="width: 20px;">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<input type="text" class="input" style="width: 230px;" name="links[{$IDpr}][{$link@iteration}][title]" value="{$link.title}" placeholder="Název odkazu"/>
|
||||
</div>
|
||||
{if !empty($cfg.Links.Types)}
|
||||
<div class="col-md-2">
|
||||
<select title="{'linkType'|translate}" name="links[{$IDpr}][{$link@iteration}][type]" class="selecter">
|
||||
{foreach $cfg.Links.Types as $name => $title}
|
||||
<option value="{$name}" {if $link.type == $name}selected{/if}>{$title}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
{/if}
|
||||
<input data-multi="delete" class="hidden" type="checkbox" name="links[{$IDpr}][{$link@iteration}][delete]"/>
|
||||
<span class="label noflex" data-multi="add" title="Přidat článek"><i class="glyphicon glyphicon-plus"></i></span>
|
||||
<span class="label noflex" data-multi="del" title="Odebrat článek"><i class="glyphicon glyphicon-minus"></i></span>
|
||||
|
||||
</div>
|
||||
{/foreach}
|
||||
|
||||
</div>
|
||||
{/case}
|
||||
{case "figureCategory"}
|
||||
<div class="multi-item" data-multi-id="{$IDpr}" data-multi="item">
|
||||
{foreach $ret as $key => $section}
|
||||
<div class="section-row" data-multi="row" data-multi-id="{$section.id_section}">
|
||||
<div class="fullflex">
|
||||
{$section = $view->getSectionInfo($section.id_section)}
|
||||
<select data-visibleOnly="false" class="ajax-selecter" name="sections[{$IDpr}][{$section.id_section}][id_section]" data-type="categories" data-value="{$section.name}">
|
||||
<option value="{$section.id_section}" selected>{$section.path}</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<input data-multi="delete" class="hidden" type="checkbox" name="sections[{$IDpr}][{$section.id_section}][delete]"/>
|
||||
<span class="label noflex" data-multi="add" title="Přidat sekci"><i class="glyphicon glyphicon-plus"></i></span>
|
||||
<span class="label noflex" data-multi="del" title="Odebrat sekci"><i class="glyphicon glyphicon-minus"></i></span>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
{/case}
|
||||
{case "figureTemplates"}
|
||||
<div class="multi-item" data-multi-id="{$IDpr}" data-multi="item">
|
||||
{foreach $ret as $template}
|
||||
<div class="param-row" data-multi="row" data-multi-id="{$template@iteration}">
|
||||
<div class="fullflex">
|
||||
<select class="ajax-selecter" name="templates[{$IDpr}][{$template@iteration}][id_template]" data-type="templates">
|
||||
<option value="{$template.id}" selected>{$template.name}</option>
|
||||
</select>
|
||||
</div>
|
||||
<input data-multi="delete" class="hidden" type="checkbox" name="templates[{$IDpr}][{$template@iteration}][delete]"/>
|
||||
<span class="label noflex" data-multi="add" title="Přidat šablonu"><i class="glyphicon glyphicon-plus"></i></span>
|
||||
<span class="label noflex" data-multi="del" title="Odebrat šablonu"><i class="glyphicon glyphicon-minus"></i></span>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
{/case}
|
||||
{case "figureQuantityDiscount"}
|
||||
<div class="multi-item" data-multi-id="{$IDpr}" data-multi="item">
|
||||
{foreach $ret as $discount}
|
||||
<div class="param-row" data-multi="row" data-multi-id="{$discount@iteration}">
|
||||
<div class="fullflex">
|
||||
od <input type="text" class="input fullflex" name="quantity_discount[{$IDpr}][{$discount@iteration}][pieces]" size="15" maxlength="255" value="{$discount.pieces}"/> ks
|
||||
<input type="text" class="input fullflex" name="quantity_discount[{$IDpr}][{$discount@iteration}][discount]" size="15" maxlength="255" value="{$discount.discount}"/> %
|
||||
<input type="hidden" name="quantity_discount[{$IDpr}][{$discount@iteration}][id]" value="{$discount.id}">
|
||||
</div>
|
||||
<input data-multi="delete" class="hidden" type="checkbox" name="quantity_discount[{$IDpr}][{$discount@iteration}][delete]"/>
|
||||
<span class="label noflex" data-multi="add" title="Přidat slevu"><i class="glyphicon glyphicon-plus"></i></span>
|
||||
<span class="label noflex" data-multi="del" title="Odebrat slevu"><i class="glyphicon glyphicon-minus"></i></span>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
{/case}
|
||||
{case "figureCodeOfSuppliers"}
|
||||
<div class="multi-item" data-multi-id="{$IDpr}" data-multi="item">
|
||||
{foreach $ret as $code}
|
||||
<div class="param-row" data-multi="row" data-multi-id="{$code['id']}">
|
||||
<div style="clear: both;">
|
||||
<span style="width: 24%;display: inline-block;">
|
||||
{$param = "onchange='update(this, {$IDpr})'"}
|
||||
{print_select name="codeOfSuppliers[{$IDpr}][{$code['id']|default:0}][supplier]" var=$view->suppliers selected=$code['id_supplier'] param=$param}
|
||||
</span>
|
||||
<input type="text" name="codeOfSuppliers[{$IDpr}][{$code['id']|default:0}][code]" maxlength=50 value="{$code['code']}" style="width: 25%;" placeholder="Kód dodavatele">
|
||||
<input type="text" name="codeOfSuppliers[{$IDpr}][{$code['id']|default:0}][ean]" maxlength=50 value="{$code['ean']}" style="width: 25%;" placeholder="EAN dodavatele">
|
||||
<input type="text" name="codeOfSuppliers[{$IDpr}][{$code['id']|default:0}][in_store]" maxlength=50 value="{$code['in_store']}" style="width: 24%;" placeholder="Počet kusů dodavatele">
|
||||
</div>
|
||||
|
||||
<input data-multi="delete" class="hidden" type="checkbox" name="codeOfSuppliers[{$IDpr}][{$code['id']|default:0}][delete]"/>
|
||||
<span class="label noflex" data-multi="add" title="Přidat šablonu"><i class="glyphicon glyphicon-plus"></i></span>
|
||||
<span class="label noflex" data-multi="del" title="Odebrat šablonu"><i class="glyphicon glyphicon-minus"></i></span>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
{/case}
|
||||
{case 'figureEAN'}
|
||||
<input type="text" class="input" name="ean[{$IDpr}]" size="13" maxlength="20" value="{formatEAN($row['ean'])}" onchange="update(this,'{$IDpr}')" />
|
||||
{/case}
|
||||
|
||||
{case 'figureShowMax'}
|
||||
<input type="text" class="input" name="in_store_show_max[{$IDpr}]" size="5" maxlength="10" value="{$row['in_store_show_max']}" onchange="update(this,'{$IDpr}')" />
|
||||
{/case}
|
||||
|
||||
{case 'figureNote'}
|
||||
<input type="text" class="input" name="note[{$IDpr}]" size="10" maxlength="50" value="{$row['note']}" onchange="update(this,'{$IDpr}')" />
|
||||
{/case}
|
||||
|
||||
{case 'figureInStoreMin'}
|
||||
<input type="text" class="input" name="in_store_min[{$IDpr}]" size="10" maxlength="50" value="{$row['in_store_min']}" onchange="update(this,'{$IDpr}')" />
|
||||
{/case}
|
||||
|
||||
{case 'figureMaxCPC'}
|
||||
<input type="text" class="input" name="max_cpc[{$IDpr}]" size="10" maxlength="50" value="{$row['max_cpc']}" onchange="update(this,'{$IDpr}')" />
|
||||
{/case}
|
||||
|
||||
{case 'figurePriceFinal'}
|
||||
{if !empty($row)}
|
||||
{$price = calcPrice($row['price'], getVat($row['vat']), $row['discount'])}
|
||||
{else}
|
||||
{$price = ''}
|
||||
{/if}
|
||||
<input type="text" class="input" name="priceFinal[{$IDpr}]" size="15" value="{$price}" onkeypress="checkInputData('float')" onchange="update(this,'{$IDpr}')" />
|
||||
<input type="hidden" class="input" name="priceFinalVat[{$IDpr}]" value="{$row['vat']}" />
|
||||
<input type="hidden" class="input" name="priceFinalPrice[{$IDpr}]" value="{$row['price']}" />
|
||||
{/case}
|
||||
|
||||
{case 'figurePosition'}
|
||||
<input type="text" class="input" name="position[{$IDpr}]" size="10" maxlength="50" value="{$row['position']}" onchange="update(this,'{$IDpr}')" />
|
||||
{/case}
|
||||
|
||||
{case 'figureShowInFeed'}
|
||||
<div align="center">
|
||||
<input type="checkbox" id="show_in_feed{$IDpr}" name="show_in_feed[{$IDpr}]"
|
||||
onchange="update(this,'{$IDpr}')" value="1" {$row['show_in_feed']|checked:'Y'} />
|
||||
<label for="show_in_feed{$IDpr}"> Ano</label>
|
||||
</div>
|
||||
{/case}
|
||||
|
||||
{case 'figureSerialNumberRequire'}
|
||||
<div align="center">
|
||||
<input type="checkbox" id="serial_number_require{$IDpr}" name="serial_number_require[{$IDpr}]"
|
||||
onchange="update(this,'{$IDpr}')" value="1" {$row['serial_number_require']|checked:'Y'} />
|
||||
<label for="serial_number_require{$IDpr}"> Ano</label>
|
||||
</div>
|
||||
{/case}
|
||||
|
||||
{case 'figureShowInSearch'}
|
||||
<div align="center">
|
||||
<input type="checkbox" id="show_in_search{$IDpr}" name="show_in_search[{$IDpr}]"
|
||||
onchange="update(this,'{$IDpr}')" value="1" {$row['show_in_search']|checked:'Y'} />
|
||||
<label for="show_in_search{$IDpr}"> Ano</label>
|
||||
</div>
|
||||
{/case}
|
||||
|
||||
{case 'figureProductUnits'}
|
||||
{$units = $view->getProductUnits()}
|
||||
|
||||
{if !$row.unit}
|
||||
{$units['0'] = "Nezvoleno"}
|
||||
{$row.unit = "0"}
|
||||
{/if}
|
||||
|
||||
{print_select name="product_unit[{$IDpr}]" var=$units selected=$row.unit}
|
||||
{/case}
|
||||
{case 'figureMeasureUnit'}
|
||||
{$units = $view->getProductUnits()}
|
||||
{if !$row.measure_unit}
|
||||
{$units['0'] = "Nezvoleno"}
|
||||
{$row.unit = "0"}
|
||||
{/if}
|
||||
|
||||
{print_select name="measure_unit[{$IDpr}]" var=$units selected=$row.measure_unit}
|
||||
{/case}
|
||||
{case 'figureParamGroups'}
|
||||
<div>
|
||||
<select class="selecter ajax-selecter productsFrm_id_parameter_group" name="paramGroups[{$IDpr}]" data-type="parameter_groups" data-autocomplete="parameter_groups" data-preload="parameterGroups" onchange="update(this,'{$IDpr}')" >
|
||||
<option value="{$row['id_parameter_group']}" selected></option>
|
||||
</select>
|
||||
</div>
|
||||
{/case}
|
||||
{case 'figurePrintLabels'}
|
||||
<div>
|
||||
<input placeholder="1" class="form-control input-sm" style="width:65px;float:left;height:32px; border-bottom-right-radius: 0px; border-top-right-radius: 0px; margin-top:-1px" type="figurePrintLabels" name="printLabels[{$IDpr}]" value="" onchange="update(this,'{$IDpr}')">
|
||||
<span class="input-group-btn">
|
||||
<a href="javascript:void(0)" onclick="submitPrintCenter('{$IDpr}')" class="btn btn-primary btn-sm" title="vytisknout"><span class="glyphicon glyphicon-print"></span></a>
|
||||
</span>
|
||||
</div>
|
||||
{/case}
|
||||
{case 'figureDateAdded'}
|
||||
<input type="text" id="dateAdded{$IDpr}" class="input" name="dateAdded[{$IDpr}]" size="45" maxlength="80" {if $row['date_added']} value="{date('d.m.Y H:i:s', strtotime($row['date_added']))}" {/if} onchange="update(this,`{$IDpr}`)" autocomplete="off" />
|
||||
{insert_calendar selector="#dateAdded`$IDpr`" format='datetime'}
|
||||
{/case}
|
||||
{case 'figureStockInDate'}
|
||||
<input type="text" id="stockInDate{$IDpr}" class="input" name="stockInDate[{$IDpr}]" size="45" maxlength="80" {if $row['date_stock_in']} value="{date('d.m.Y H:i:s', strtotime($row['date_stock_in']))}" {/if} onchange="update(this,`{$IDpr}`)" autocomplete="off" />
|
||||
{insert_calendar selector="#stockInDate`$IDpr`" format='datetime'}
|
||||
{/case}
|
||||
{case "articlesProduct"}
|
||||
<div class="multi-item" data-multi-id="{$IDpr}" data-multi="item">
|
||||
{foreach $ret as $article}
|
||||
<div class="param-row" data-multi="row" data-multi-id="{$article@iteration}">
|
||||
|
||||
<div class="fullflex">
|
||||
<select class="ajax-selecter" name="articles_product[{$IDpr}][{$article@iteration}][id]" data-type="article">
|
||||
<option value="{$article.id}" selected>{$article.title}</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<input data-multi="delete" class="hidden" type="checkbox" name="articles_product[{$IDpr}][{$article@iteration}][delete]"/>
|
||||
<span class="label noflex" data-multi="add" title="Přidat článek"><i class="glyphicon glyphicon-plus"></i></span>
|
||||
<span class="label noflex" data-multi="del" title="Odebrat článek"><i class="glyphicon glyphicon-minus"></i></span>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
{/case}
|
||||
{case "productsCharges"}
|
||||
<div class="multi-item" data-multi-id="{$IDpr}" data-multi="item">
|
||||
{foreach array_merge($ret, [[]]) as $charge}
|
||||
<div class="param-row" data-multi="row" data-multi-id="{$charge@iteration}">
|
||||
|
||||
<div class="fullflex">
|
||||
<select class="ajax-selecter" name="products_charges[{$IDpr}][{$charge@iteration}][id]" data-type="product_charge">
|
||||
<option value="{$charge.id}" selected>{$charge.title}</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<input data-multi="delete" class="hidden" type="checkbox" name="products_charges[{$IDpr}][{$charge@iteration}][delete]"/>
|
||||
<span class="label noflex" data-multi="add" title="Přidat příplatek"><i class="glyphicon glyphicon-plus"></i></span>
|
||||
<span class="label noflex" data-multi="del" title="Odebrat příplatek"><i class="glyphicon glyphicon-minus"></i></span>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
{/case}
|
||||
{case "figureDimensions"}
|
||||
<div class="multi-item" data-multi-id="{$IDpr}" data-multi="item">
|
||||
<div class="param-row" data-multi="row" data-multi-id="{$IDpr}">
|
||||
<div style="clear: both;">
|
||||
{foreach $item.input as $key => $inputName}
|
||||
<input type="text" name="{$inputName}[{$IDpr}]" value="{$row[$inputName]}" onchange="update(this,'{$IDpr}')" style="{if $inputName === 'depth'}width:24%;{else}width:25%;{/if}" placeholder="{$inputName|translate} [cm]" title="{$inputName|translate} [cm]">
|
||||
{/foreach}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/case}
|
||||
{case "figureOssVats"}
|
||||
{$ossName = $view->getOssCategoryName($row.id_cn)}
|
||||
<div style="max-width: 500px !important;">
|
||||
{print_select name="id_cn[{$IDpr}]" var=[''=>'',$row.id_cn => $ossName] selected=$row.id_cn param="data-type='ossVatsCategories' data-value='{$ossName}'" class="ajax-selecter"}
|
||||
</div>
|
||||
{/case}
|
||||
{default}
|
||||
{capture name="pfExtend" assign="pfExtend"}
|
||||
{block "printField"}{/block}
|
||||
{/capture}
|
||||
|
||||
{$customField = $pfExtend|strip:""}
|
||||
|
||||
{if $customField != ""}
|
||||
{$customField nofilter}
|
||||
{elseif $item.input[0] == 'data'}
|
||||
{printCustomDataField}
|
||||
{else}
|
||||
{printDefaultField}
|
||||
{/if}
|
||||
{/switch}
|
||||
{/if}
|
||||
{/function}
|
||||
|
||||
{block "list-filter"}
|
||||
{$param2 = ['figure' => $figure, 'prepare' => 1, 'filter' => $filter]}
|
||||
{$param2 = http_build_query($param2)}
|
||||
{include file="utils/listFilter.tpl" productsMassModification=1}
|
||||
{/block}
|
||||
<form method="POST" action="launch.php?s=list.php&type=productsMassModification&page={$pager.number}&{if $smarty.get.order}&order={$smarty.get.order}{/if}{if $smarty.get.adminFilter}&adminFilter={$smarty.get.adminFilter}{/if}" class="viewParams masseditform" role="form">
|
||||
<input type="submit" name="submitSave" class="hidden" value="1" />
|
||||
<input type="submit" name="submitSaveAndNext" class="hidden" value="1" />
|
||||
|
||||
<table class="table table-striped panel panel-default {block unsortable}{/block} massEditTable unselectable" width="100%">
|
||||
|
||||
{* Header columns *}
|
||||
<thead>
|
||||
{foreach $columns.fields as $label => $column}
|
||||
{if $column@iteration > 1}
|
||||
<th style="width: 35px;"></th>
|
||||
{/if}
|
||||
|
||||
<th {if $column@iteration == 1}data-name{/if}>
|
||||
{strip}
|
||||
<div style='width:{$column['size']}px;'>
|
||||
{if $orderParam.sort == $label}
|
||||
{if $orderParam.direction == 'DESC'}
|
||||
{$order = ""}
|
||||
{else}
|
||||
{$order = "-"}
|
||||
{/if}
|
||||
{else}
|
||||
{$order = ""}
|
||||
{/if}
|
||||
{if $pager}
|
||||
<a href='{$pager->getUrl(["order" => $order|cat:$label ])}' title="Setřídit sestupně podle sloupce {$label}">
|
||||
{$label}
|
||||
{if $orderParam.sort == $label}
|
||||
<span class="glyphicon glyphicon-chevron-{if $order == ''}down{else}up{/if}"></span>
|
||||
{/if}
|
||||
{if $column.parameter}
|
||||
<a href="javascript:nw('parameter', '{$column.parameter}', 'noopener');">
|
||||
<span class="badge badge-default" style="margin-left: 10px">
|
||||
<i class="glyphicon glyphicon-cog"></i>
|
||||
</span>
|
||||
</a>
|
||||
{/if}
|
||||
</a>
|
||||
{else}
|
||||
{$label}
|
||||
{/if}
|
||||
</div>
|
||||
{/strip}
|
||||
</th>
|
||||
{/foreach}
|
||||
|
||||
<th class="spacer" width="90%">
|
||||
</th>
|
||||
|
||||
</thead>
|
||||
|
||||
{* Mass modification *}
|
||||
<tr class="massEditRow">
|
||||
<td>
|
||||
{'editAll'|translate}
|
||||
</td>
|
||||
|
||||
{foreach $editItems as $key => $item}
|
||||
{if $figure[$key]}
|
||||
{printField namefield=$key row=array() IDpr=0}
|
||||
{/if}
|
||||
{/foreach}
|
||||
<td class="spacer">
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
{* Products *}
|
||||
{$lastIDpr = -1}
|
||||
{foreach $SQL as $row}
|
||||
{$IDpr = $row.id}
|
||||
|
||||
{if !$figure.Variants || $lastIDpr != $IDpr}
|
||||
{$lastIDpr = $IDpr}
|
||||
<tr data-id="{$IDpr}">
|
||||
<td title="{$row.title}" data-name>
|
||||
<div class="list_item">
|
||||
<a href="javascript:nw('product', '{$IDpr}', 'noopener');" tabindex="-1">
|
||||
{$row.title}
|
||||
</a>
|
||||
<input type="hidden" name="ID[]" value="{$IDpr}" />
|
||||
</div>
|
||||
</td>
|
||||
|
||||
{foreach $editItems as $key => $item}
|
||||
{if $figure[$key]}
|
||||
{printField namefield=$key row=$row IDpr=$IDpr}
|
||||
{/if}
|
||||
{/foreach}
|
||||
<td class="spacer">
|
||||
</td>
|
||||
</tr>
|
||||
{/if}
|
||||
|
||||
{if $figure.Variants}
|
||||
{$variations = $object->getVariations($row.pv_id)}
|
||||
{foreach $variations as $rowv}
|
||||
{$rowv['price'] = $rowv['pv_price']}
|
||||
{$IDpr = 'v'|cat:$rowv['id']}
|
||||
<tr class="variation" data-id="{$IDpr}">
|
||||
<td title="{$rowv.title}" data-name>
|
||||
<div class="list_item">
|
||||
{$rowv.title}
|
||||
<input type="hidden" name="ID[]" value="{$IDpr}" />
|
||||
</div>
|
||||
</td>
|
||||
|
||||
{foreach $editItems as $key => $item}
|
||||
{if $figure[$key]}
|
||||
{if array_search($key, $editVariantKeys) === false}
|
||||
<td></td><td></td>
|
||||
{else}
|
||||
{printField namefield=$key row=$rowv IDpr=$IDpr}
|
||||
{/if}
|
||||
{/if}
|
||||
{/foreach}
|
||||
<td></td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
|
||||
{/if}
|
||||
|
||||
{if $row@iteration is div by 100}
|
||||
{flush nocache}
|
||||
{/if}
|
||||
|
||||
{/foreach}
|
||||
</table>
|
||||
</form>
|
||||
286
admin/templates/list/products.massModification.tpl
Normal file
286
admin/templates/list/products.massModification.tpl
Normal file
@@ -0,0 +1,286 @@
|
||||
{extends "../frame.tpl"}
|
||||
|
||||
{block "css-entry" append}
|
||||
{encore_entry_link_tags entry='list' build='admin'}
|
||||
{/block}
|
||||
|
||||
{block "js-onready" append}
|
||||
{asset_compile}
|
||||
<script src="./static/js/ProductsMassModification.js"></script>
|
||||
{/asset_compile}
|
||||
{/block}
|
||||
|
||||
{block body_class}class="list-mass-modification"{/block}
|
||||
|
||||
{block "content"}
|
||||
<div class="container-fluid">
|
||||
<form method="POST" action="launch.php?s=list.php&type=productsMassModification{if $smarty.get.order}&order={$smarty.get.order}{/if}" class="viewParams"
|
||||
role="form">
|
||||
|
||||
<div class="row">
|
||||
<input type="hidden" name="s" value="list.php">
|
||||
<input type="hidden" name="type" value="productsMassModification">
|
||||
|
||||
<div class="col-xs-12">
|
||||
<div class="panel panel-success first" id="massmodification_panel_wrapper">
|
||||
<div class="panel-heading panel-heading-flex panel-heading-massmodification">
|
||||
<p class="panel-title">{'massModification'|translate}</p>
|
||||
<a href="#" class="panel-heading-close" data-massmodification-clear>
|
||||
{'reset'|translate:'productsFilter'}
|
||||
<span class="glyphicon glyphicon-remove"></span>
|
||||
</a>
|
||||
<script type="text/javascript">
|
||||
$('#massmodification_panel_wrapper').on('click', '[data-massmodification-clear]', function(){
|
||||
$('#massmodification_panel_wrapper').find(':input[type="checkbox"]:checked').removeAttr('checked');
|
||||
$('#massmodification_panel_wrapper').find('select option:selected').removeAttr('selected');
|
||||
$('#massmodification_panel_wrapper').find('select + .chosen-container').find('.search-choice').remove();
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
|
||||
<div class="panel-body" id="search2">
|
||||
<div class="row">
|
||||
{foreach $figureItems.items as $name => $items}
|
||||
<div class="col-md-2 col-xs-12 control-label">
|
||||
<h1 class="h4 main-panel-title">{$name|translate}</h1>
|
||||
|
||||
{foreach $items as $item_figure}
|
||||
<div class="checkbox pull-left" style="width:100%;">
|
||||
<input type="checkbox" name="figure[{$item_figure.key_name}]" value="ON"
|
||||
id="x2{$item_figure.key_name}" {$figure[$item_figure.key_name]|checked}
|
||||
class="check">
|
||||
<label for="x2{$item_figure.key_name}">{$item_figure.name}</label>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
<div class="row">
|
||||
{if {find_module name='products_parameters'}}
|
||||
<br>
|
||||
<div class="col-md-6" id="figureParameters">
|
||||
<h1 class="h4 main-panel-title">Parametry</h1>
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<div class="checkbox pull-left">
|
||||
<input id="ParametersInCategory" type="checkbox"
|
||||
name="figure[ParametersInCategory]"
|
||||
value="ON" {$figure.ParametersInCategory|checked} class="check">
|
||||
<label for="ParametersInCategory">Ve vybrané kategorii</label>
|
||||
</div>
|
||||
<div class="checkbox pull-left">
|
||||
<input id="ParametersEmpty" type="checkbox" name="find[ParametersEmpty]"
|
||||
value="ON" {$find.ParametersEmpty|checked} class="check">
|
||||
<label for="ParametersEmpty">Pouze nevyplněné</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 control-label">
|
||||
<select name="figure[params][]" multiple='multiple' class="selecter small">
|
||||
{foreach $params as $param_id => $param}
|
||||
<option value="{$param_id}" {$param_id|selected:$figure.params}>{$param.name}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="col-md-6" id="figureFeed">
|
||||
<h1 class="h4 main-panel-title">Feedy</h1>
|
||||
<div class="row">
|
||||
<div class="col-md-6 control-label">
|
||||
<select name="figure[feeds][]" multiple='multiple' class="selecter small">
|
||||
{foreach $view->getFeeds() as $feed}
|
||||
<option value="{$feed.id}" {$feed.id|selected:$figure.feeds}>{$feed.name}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 control-label">
|
||||
{foreach $view->getFeedFields() as $field => $feedItem}
|
||||
<div class="checkbox pull-left">
|
||||
<input type="checkbox" name="figure[feed{$field}]" value="ON"
|
||||
id="x2feed{$field}" {$figure["feed{$field}"]|checked}
|
||||
class="check">
|
||||
<label for="x2feed{$field}">{$feedItem.title}</label>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{if {find_module name="pricelists"}}
|
||||
<div class="col-md-6" id="figurePriceLists">
|
||||
<h1 class="h4 main-panel-title">Ceníky</h1>
|
||||
<div class="row">
|
||||
<div class="col-md-6 control-label">
|
||||
<select name="figure[pricelists][]" multiple='multiple' class="selecter small">
|
||||
{foreach $view->getPriceLists() as $priceList}
|
||||
<option value="{$priceList.id}" {$priceList.id|selected:$figure.pricelists}>{$priceList.name}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 control-label">
|
||||
{foreach $view->getPriceListFields() as $field => $priceListItem}
|
||||
<div class="checkbox pull-left">
|
||||
<input type="checkbox" name="figure[priceList{$field}]" value="ON" id="priceList{$field}" {$figure['priceList'|cat:{$field}]|checked} class="check">
|
||||
<label for="priceList{$field}">{$priceListItem.title}</label>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
{if {find_module name="stores"}}
|
||||
<div class="col-md-6" id="figureStores">
|
||||
<h1 class="h4 main-panel-title">Sklady</h1>
|
||||
<div class="row">
|
||||
<div class="col-md-6 control-label">
|
||||
<select name="figure[stores][]" multiple='multiple' class="selecter small">
|
||||
{foreach $view->getStores() as $store}
|
||||
<option value="{$store.id}" {$store.id|selected:$figure.stores}>{$store.name}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-6 control-label">
|
||||
{foreach $view->getStoresFields() as $field => $storeItem}
|
||||
<div class="checkbox pull-left">
|
||||
<input type="checkbox" name="figure[store{$field}]" value="ON"
|
||||
id="x2store{$field}" {$figure["store$field"]|checked}
|
||||
class="check">
|
||||
<label for="x2store{$field}">{$storeItem.title}</label>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-12">
|
||||
{include "block.productsFilter.tpl" }
|
||||
</div>
|
||||
|
||||
<div class="col-xs-12 col-md-4">
|
||||
<div class="panel panel-info">
|
||||
<div class="panel-heading">{'view'|translate}</div>
|
||||
|
||||
<div class="panel-body">
|
||||
<div class="form-group horizontal">
|
||||
<div class="col-md-3 control-label right"><label>{'itemCount'|translate}</label></div>
|
||||
<div class="col-md-3">
|
||||
{print_select name="figure[divide]" var=$figureDivide selected=$figure.divide param='data-width="auto"'}
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="checkbox pull-left">
|
||||
<input id="showVariants" type="checkbox" name="figure[Variants]"
|
||||
value="1" {$figure.Variants|checked} class="check"/>
|
||||
<label for="showVariants">{'showVar'|translate}</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-xs-12 col-md-8">
|
||||
<div class="panel panel-info">
|
||||
<div class="panel-heading">{'search'|translate}</div>
|
||||
|
||||
<div class="panel-body">
|
||||
<div class="form-group horizontal">
|
||||
<div class="col-md-2">
|
||||
<input type="text" name="find[Title]" value="{$find.Title}"
|
||||
class="form-control input-sm" placeholder="{'name'|translate}"/>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<input type="text" name="find[Description]" value="{$find.Description}"
|
||||
class="form-control input-sm" placeholder="{'other'|translate}"/>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<div class="input-group">
|
||||
<input type="text" name="find[Code]" value="{$find.Code}" class="form-control input-sm"
|
||||
placeholder="{'code'|translate}" id="paste">
|
||||
<span class="input-group-btn">
|
||||
<button type="button" class="btn btn-sm" title="Zvětšit" data-toggle="modal" data-target="#codeModal">
|
||||
<span class="glyphicon glyphicon-resize-full"></span>
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
{include "utils/codesModal.tpl" modal_id="codeModal" title="Kódy/EANy produktů"}
|
||||
|
||||
<script>
|
||||
initCodesModal('#paste', '#paste-modal', '#codeModal')
|
||||
</script>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<div class="checkbox pull-left">
|
||||
<input type="checkbox" id="CodeEmpty" name="find[CodeEmpty]"
|
||||
value="ON" {$find.CodeEmpty|checked} class="check"/>
|
||||
<label for="CodeEmpty">{'empty'|translate}</label>
|
||||
</div>
|
||||
</div>
|
||||
{if $cfg.Modules.products.note}
|
||||
<div class="col-md-2">
|
||||
<input type="text" name="find[Note]" value="{$find.Note}"
|
||||
class="form-control input-sm" placeholder="Poznámka"/>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<div class="checkbox pull-left">
|
||||
<input type="checkbox" id="NoteEmpty" name="find[NoteEmpty]"
|
||||
value="ON" {$find.NoteEmpty|checked} class="check"/>
|
||||
<label for="NoteEmpty">prázdná</label>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="row" style="margin-bottom:20px; display: flex; align-items: center;">
|
||||
<div class="col-md-3 col-lg-2 col-xs-12">
|
||||
{* je vedle paginace ale v jinym formu *}
|
||||
<input type="hidden" name="prepare"
|
||||
value="{if !empty($smarty.get.prepare)}{$smarty.get.prepare}{elseif !empty($smarty.post.prepare)}{$smarty.post.prepare}{/if}"
|
||||
class="check"/>
|
||||
<input type="submit" name="submitSettings" class="btn btn-primary btn-block"
|
||||
value="{'changeView'|translate}">
|
||||
</div>
|
||||
<div class="col-md-3 col-lg-2 col-xs-12 text-right" style="flex-grow: 1; color: #555;">
|
||||
Počet produktů: {$pager.total}
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="container-fluid">
|
||||
{include "list/products.massModification.fields.tpl"}
|
||||
</div>
|
||||
<div class="container-fluid footer">
|
||||
<div class="row window-btns">
|
||||
<div class="slide-right">
|
||||
<div class="col-md-3 col-lg-2">
|
||||
<input type="submit" name="submitSave" class="btn btn-success btn-block" data-submit
|
||||
value="{'save'|translate}"/>
|
||||
</div>
|
||||
|
||||
<div class="col-md-3 col-lg-2">
|
||||
{if $pager.count > 1}
|
||||
<input type="submit" name="submitSaveAndNext" class="btn btn-success btn-block" data-submit
|
||||
value="{'saveNext'|translate}"
|
||||
{if $pager.number == $pager.count}disabled='disabled'{/if} />
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<div class="pull-right">
|
||||
{include file="utils/pager.tpl"}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/block}
|
||||
|
||||
12
admin/templates/list/products.prices.tpl
Normal file
12
admin/templates/list/products.prices.tpl
Normal file
@@ -0,0 +1,12 @@
|
||||
{extends "list.tpl"}
|
||||
|
||||
{block "content" prepend}
|
||||
<style>
|
||||
tr.up td {
|
||||
background-color: #FF858D;
|
||||
}
|
||||
tr.down td {
|
||||
background-color: #DADDFC;
|
||||
}
|
||||
</style>
|
||||
{/block}
|
||||
38
admin/templates/list/products.tpl
Normal file
38
admin/templates/list/products.tpl
Normal file
@@ -0,0 +1,38 @@
|
||||
{extends "../list.tpl"}
|
||||
|
||||
{block "list-filter" append}
|
||||
{* todo *}
|
||||
{if !isset($filtersStorage)}
|
||||
<div class="panel-heading">
|
||||
<div class="row">
|
||||
|
||||
{if !empty($filtersValue)}
|
||||
{foreach $filtersValue as $filter}
|
||||
<div class="col-md-2 no-margin">
|
||||
<div class="list_filter">
|
||||
<select name="IDpr" class="selecter input-sm">
|
||||
{$filter@key}
|
||||
{foreach $filter as $option}
|
||||
<option value="{$option@key}" {if $option.choiced == true}selected{/if}>{$option.name}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
{/foreach}
|
||||
<script type="text/javascript">
|
||||
$(".list_filter select").on('change',function (e) {
|
||||
$this = $(this);
|
||||
window.location.href = window.location.href + "&" + $this.serialize();
|
||||
});
|
||||
</script>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
{/block}
|
||||
|
||||
<script type="text/javascript">
|
||||
{block onready append}
|
||||
sortableList("products");
|
||||
{/block}
|
||||
</script>
|
||||
78
admin/templates/list/reviews.tpl
Normal file
78
admin/templates/list/reviews.tpl
Normal file
@@ -0,0 +1,78 @@
|
||||
{extends "../list.tpl"}
|
||||
|
||||
{block body_class}class="list-reviews"{/block}
|
||||
|
||||
{block "content"}
|
||||
<form method="post" action="launch.php?s=list.php&type=reviews&type_list={$smarty.get.type_list}">
|
||||
{$smarty.block.parent}
|
||||
</form>
|
||||
{/block}
|
||||
|
||||
{block bottomPagination}
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{paginationList pager=$pager}
|
||||
</div>
|
||||
{if $smarty.get.type_list=='ShowNotConfirmed'}
|
||||
<div class="col-md-2 col-md-offset-4">
|
||||
<input type="submit" name="Submit" class="btn btn-primary btn-block" value="Schválit vše"/>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
{/block}
|
||||
|
||||
<script>
|
||||
{block onready append}
|
||||
$('[data-form-delete]').on('click', function() {
|
||||
var row = $(this).closest('tr');
|
||||
var reviewId = row.find('[data-form-delete-input]').data('formDeleteInput');
|
||||
var data = { };
|
||||
data[reviewId] = { 'delete': 1 };
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: 'launch.php?s=list.php&type=reviews',
|
||||
data: {
|
||||
'data': {
|
||||
'reviews': data
|
||||
}
|
||||
},
|
||||
success: function(msg) {
|
||||
row.fadeOut(500);
|
||||
showInfoMessage("Smazáno", 'success');
|
||||
row.remove();
|
||||
},
|
||||
error: function() {
|
||||
showInfoMessage("Chyba při odeslání. Obnovte prosím stránku a zkuste to znovu.", 'error');
|
||||
}
|
||||
});
|
||||
});
|
||||
$('[data-form-top]').on('click', function() {
|
||||
var row = $(this).closest('tr');
|
||||
var reviewId = row.find('[data-form-top-input]').data('formTopInput');
|
||||
var data = { };
|
||||
data[reviewId] = { 'top': 1 };
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: 'launch.php?s=list.php&type=reviews',
|
||||
data: {
|
||||
'data': {
|
||||
'reviews': data
|
||||
}
|
||||
},
|
||||
success: function(msg) {
|
||||
{if $smarty.get.type_list!='ShowNotConfirmed'}
|
||||
row.find('.review-figure').html('{KupShop\CatalogBundle\Util\ReviewsUtil::$rank[5]|translate:'reviews'}');
|
||||
row.find('.review-top').addClass('disabled');
|
||||
{else}
|
||||
row.fadeOut(500);
|
||||
{/if}
|
||||
showInfoMessage("Uloženo", 'success');
|
||||
row.remove();
|
||||
},
|
||||
error: function() {
|
||||
showInfoMessage("Chyba při odeslání. Obnovte prosím stránku a zkuste to znovu.", 'error');
|
||||
}
|
||||
});
|
||||
});
|
||||
{/block}
|
||||
</script>
|
||||
40
admin/templates/list/sections.ajax.tpl
Normal file
40
admin/templates/list/sections.ajax.tpl
Normal file
@@ -0,0 +1,40 @@
|
||||
{function printTree}
|
||||
{foreach $data as $entry}
|
||||
{if !$zero && $entry.id === 0}
|
||||
{continue}
|
||||
{/if}
|
||||
{$width = 500 - ($entry.level * 26)}
|
||||
<li class="node {$view->resolveCallable($tableDef.class, $entry)}"
|
||||
data-id="{$view->getListRowValue($entry, $tableDef.id)}">
|
||||
<div class="nodeWrapper tdd-row">
|
||||
{foreach $tableDef.fields as $name => $column}
|
||||
{if ($column.wpjAdmin and !isSuperuser()) or $column.visible == 'N'}
|
||||
{continue}
|
||||
{/if}
|
||||
<div class="list_item {if $isEditing}is-editable{/if} tdd-column tdd-column-{$column@index + 1} {$view->resolveCallable($column.class, $entry) nofilter}">
|
||||
{$view->printListRowItem($column, $entry)}
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
{if !empty($entry.children) && ($openedSections == 'all' || in_array($entry.id, $openedSections))}
|
||||
<ul class="tdd-tree">
|
||||
{printTree data=$entry.children tableDef=$tableDef}
|
||||
</ul>
|
||||
{/if}
|
||||
</li>
|
||||
{/foreach}
|
||||
{/function}
|
||||
|
||||
{if $SQL[0].id === 0}
|
||||
<div class="table">
|
||||
<ul class="sections-root">
|
||||
{printTree data=[$SQL[0]] tableDef=$columns zero=true}
|
||||
</ul>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="treeDragDrop sections-sortable table" id="sectionsRoot">
|
||||
<ul class="tdd-tree nestedSortable nestedSortableRoot">
|
||||
{printTree data=$SQL tableDef=$columns}
|
||||
</ul>
|
||||
</div>
|
||||
247
admin/templates/list/sections.tpl
Normal file
247
admin/templates/list/sections.tpl
Normal file
@@ -0,0 +1,247 @@
|
||||
{extends "../list.tpl"}
|
||||
|
||||
{block css append}
|
||||
<style>
|
||||
{$sizeSum = 0}
|
||||
{foreach $columns.fields as $name => $column}
|
||||
{if ($column.wpjAdmin and !isSuperuser()) or $column.visible == 'N'}
|
||||
{continue}
|
||||
{/if}
|
||||
{$sizeSum = $sizeSum + $column.size}
|
||||
{/foreach}
|
||||
{if $sizeSum > 0}{$singlePartRelSize = 100/$sizeSum}{else}{$singlePartRelSize = 10}{/if}
|
||||
{$partCounter = 0}
|
||||
{foreach $columns.fields as $name => $column}
|
||||
{if ($column.wpjAdmin and !isSuperuser()) or $column.visible == 'N'}
|
||||
{continue}
|
||||
{/if}
|
||||
.tdd-row > .tdd-column-{$column@index + 1} {
|
||||
left: {$singlePartRelSize*$partCounter}%;
|
||||
width: {$singlePartRelSize*$column.size}%;
|
||||
}
|
||||
|
||||
{$partCounter = $partCounter + $column.size}
|
||||
{/foreach}
|
||||
</style>
|
||||
{/block}
|
||||
|
||||
{block js append}
|
||||
<script src="./static/js/jquery.mjs.nestedSortable.js"></script>
|
||||
{/block}
|
||||
|
||||
{block name="list-panel-class"}menu-list{/block}
|
||||
|
||||
{block 'list-filter'}
|
||||
<div class="wpj-panel-heading">
|
||||
<div class="list-filters-wrapper">
|
||||
<div class="list-filters-left">
|
||||
<div class="filter-item">
|
||||
{if $smarty.get.opened == 'all'}
|
||||
<a class="btn btn-xs btn-ghost" href="launch.php?s={$view->getPageHandler()}&type={$view->getListName()}">
|
||||
<i class="bi bi-dash-circle m-r-1"></i>Sbalit vše
|
||||
</a>
|
||||
{else}
|
||||
<a class="btn btn-xs btn-ghost" href="launch.php?s={$view->getPageHandler()}&type={$view->getListName()}&opened=all">
|
||||
<i class="bi bi-plus-circle m-r-1"></i>Rozbalit vše
|
||||
</a>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
<div class="list-filters-right">
|
||||
<div class="filter-item">
|
||||
<button title="Upravit zobrazení sloupců" onclick="nw('ListColumns', '', 'pg={$smarty.get.type}')"
|
||||
class="btn btn-xs btn-ghost">
|
||||
<i class="bi bi-arrows-move m-r-1"></i>{'editListColumns'|translate:'filters'}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/block}
|
||||
|
||||
{block listTable}
|
||||
{block 'sections-header'}
|
||||
<div class="tdd-row thh-row">
|
||||
{foreach $columns.fields as $label => $column}
|
||||
{if ($column.wpjAdmin and !isSuperuser()) or $column.visible == 'N'}
|
||||
{continue}
|
||||
{/if}
|
||||
<div class="tdd-column tdd-column-{$column@index + 1} {$view->resolveCallable($column.class, $entry) nofilter}">
|
||||
<small>{$object->printHeaderLabel($column.title, $column)} </small>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
{/block}
|
||||
|
||||
<div class="table">
|
||||
{include "./sections.ajax.tpl"}
|
||||
</div>
|
||||
{/block}
|
||||
|
||||
{block bottomPagination}
|
||||
<div class="pagination-sticky">
|
||||
<div class="pagination-buttons">
|
||||
{if findModule('products_sections', 'virtual_to_db')}
|
||||
<div class="filter-item">
|
||||
<a href="launch.php?s=list.php&type={$view->getListName()}&acn=generateVirtualSections"
|
||||
class="btn btn-danger"
|
||||
title="Přegeneruje virtuální sekce, které se jinak přegeneovávájí jednou za dvě hodiny.">
|
||||
Přegenerovat virtuální sekce
|
||||
</a>
|
||||
</div>
|
||||
{/if}
|
||||
{block "list-filter-mass-edit"}
|
||||
{if $showMassEdit}
|
||||
<a title="Hromadná úprava" href="launch.php?s=listEdit.php&type={$view->getListName()}"
|
||||
class="btn btn-secondary"><span class="bi bi-list-check m-r-1"></span>Hromadná úprava
|
||||
</a>
|
||||
{/if}
|
||||
{/block}
|
||||
</div>
|
||||
</div>
|
||||
{/block}
|
||||
|
||||
{block unsortable}unsortable{/block}
|
||||
|
||||
<script>
|
||||
{block onready append}
|
||||
|
||||
function setCookie(c_name, value, exdays) {
|
||||
var exdate = new Date();
|
||||
exdate.setDate(exdate.getDate() + exdays);
|
||||
var c_value = encodeURIComponent(value) + '; path=/' + (exdays == null ? '' : '; expires=' + exdate.toUTCString());
|
||||
document.cookie = c_name + '=' + c_value;
|
||||
}
|
||||
|
||||
const getOpened = () => $.map($('.treeDragDrop').find('li .opener:not(.plus)'), function(elem) {
|
||||
return $(elem).closest("li").data("id");
|
||||
});
|
||||
|
||||
function customRefresh(url) {
|
||||
const openedBranches = getOpened();
|
||||
if (openedBranches.length) {
|
||||
setCookie('products_list_opened_sections', JSON.stringify(openedBranches))
|
||||
}
|
||||
|
||||
setWindowStorage("listPosition_x", window.scrollY, window);
|
||||
|
||||
var js = $('.highRow').find("td a[href^=javascript]").attr('href');
|
||||
var ID;
|
||||
if (typeof js == 'undefined')
|
||||
ID = 0;
|
||||
else
|
||||
ID = js.replace(/javascript:nw\(\'(.+)'\, '(\d+)'\, '(.*)'\);/, '$2');
|
||||
|
||||
setWindowStorage("listHighRow", ID, window);
|
||||
}
|
||||
|
||||
|
||||
{literal}
|
||||
function initListTreeAjax(name, url, selector) {
|
||||
var $tree = $(selector ? selector : '#sectionsRoot > ul');
|
||||
|
||||
$('#sectionsRoot > ul').nestedSortable({
|
||||
handle: '.drag-drop-mover',
|
||||
items: '.node',
|
||||
listType: 'ul',
|
||||
toleranceElement: '> .nodeWrapper',
|
||||
placeholder: 'placeholder',
|
||||
isTree: true,
|
||||
connectWith: '.nestedSortableRoot',
|
||||
start: function(event, ui) {
|
||||
/* on drag start find index and parent id of moved item */
|
||||
ui.item.startPos = ui.item.index();
|
||||
var $parent = ui.item.parents('[data-id]');
|
||||
ui.item.startParent = $parent.length ? $parent.data('id') : null;
|
||||
},
|
||||
update: function(event, ui) {
|
||||
var $parent = ui.item.parents('[data-id]');
|
||||
var $prev = ui.item.prev();
|
||||
var $next = ui.item.next();
|
||||
|
||||
var data = {
|
||||
tree: {
|
||||
id: ui.item.data('id'),
|
||||
position: ui.item.index()
|
||||
}
|
||||
};
|
||||
|
||||
if ($parent.length) {
|
||||
data['tree']['target'] = $parent.data('id');
|
||||
}
|
||||
|
||||
if ($prev.length) {
|
||||
data['tree']['after'] = $prev.data('id');
|
||||
}
|
||||
|
||||
if ($next.length) {
|
||||
data['tree']['before'] = $next.data('id');
|
||||
}
|
||||
|
||||
// up or down?
|
||||
if (ui.item.startParent === data['tree']['target'] && ui.item.startPos <= data['tree']['position']) {
|
||||
data['tree']['position'] += 1;
|
||||
}
|
||||
|
||||
$.post(url, data, function(res) {
|
||||
//TODO: error handling
|
||||
return true;
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
$tree.on("click", "li .opener:not(.disabled)", function() {
|
||||
var $li = $(this).closest("li");
|
||||
var $this = $(this);
|
||||
var $ul = $li.children("ul").first();
|
||||
var id = $li.data("id");
|
||||
|
||||
const toggleOpen = () => {
|
||||
$this.removeClass("plus").addClass('minus');
|
||||
$li.removeClass('mjs-nestedSortable-collapsed').addClass('mjs-nestedSortable-expanded');
|
||||
}
|
||||
|
||||
const toggleClosed = () => {
|
||||
$this.removeClass("minus").addClass('plus');
|
||||
$li.addClass('mjs-nestedSortable-collapsed').removeClass('mjs-nestedSortable-expanded');
|
||||
}
|
||||
|
||||
if (!$this.is(".plus")) {
|
||||
toggleClosed();
|
||||
} else {
|
||||
if ($ul.length < 1) {
|
||||
$.ajax({
|
||||
url: window.location,
|
||||
type: "get",
|
||||
data: {
|
||||
root: id
|
||||
},
|
||||
success: function(response) {
|
||||
$li.append($(response).html());
|
||||
toggleOpen();
|
||||
{/literal}
|
||||
{block subsectionLoaded}
|
||||
|
||||
{/block}
|
||||
{literal}
|
||||
},
|
||||
error: function() {
|
||||
showInfoMessage('Chyba při načítání podsekcí', 'danger');
|
||||
}
|
||||
});
|
||||
} else {
|
||||
toggleOpen();
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
return this;
|
||||
}
|
||||
{/literal}
|
||||
|
||||
initListTreeAjax("sections", "{$ctrl.currUrl.Rel nofilter}&acn=drag");
|
||||
|
||||
{/block}
|
||||
</script>
|
||||
|
||||
90
admin/templates/list/stockIn.tpl
Normal file
90
admin/templates/list/stockIn.tpl
Normal file
@@ -0,0 +1,90 @@
|
||||
{extends "../list.tpl"}
|
||||
|
||||
{block buttons_dropup}
|
||||
<li>
|
||||
<a href="{$ctrl.currUrl.Rel}&acn=StockInExport" title="Export naskladnění s položkami">
|
||||
Export naskladnění s položkami
|
||||
</a>
|
||||
</li>
|
||||
{/block}
|
||||
|
||||
{block "list-content" append}
|
||||
{if isset($price)}
|
||||
<div class="col-md-12">
|
||||
<div class="well">
|
||||
Cena celkem: <b>{$price|format_price}</b>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
{if $smarty.get.index == 'future'}
|
||||
<div class="col-md-2 col-md-offset-10">
|
||||
<div class="well">
|
||||
<input type="button" class="btn btn-primary btn-block" onClick="massStockIn();" value="Hromadná kontrola"/>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
function massStockIn() {
|
||||
let checked = $('input[name="stockIns"]:checked').map(function () {
|
||||
return this.value;
|
||||
}).get().join('_');
|
||||
|
||||
nw('stockInCheck', checked);
|
||||
}
|
||||
</script>
|
||||
{/if}
|
||||
{/block}
|
||||
|
||||
{block name="list-filter" append}
|
||||
{if !empty($var.closure_now.with_vat)}
|
||||
<div class="panel-heading">
|
||||
<div class="row">
|
||||
<div class="col-md-3 control-label">
|
||||
<strong>Aktuální hodnota skladu: </strong>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<strong>{$var.closure_now.with_vat|format_price} </strong>s DPH
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<strong> {$var.closure_now.without_vat|format_price} </strong>bez DPH
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<a href="?s=list.php&type=stockIn&acn=exportCurrentStore" class="btn btn-primary">Exportovat aktuální hodnotu skladu</a>
|
||||
</div>
|
||||
</div>
|
||||
{if !empty($var.closure_last)}
|
||||
<div class="row">
|
||||
<div class="col-md-3 control-label">
|
||||
<strong>Poslední uzávěrka: </strong>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<strong>{$var.closure_last.without_vat|format_price} </strong>bez DPH
|
||||
</div>
|
||||
<div class="col-md-1 control-label">
|
||||
<strong>Rozdíl: </strong>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<strong> {{$var.closure_now.without_vat-$var.closure_last.without_vat}|format_price} </strong>bez DPH
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
{/if}
|
||||
{/block}
|
||||
|
||||
<script>
|
||||
{block onready append}
|
||||
var reload_timer;
|
||||
timeout_reload();
|
||||
|
||||
$(document).on('click', 'input', function () {
|
||||
clearTimeout(reload_timer);
|
||||
timeout_reload();
|
||||
});
|
||||
|
||||
function timeout_reload() {
|
||||
reload_timer = setTimeout(function () {
|
||||
window.location.reload(1);
|
||||
}, 60 * 1000);
|
||||
}
|
||||
{/block}
|
||||
</script>
|
||||
62
admin/templates/list/stockInMissing.tpl
Normal file
62
admin/templates/list/stockInMissing.tpl
Normal file
@@ -0,0 +1,62 @@
|
||||
{extends "../list.tpl"}
|
||||
|
||||
{block 'table-class' append} stockInMissingTable {/block}
|
||||
|
||||
<script type="text/javascript">
|
||||
{block onready append}
|
||||
let constData = {
|
||||
{if $smarty.get.sellInterval}sellInterval: {$smarty.get.sellInterval},{/if}
|
||||
{if $smarty.get.interval}interval: {$smarty.get.interval},{/if}
|
||||
};
|
||||
function initStockInMissingTableAjax(name, url, selector) {
|
||||
var $table = $(selector ? selector : '.stockInMissingTable');
|
||||
$table.on("click", '[data-acn="OrdersOfSupplierAdd"]', function (e) {
|
||||
e.preventDefault();
|
||||
var $this = $(this);
|
||||
var addData = $this.data('adddata');
|
||||
$pieces = $this.parent().prev().find('[name="pieces"]');
|
||||
addData.pieces = $pieces.val() || $pieces.attr('placeholder');
|
||||
addData.pieces = /^\d+$/.test(addData.pieces) ? parseInt(addData.pieces) : 0;
|
||||
|
||||
if(addData.pieces <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
var $tr = $this.closest('tr').parent().closest('tr');
|
||||
$.ajax({
|
||||
url: 'launch.php?s=list.php&type=stockInMissing',
|
||||
type: "post",
|
||||
data: {
|
||||
...constData,
|
||||
data: addData
|
||||
},
|
||||
success: function (response) {
|
||||
$tr.replaceWith($(response).find('.stockInMissingTable > tbody > tr').first());
|
||||
},
|
||||
error: function (xhr) {
|
||||
showInfoMessage('Chyba při objednání produktů', 'danger');
|
||||
}
|
||||
});
|
||||
});
|
||||
return this;
|
||||
}
|
||||
initStockInMissingTableAjax("stockInMissing", "{$ctrl.currUrl.Rel nofilter}");
|
||||
|
||||
$('.stockInMissingTable').on("click", '[data-acn="OrdersAdd"]', function (e) {
|
||||
e.preventDefault();
|
||||
const $this = $(this);
|
||||
|
||||
$this.parents('tr.no-row-click').siblings().removeClass('highRow');
|
||||
$this.parents('tr.no-row-click').addClass('highRow');
|
||||
|
||||
const addData = $this.data('adddata');
|
||||
|
||||
let order_url = addData.order_url.replaceAll('{ldelim}CODE{rdelim}', addData.code);
|
||||
const target = 'supplier' + addData.id_supplier.toString();
|
||||
|
||||
const win = window.top.open(order_url, target, '');
|
||||
win.focus();
|
||||
});
|
||||
|
||||
{/block}
|
||||
</script>
|
||||
Reference in New Issue
Block a user