{% extends 'base.html.twig' %}
{% set currentPath = path(app.request.attributes.get('_route')) %}
{% block body %}
<div class="container">
<div class="row">
<div id="loader" class="col s12 progress" style="display:none"><div class="indeterminate"></div></div>
<div class="col s12">
<div class="card">
<div class="card-content">
<!-- <span class="card-title">Filters</span> -->
<div class="row">
<h5>Gestione Ordini</h5>
<hr/>
<div class="row">
<!-- ><div class="col s2">
<select id="filter-year" name="filter-year">
<option value="">-- Anno --</option>
<option value="2020" selected>Anno 2020</option>
<option value="2021">Anno 2021</option>
<option value="2022">Anno 2022</option>
</select>
</div> -->
<div class="col s3">
<select id="filter-type" name="filter-type">
<option value="">-- Filtra per --</option>
<option value="invoices">Fatture</option>
<option value="corrispettivi">Corrispettivi</option>
<option value="not managed">Non gestiti</option>
</select>
</div>
<div class="col s3">
<label></label>
<div id="filter-orders-ids" class="chips chips-placeholder">
<input name="filter-orders-ids" placeholder="Filtro ID Ordini">
</div>
</div>
<div class="col s3">
<label></label>
<div id="filter-fatture-ids" class="chips chips-placeholder">
<input name="filter-fatture-ids" placeholder="Filtro ID Fatture">
</div>
</div>
</div>
<div class="row">
<div class="col s2">
<label>Da:</label>
<input type="text" name="filter-date-from" class="datepicker">
</div>
<div class="col s2">
<label>A:</label>
<input type="text" name="filter-date-to" class="datepicker">
</div>
<div class="col s2">
<button type="button" onclick="Manebi.getInvoices()" name="submit-filter" class="btn waves-effect waves-light">RECUPERA</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col s12">
<div class="card">
<div class="card-content">
<div id="invoices-table-results">
<div class="row">
<div class="col s4">Risultati: <span id="invoices-table-results-total"></span></div>
<div id="invoices-table-results-actions" class="col s8"></div>
</div>
</div>
<div class="row">
<div class="col s10"><div class="invoices-table-pagination"></div></div>
</div>
<table id="invoices-table" class="striped fixed_header">
<thead></thead>
<tbody></tbody>
</table>
<div class="row">
<div class="col s10"><div class="invoices-table-pagination"></div></div>
<div class="col s2"><label for="invoices-table-page-size-list">Per pagina: <select class="invoices-table-page-size-list" name="invoices-table-page-size-list" after-render="initMaterializeSelect"></select></label></div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col s12">
<div class="card">
<div class="card-content">
{% if ordiniSenzaIncassiERimborsi %}
<ul class="collapsible">
<li>
<div class="collapsible-header"><b>ATTENZIONE: ci sono {{ ordiniSenzaIncassiERimborsi|length }} Ordini che non possiedono alcun tipo di transazione (Incassi / Rimborsi)</b></div>
<div class="collapsible-body">
<table class="table">
<thead><tr><th>Ordine</th><th>Tipo</th><th>Numero</th><th>Payment Reference</th><th>Payment Method</th><th>Total</th><th>Data creazione</th></tr></thead>
<tbody>
{% for o in ordiniSenzaIncassiERimborsi %}
<tr>
<td>{{ o.Order }}</td>
<td>{{ o['Tipo'] }}</td>
<td>{{ o['Numero'] }}</td>
<td>{{ o['Payment Reference'] }}</td>
<td>{{ o['Payment Method'] }}</td>
<td>{{ o['Total'] }}</td>
<td>{{ o['Created at'] }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</li>
</ul>
{% endif %}
</div>
</div>
</div>
</div>
<!-- Modal Structure -->
<div id="viewInvoiceModal" class="modal modal-fixed-footer modal-fixed-header" style="width:100%">
<div class="modal-header"></div>
<div class="modal-content"></div>
<div class="modal-footer">
<a href="#!" class="modal-close waves-effect waves-green btn btn-small">OK</a>
</div>
</div>
<div id="genericPopup" class="modal modal-fixed-footer modal-fixed-header">
<div class="modal-header"></div>
<div class="modal-content">
<p class="alert alert-warning">Queste sono le righe associate a questa integrazione. Verificare dati che saranno rimossi prima di procedere alla rimozione.</p>
<hr/>
<div id="invoices-table-results">
<div class="row">
<div class="col s4">Risultati: <span id="invoices-table-results-total"></span></div>
<div id="invoices-table-results-actions" class="col s8"></div>
</div>
</div>
<table id="invoices-table" class="striped fixed_header">
<thead></thead>
<tbody></tbody>
</table>
</div>
<div class="modal-footer">
<a id="button-delete-log-imports" href="#!" class="waves-effect waves-red btn btn-small" style="background-color: #F00" onclick="deleteLogImports(this)" data-id-log-imports="">CONFERMA ELIMINAZIONE DEI DATI DI QUESTA INTEGRAZIONE</a>
<a href="#!" class="modal-close waves-effect waves-green btn btn-small">CHIUDI</a>
</div>
{% block javascripts %}
<script src="{{ asset('tmb-data-table.v1_0.min.js') }}"></script>
<script>
var Manebi = {};
var urlAjax = "{{ currentPath }}";
var filterInstances = {'collapsible': {}, 'dates': {}, 'chips': {}, 'modals': {}, 'selects': {}};
var tableInvoices = null;
var tableColumns = {
'Ordine': {'headerName': 'Order', 'value': function(data){ return '<b>' + data['Order'] + '</b>'}, 'sortable': true, 'sort-by-value': 'Order'},
'Numero Fattura': {'headerName': 'Fattura', 'value': function(data){ return '<b>' + data['Numero Fattura'] + '</b>'}, 'sortable': true},
'Corrispettivo': {'headerName': 'Corrispettivo', 'value': function(data){ return '<b>' + (data['Corrispettivo'] == null ? '-' : data['Corrispettivo']) + '</b>'}, 'sortable': true},
'Incassi':{'headerName': 'Incassi', 'value': 'Incassi'},
'Rimborsi':{'headerName': 'Rimborsi', 'value': 'Rimborsi'},
'Shipping Country': {'headerName': 'Paese Sped.', 'value': 'Shipping Country', 'sortable': true},
'Created at': {'headerName': 'Creato il', 'value': 'Created at', 'sortable': true},
'Total Amount': {'headerName': 'Totale', 'value': function(data){ return getPrice(data.Total,2) + ' '+ getCurrencySymbol(data.Currency)}, 'type': 'float', 'sortable': true, 'sort-by-value': 'Total'},
'Payment': {'headerName': 'Payment', 'value': 'Payment Method', 'sortable': true},
'Shipping Name': {'headerName': 'Cliente', 'value': 'Shipping Name', 'sortable': true},
'Export': {'headerName': 'Export', 'value': function(data){
var o = '';
if(data['ftp_export_status'] == 0)
{
o += '<b style="color:#00F">IN ATTESA</b>';
}
if(data['ftp_export_status'] == 100)
{
o += '<b style="color:#0F0">OK</b>';
}
if(data['ftp_export_status'] == 200)
{
o += '<b style="color:#F00">ERROR - '+data['ftp_export_message']+'</b>';
}
return o;
}, 'sortable': true, 'sort-by-value': 'ftp_export_status'},
'Actions': {'headerName': 'Actions',
'value': function(data){
var o = '<div style="width: 100px;">\
<button type="button" class="btn-floating btn-small waves-effect waves-light" onclick="Manebi.getInvoice(\''+ data.Order +'\')"><i class="material-icons">search</i></button> ';
o += '<button type="button" class="btn-floating btn-small waves-effect waves-light red" style="width: 25px;height: 25px;padding: 0px;line-height: normal;" onclick="Manebi.deleteOrder(\''+ data.Order.replace('#','') +'\')" data-id-order="'+data.Order.replace('#','')+'" >X</button> ';
o += (data['Numero Fattura'] != '' ? ('<a href="/admin/pdf/invoices/'+ data.Order.replace('#','') +'" target="blank" class="btn-floating btn-small waves-effect waves-light red"><i class="material-icons">picture_as_pdf</i></a>') : '');
o += (data['Numero Fattura'] != '' ? ('<a href="/admin/pdf/invoices/'+ data.Order.replace('#','') +'?proforma_return=1" target="blank" class="btn-floating btn-small waves-effect waves-light blue"><i class="material-icons">picture_as_pdf</i></a>') : '');
o += '</div>';
return o;
}
}
};
function getPrice(price, decimal)
{
var price = parseFloat(price);
return price.toFixed(decimal);
}
function getCurrencySymbol(cur)
{
switch(cur){
case 'EUR': return '€';
case 'USD': return '$';
default: return '';
}
}
function toggleElement(elId){
var x = document.getElementById(elId);
if (x.style.display === "none") {
x.style.display = "block";
} else {
x.style.display = "none";
}
}
function initMaterializeSelect(el) {
M.FormSelect.init(el, {});
}
document.addEventListener('DOMContentLoaded', function() {
//Initialize Collapsible
var elems = document.querySelectorAll('.collapsible');
for(var i = 0; i < elems.length; i++)
{
key = typeof(elems[i].getAttribute('id')) !== "undefined" ? elems[i].getAttribute('id') : i;
filterInstances.collapsible[key] = M.Collapsible.init(elems[i]);
}
// Initialize DatePicker
var elems = document.querySelectorAll('.datepicker');
for(var i = 0; i < elems.length; i++)
{
key = elems[i].getAttribute('name');
filterInstances.dates[key] = M.Datepicker.init(elems[i], {autoClose: true, format: "yyyy-mm-dd", showClearBtn: true});
}
// Initialize Chips
var elems = document.querySelectorAll('.chips');
for(var i = 0; i < elems.length; i++)
{
key = elems[i].getAttribute('id');
filterInstances.chips[key] = M.Chips.init(elems[i]);
}
// Initialize Modals
var elems = document.querySelectorAll('.modal');
for(var i = 0; i < elems.length; i++)
{
key = elems[i].getAttribute('id');
filterInstances.modals[key] = M.Modal.init(elems[i], {'startingTop': '0%', 'endingTop': '0%', 'endingBottom': '10%'});
}
var elems = document.querySelectorAll('select');
for(var i = 0; i < elems.length; i++)
{
key = elems[i].getAttribute('name');
filterInstances.selects[key] = M.FormSelect.init(elems[i]);
}
//Get Invoices
Manebi.getInvoices = function(){
window.toggleElement('loader');
filter_type = filterInstances.selects['filter-type'].el.value;
$.ajax({
url: urlAjax,
dataType: "json",
data: {
'filter': 1,
'filter-date-from': filterInstances.dates['filter-date-from'].toString(),
'filter-date-to': filterInstances.dates['filter-date-to'].toString(),
'filter-type': filter_type,
'filter-fatture-ids': filterInstances.chips['filter-fatture-ids'].chipsData,
'filter-orders-ids': filterInstances.chips['filter-orders-ids'].chipsData
}
}).then(function(data){
tableInvoices = new TmbDataTable('invoices-table', tableColumns, {'pageSize': 50, 'selectable': true});
tableInvoices.setData(data.data).generateTable();
actions = '';
actions += '<button type="button" class="btn btn-small waves-effect waves-light" style="float:right;background-color:#36a700" onclick=\'Manebi.exportFile(\"' + filter_type + '\", \"exportCSVDetails\")\'><i class="material-icons">file_download</i> <span>CSV - Dettagli</span></button> ';
actions += '<button type="button" class="btn btn-small waves-effect waves-light" style="float:right;background-color:#36a700" onclick=\'Manebi.exportFile(\"' + filter_type + '\", \"exportCSV\")\'><i class="material-icons">file_download</i> <span>CSV</span></button> ';
if(filter_type != "")
actions += '<button type="button" class="btn btn-small waves-effect waves-light" style="float:right;background-color:#36a700" onclick=\'Manebi.exportFile(\"' + filter_type + '\", \"exportProfis\")\' ><i class="material-icons">import_export</i>XML PROFIS</button> ';
actions += '<button type="button" class="btn btn-small waves-effect waves-light" style="float:right;background-color:#36a700;" onclick=\'Manebi.exportFile(\"' + filter_type + '\", \"exportFatturaElettronica\")\' ><i class="material-icons">import_export</i>Fattura Elettronica</button>';
tableInvoices.setAction(actions);
window.toggleElement('loader');
});
}
// Get Invoice
Manebi.getInvoice = function(id) {
window.toggleElement('loader');
$.ajax({
url: urlAjax + '/' + id.replace('#',''),
dataType: "json"
}).then(function(data){
if(data.status == 'OK' && (data.data.length > 0)){
var invoice = data.data[0];
Manebi.viewInvoice(invoice);
}
window.toggleElement('loader');
});
}
Manebi.viewInvoice = function(data){
var o = '<table class="table"><tbody>';
for(var i in data)
{
if(typeof(data[i]) !== 'object')
{
o += '<tr><td><b>'+i+'</b></td><td>'+data[i]+'</td></tr>';
}
}
o += '</tbody></table>';
if(typeof(data.products) !== "undefined")
{
o += '<div><h5>Ordered products</h5>'+'<table class="table"><tbody>';
for(var i in data.products)
{
o += '<tr><td><b>'+i+'</b></td></tr>';
}
o += '</tbody></table></div>';
}
filterInstances.modals['viewInvoiceModal'].el.querySelector('.modal-header').innerHTML = '<h4>Dettagli ordine ('+data.Order+')</h4>';
filterInstances.modals['viewInvoiceModal'].el.querySelector('.modal-content').innerHTML = o;
filterInstances.modals['viewInvoiceModal'].open();
}
Manebi.deleteOrder = function(id_order) {
var choice;
choice = confirm("Sei sicuro di voler rimuovere l'Ordine " + id_order + " e i suoi relativi prodotti?");
if(choice) {
$.ajax({
url: urlAjax + "/" + id_order + "/delete",
type: "POST",
dataType: "json",
}).then(function(data) {
if(data.status == "OK") {
alert('Ordine eliminato!');
}else{
alert(data.message);
}
Manebi.getInvoices();
});
}
}
// Export Invoices in Profis XML
Manebi.exportFile = function(filter_type, export_type) {
var form = document.createElement("form");
form.setAttribute("id", "export-profis");
form.method = "POST";
form.action = urlAjax;
form.target = '_blank';
document.body.appendChild(form);
f = document.createElement("input");f.type='hidden';
f.setAttribute('name', export_type);f.setAttribute('value', 1);
form.appendChild(f);
f = document.createElement("input");f.type='hidden';
f.setAttribute('name', 'filter');f.setAttribute('value', 1);
form.appendChild(f);
f = document.createElement("input");f.type='hidden';
f.setAttribute('name', 'filter-date-from');f.setAttribute('value', filterInstances.dates['filter-date-from'].toString());
form.appendChild(f);
f = document.createElement("input");f.type='hidden';
f.setAttribute('name', 'filter-date-to');f.setAttribute('value', filterInstances.dates['filter-date-to'].toString());
form.appendChild(f);
filter_type = filterInstances.selects['filter-type'].el.value;
f = document.createElement("input");f.type='hidden';
f.setAttribute('name', 'filter-type');f.setAttribute('value', filter_type);
form.appendChild(f);
chips = filterInstances.chips['filter-orders-ids'].chipsData;
for(var i=0; i < chips.length; i++){
f = document.createElement("input");f.type='hidden';
f.setAttribute('name', 'filter-orders-ids['+i+'][tag]');f.setAttribute('value', chips[i].tag);
form.appendChild(f);
}
chips = filterInstances.chips['filter-fatture-ids'].chipsData;
for(var i=0; i < chips.length; i++){
f = document.createElement("input");f.type='hidden';
f.setAttribute('name', 'filter-fatture-ids['+i+'][tag]');f.setAttribute('value', chips[i].tag);
form.appendChild(f);
}
form.appendChild(f);
form.submit();
}
});
</script>
{% endblock %}
<style>
td, th {
padding: 2px 5px;
font-size: 0.9rem;
}
th.sortable {
text-decoration: underline;
}
th.sortable.asc::after {
content: '\2b61';
}
th.sortable.desc::after {
content: '\2b63';
}
table.striped > thead > tr{
background-color: #e4e4e4;
border-bottom: 1px solid #CCC !important;
}
tbody > tr > td:first-child{
background-color: #e4e4e4;
}
tr.selectable:hover > td{
cursor: pointer;
background-color: #BBB;
}
.modal {
max-height: 100%;
width:95%;
}
.moda.modal-header {
box-shadow: 1px 1px 5px #DDD;
padding: 3px;
}
.modal.modal-fixed-footer {
height: 90%;
}
.invoices-table-pagination {
text-align: center;
}
.invoices-table-pagination .page {
display: inline;
padding: 8px;
}
.invoices-table-pagination .page a {
color: #000;
}
.invoices-table-pagination .page.active a {
font-weight: bold;
padding: 5px;
text-decoration: underline;
}
div.select-wrapper{
display:inline-block;
}
</style>
{% endblock %}