templates/reservation_listing/index.html.twig line 1
{% extends 'base.html.twig' %}{% block title %} Reservations {% endblock %}{% block body %}<!-- Content Header (Page header) --><div class="content-header"><div class="container-fluid"><div class="row mb-2"><div class="col-sm-6"><h1 class="m-0" style="text-transform: capitalize;">{{ type }} Reservations</h1></div><!-- /.col --><div class="col-sm-6"><ol class="breadcrumb float-sm-right"><li class="breadcrumb-item"><a href="#">Home</a></li><li class="breadcrumb-item active">Reservations</li></ol></div><!-- /.col --></div><!-- /.row --></div><!-- /.container-fluid --></div><!-- /.content-header --><!-- Main content --><div class="content"><div class="container-fluid"><div class="row"><div class="col-md-6"><div class="card"><div class="card-header"><h3 class="card-title">Filtreaza rezultate </h3></div><!-- /.card-header --><div class="card-body"><!-- we are adding the accordion ID so Bootstrap's collapse plugin detects it --><div id="accordion"><div class="card-primary"><div class="card-header"><h4 class="card-title w-100"><a class="d-block w-100" data-toggle="collapse" href="#collapseOne">Checkout date</a></h4></div><div id="collapseOne" class="collapse" data-parent="#accordion"><div class="card card-primary"><div class="card-body"><!-- Date --><form action="/reservation/listing"><input type="hidden" name="type" value="filter"><div class="form-group"><label>Checkout from:</label><div class="input-group date date-filter" id="checkoutfrom"data-target-input="nearest"><input type="text" name="checkoutfrom"class="form-control datetimepicker-input"data-target="#checkoutfrom"value="{{ app.request.get('checkoutfrom')}}"/><div class="input-group-append" data-target="#checkoutfrom"data-toggle="datetimepicker"><div class="input-group-text"><iclass="fa fa-calendar"></i></div></div></div></div><div class="form-group"><label>Checkout until:</label><div class="input-group date date-filter" id="checkoutuntil"data-target-input="nearest"><input type="text" name="checkoutuntil"class="form-control datetimepicker-input"data-target="#checkoutuntil"value="{{ app.request.get('checkoutuntil')}}"/><div class="input-group-append" data-target="#checkoutuntil"data-toggle="datetimepicker"><div class="input-group-text"><iclass="fa fa-calendar"></i></div></div></div></div><div class="form-group"><div class="custom-control custom-switch"><input class="custom-control-input" type="checkbox"id="invoiceableonly" name="invoiceableonly"checked="checked" value="1"><label for="invoiceableonly" class="custom-control-label">Exclude Allow Invoice False</label></div></div><div class="form-group"><div class="custom-control custom-switch"><input class="custom-control-input" type="checkbox"id="notinvoicedonly" name="notinvoicedonly"checked="checked" value="1"><label for="notinvoicedonly" class="custom-control-label">Exclude facturate</label></div></div><button type="submit" class="btn btn-primary">Filtreaza</button></form></div><!-- /.card-body --></div></div></div></div></div><!-- /.card-body --></div><div class="callout callout-warning"><h5><i class="icon fas fa-exclamation-triangle"></i> Important!</h5><p> Se afiseaza maxim 250 de inregistrari. Pentru mai multe inregisrari restrange intervalul pe baza filtrelor</p></div></div><div class="col-md-6"><div class="card"><div class="card-header"><h3 class="card-title">Factureaza toata lista</h3></div><!-- /.card-header --><div class="card-body"><div class="callout callout-warning"><h5><i class="icon fas fa-exclamation-triangle"></i> Atentie!</h5><p> E nevoie de refresh pentru actualizare in cazul in care s-au facut schimbari in pagina</p></div><button type="button" id="invoiceAll" class="btn btn-block bg-gradient-danger btn-lg">Factureaza toate {{ data|length }}</button></div></div></div></div><div class="row"><div class="col-md-12"><div class="card"><div class="card-header"><h3 class="card-title">Reservations</h3></div><!-- /.card-header --><div class="card-body p-0"><table id="reservations" class="table table-bordered table-hover"><thead><tr><th style="width: 10px">ID unic</th><th>Listing</th><th>platform</th><th>guest</th><th>checkin</th><th>checkout</th><th>amount</th><th>guest address</th><th>smartbill invoice</th></tr></thead><tbody>{% for reservation in data %}{% set style='' %}{% set style2='' %}{% set age=0 %}{% if reservation.allowInvoice %}{% set difference = date(reservation.checkout).diff(date('now')) %}{% if reservation.checkout < date('now') %}{% set age = difference|date("%d") %}{% endif %}{% endif %}{% if age > 3 %}{% set style="background: lightpink;" %}{% endif %}{% if (reservation.guestCity is null) or (reservation.guestCity is empty) or (reservation.guestContry is empty) or (reservation.guestContry is empty)%}{% set style2="background: lightpink;" %}{% endif %}<tr ><td>{{ reservation.getId|e }}</td><td><a target="_blank"href="https://app.guesty.com/reservations/{{ reservation.guestyId }}/summary">{{ reservation.listing|e }} ({{ reservation.listingNick|e }})</a><br> <b>{{ reservation.confirmationCode|e }}</b>{% if reservation.getStatus %}<br/>({{ reservation.getStatus|e }}){% endif %}<br>({{ reservation.guestyId|e }})</td><td>{{ reservation.platform|e }}</td><td><a target="_blank"href="https://app.guesty.com/people/contact/{{ reservation.guestId }}">{{ reservation.guest|e }}</a></td><td >{{ reservation.checkin|date("d/m/Y") }}</td><td style="{{ style }}" >{{ reservation.checkout|date("d/m/Y") }}</td><td>{% if reservation.isPaid %}{{ reservation.paidAmount|e }} {{ reservation.currency|e }}{% endif %}</td><td style="{{ style2 }}" ><form id="form_{{ reservation.guestyId }}" class="addressform"data-guestyId={{ reservation.guestyId }}><input type="submit" hidden/><input name="updateaddress" type="hidden" value="1"/><input name="guestyId" type="hidden"value="{{ reservation.guestyId }}"/><h5 class="mt-4 mb-2">Name</h5><div class="input-group input-group-sm"><input type="text" name="name" class="form-control"id="name_{{ reservation.guestyId }}"placeholder="Set name" value="{{ reservation.guest|e }}"><span class="input-group-append"><buttontype="button"class="btn btn-info btn-flat saveAddress"data-guestyId={{ reservation.guestyId }}><i class="fas fa-check"></i></button></span></div><h5 class="mt-4 mb-2 pf_field">Guest Address</h5><div class="input-group input-group-sm"><input type="text" name="guestAddress[address]" class="form-control"id="address_{{ reservation.guestyId }}"placeholder="Set address"value="{{ reservation.guestAddress.address|default('') }}"><span class="input-group-append"><buttontype="button"class="btn btn-info btn-flat saveAddress"data-guestyId={{ reservation.guestyId }}><i class="fas fa-check"></i></button></span></div><div class="input-group input-group-sm"><input type="text" name="guestAddress[city]" class="form-control"id="address_{{ reservation.guestyId }}"placeholder="Set City" value="{{ reservation.guestAddress.city|default('') }}"><span class="input-group-append"><buttontype="button"class="btn btn-info btn-flat saveAddress"data-guestyId={{ reservation.guestyId }}><i class="fas fa-check"></i></button></span></div><div class="input-group input-group-sm">{# <label for="address_{{reservation.guestyId }}">Email address</label> #}<input type="text" name="guestAddress[country]" class="form-control"id="contry_{{ reservation.guestyId }}"placeholder="Set country"value="{{ reservation.guestAddress.country|default('') }}"><span class="input-group-append"><buttontype="button"class="btn btn-info btn-flat saveAddress"data-guestyId={{ reservation.guestyId }}><i class="fas fa-check"></i></button></span></div>{% set hidePF = (reservation.invoiceData.type|default('PF')=="PF" ) ? "": "d-none" %}{% set hidePJ = (reservation.invoiceData.type|default('PF')=="PJ" ) ? "": "d-none" %}{% if reservation.guestAddress.country|default('')=="RO" %}<div class="input-group input-group-sm"><select name="guestAddress[county]" class="form-control"id="county_{{ reservation.guestyId }}">{% for cod, judet in judete%}<option value="{{ cod }}" {% if cod == reservation.guestAddress.county|default('')|e %} selected="selected" {% endif %}>{{ judet }}</option>{% endfor %}</select><span class="input-group-append"><buttontype="button"class="btn btn-info btn-flat saveAddress"data-guestyId={{ reservation.guestyId }}><i class="fas fa-check"></i></button></span></div><h5 class="mt-4 mb-2 {{ hidePF }} ">Invoice info</h5>{% endif %}<div class="input-group input-group-sm {{ hidePF }} pf_field"><input type="text" name="invoiceData[cnp]" class="form-control"id="cnp_{{ reservation.guestyId }}"placeholder="Set CNP ( Or passport Number)" value="{{ reservation.invoiceData.cnp|default('') }}"><span class="input-group-append"><buttontype="button"class="btn btn-info btn-flat saveAddress"data-guestyId={{ reservation.guestyId }}><i class="fas fa-check"></i></button></span></div>{# Nume firma, CUI / VAT, Reg. com, adresa, oras, tara, adresa de mail, delegat si contact *#}<h5 class="mt-4 mb-2 {{ hidePJ }} pj_field">Company Invoice data</h5><div class="input-group input-group-sm {{ hidePJ }} pj_field"><input type="text" name="invoiceData[company]" class="form-control"id="company_{{ reservation.guestyId }}"placeholder="Company name" value="{{ reservation.invoiceData.company|default('')|e }}"><span class="input-group-append"><buttontype="button"class="btn btn-info btn-flat saveAddress"data-guestyId={{ reservation.guestyId }}><i class="fas fa-check"></i></button></span></div><div class="input-group input-group-sm {{ hidePJ }} pj_field"><input type="text" name="invoiceData[vat]" class="form-control"id="vat_{{ reservation.guestyId }}"placeholder="VAT / CUI" value="{{ reservation.invoiceData.vat|default('')|e }}"><span class="input-group-append"><buttontype="button"class="btn btn-info btn-flat saveAddress"data-guestyId={{ reservation.guestyId }}><i class="fas fa-check"></i></button></span></div><div class="input-group input-group-sm {{ hidePJ }} pj_field"><input type="text" name="invoiceData[regcom]" class="form-control"id="regcom_{{ reservation.guestyId }}"placeholder="RegCom (for RO)" value="{{ reservation.invoiceData.regcom|default('')|e }}"><span class="input-group-append"><buttontype="button"class="btn btn-info btn-flat saveAddress"data-guestyId={{ reservation.guestyId }}><i class="fas fa-check"></i></button></span></div><div class="input-group input-group-sm {{ hidePJ }} pj_field"><input type="text" name="invoiceData[address]" class="form-control"id="compaddress_{{ reservation.guestyId }}"placeholder="Address" value="{{ reservation.invoiceData.address|default('')|e }}"><span class="input-group-append"><buttontype="button"class="btn btn-info btn-flat saveAddress"data-guestyId={{ reservation.guestyId }}><i class="fas fa-check"></i></button></span></div><div class="input-group input-group-sm {{ hidePJ }} pj_field"><input type="text" name="invoiceData[city]" class="form-control"id="city_{{ reservation.guestyId }}"placeholder="City" value="{{ reservation.invoiceData.city|default('')|e }}"><span class="input-group-append"><buttontype="button"class="btn btn-info btn-flat saveAddress"data-guestyId={{ reservation.guestyId }}><i class="fas fa-check"></i></button></span></div>{% if reservation.invoiceData.country|default('')=="RO" %}<div class="input-group input-group-sm"><select name="invoiceData[judet]" class="form-control"id="judet_{{ reservation.guestyId }}">{% for cod, judet in judete%}<option value="{{ cod }}" {% if cod == reservation.invoiceData.county|default('')|e %} selected="selected" {% endif %}>{{ judet }}</option>{% endfor %}</select><span class="input-group-append"><buttontype="button"class="btn btn-info btn-flat saveAddress"data-guestyId={{ reservation.guestyId }}><i class="fas fa-check"></i></button></span></div>{% endif %}<div class="input-group input-group-sm {{ hidePJ }} pj_field"><select name="invoiceData[country]" class="form-control"id="country_{{ reservation.guestyId }}">{% for code, countryname in country_names()%}<option value="{{ code }}" {% if code == reservation.invoiceData.country|default('') %} selected="selected" {% endif %}>{{ countryname }}</option>{% endfor %}</select>{# <input type="text" name="invoiceData[country]" class="form-control"id="country_{{ reservation.guestyId }}"placeholder="Country" value="{{ reservation.invoiceData.country|default('')|country_name }}">#}<span class="input-group-append"><buttontype="button"class="btn btn-info btn-flat saveAddress"data-guestyId={{ reservation.guestyId }}><i class="fas fa-check"></i></button></span></div><div class="input-group input-group-sm {{ hidePJ }} pj_field"><input type="text" name="invoiceData[representative]" class="form-control"id="representative_{{ reservation.guestyId }}"placeholder="Representative" value="{{ reservation.invoiceData.representative|default('')|e }}"><span class="input-group-append"><buttontype="button"class="btn btn-info btn-flat saveAddress"data-guestyId={{ reservation.guestyId }}><i class="fas fa-check"></i></button></span></div><div class="input-group input-group-sm {{ hidePJ }} pj_field"><input type="text" name="invoiceData[email]" class="form-control"id="email_{{ reservation.guestyId }}"placeholder="Contact email" value="{{ reservation.invoiceData.email|default('')|e }}"><span class="input-group-append"><buttontype="button"class="btn btn-info btn-flat saveAddress"data-guestyId={{ reservation.guestyId }}><i class="fas fa-check"></i></button></span></div><div class="input-group input-group-sm {{ hidePJ }} pj_field"><input type="text" name="invoiceData[contact]" class="form-control"id="contact_{{ reservation.guestyId }}"placeholder="Contact phone No" value="{{ reservation.invoiceData.contact|default('')|e }}"><span class="input-group-append"><buttontype="button"class="btn btn-info btn-flat saveAddress"data-guestyId={{ reservation.guestyId }}><i class="fas fa-check"></i></button></span></div></form></td><td>{% if reservation.getStatusInvoice() %}<p>{% if reservation.invoiceData.type|default('PF') == "PJ" %}<span class="badge bg-success"><i class="fa fa-building"></i> Persoana juridica</span>{% endif %} <br/>{% if reservation.autoInvoiced|default(false) %}<span class="badge bg-success"><i class="fa fa-check-double"></i> Auto Invoiced</span> <br/>{% else %}<span class="badge bg-success"><i class="fa fa-check"></i> Manually Invoiced</span><br/>{% endif %}<span class="badge bg-success"><i class="fa fa-file-pdf"></i> {{ reservation.generatedinvoice|e }} </span></p><p>{% if reservation.flow =="archived" %}<span class="badge bg-danger">Rezervare arhivata, descarcati PDF din SmartBill</span>{% else %}<a target="_blank" download href="/pdf/{{ reservation.generatedinvoice|e }}" class="btn btn-primary "><i class="fas fa-download"></i> Download PDF</a>{{ reservation.sbInvoice|e }}{% endif %}</p>{# <p><a href="#"class="delete-now btn btn-danger"data-guestyId={{ reservation.guestyId }}><i class="fas fa-trash"></i>Delete invoice</a></p>#}{% else %}<form id="form_invoice_{{ reservation.guestyId }}" class="invoiceForm"data-guestyId={{ reservation.guestyId }}><input name="guestyId" type="hidden"value="{{ reservation.guestyId }}"/><div class="form-group"><div class="custom-control custom-switch custom-switch-off-danger custom-switch-on-success"><input name='allowInvoice' type="checkbox"class="custom-control-input allow-invoice"value="1"data-guestyId={{ reservation.guestyId }}id="allowInvoice_{{ reservation.guestyId }}"{% if reservation.allowInvoice %}checked="checked"{% endif %}/><label class="custom-control-label"for="allowInvoice_{{ reservation.guestyId }}">Allow Invoice?</label></div></div><div class="form-group"><div class="custom-control custom-switch custom-switch-off-danger custom-switch-on-success"><input name='invoiceData[type]' type="checkbox"class="custom-control-input invoice_type"value="PJ"data-guestyId={{ reservation.guestyId }}id="invoiceType_{{ reservation.guestyId }}"{% if reservation.invoiceData.type|default('PF') == "PJ" %}checked="checked"{% endif %}/><label class="custom-control-label"for="invoiceType_{{ reservation.guestyId }}">{{ reservation.invoiceData.type|default('PF') }} Persoana juridica</label></div></div></form>{% endif %}{% if not reservation.statusInvoice %}<p><a href="#"class="invoice-now btn btn-success {% if reservation.allowInvoice %} checked {% endif %}"data-guestyId={{ reservation.guestyId }}><i class="fas fa-save"></i>Invoice now</a></p>{% endif %}<div class="alert alert-danger" id="message_{{ reservation.guestyId }}"style="display: none;"><i class="icon fas fa-ban"></i><span class="message" data-guestyId={{ reservation.guestyId }}></span></div></td></tr>{% endfor %}</tbody></table></div><!-- /.card-body --></div></div></div></div><!-- /.container-fluid --></div><!-- /.content --><script>jQuery(document).ready(function () {var invoiceableNo = jQuery('.invoice-now.checked').length;jQuery('#invoiceAll').html("Factureaza toate "+invoiceableNo );jQuery('#invoiceAll').click(function (e) {e.preventDefault();jQuery(this).html('<i class="fa-spin fa-spinner fas"></i>');jQuery('.invoice-now.checked').click();jQuery(this).html('Done').addClass('bg-gradient-green').removeClass('bg-gradient-danger');});jQuery('.saveAddress').click(function () {var reservationId = $(this).data('guestyid');$.post("/reservation/save/ajax", $("#form_" + reservationId).serialize()).done(function (data) {toastr.success('Saved! ')});});jQuery('.addressform').submit(function (e) {e.preventDefault();var reservationId = $(this).data('guestyid');$.post("/reservation/save/ajax", $("#form_" + reservationId).serialize()).done(function (data) {toastr.success('Saved! ')});});jQuery('input.allow-invoice').change(function () {var toInvoice = 0;var reservationId = $(this).data('guestyid');$.post("/reservation/save/ajax", $("#form_invoice_" + reservationId).serialize()).done(function (data) {toastr.success('Saved! ')});});jQuery('input.invoice_type').change(function () {var reservationId = $(this).data('guestyid');$.post("/reservation/save/ajax", $("#form_invoice_" + reservationId).serialize()).done(function (data) {toastr.success('Saved! ')});let PJ = $(this).is(":checked");if (PJ) {jQuery('#form_'+reservationId+' .pj_field').removeClass('d-none');jQuery('#form_'+reservationId+' .pf_field').addClass('d-none')} else {jQuery('#form_'+reservationId+' .pf_field').removeClass('d-none');jQuery('#form_'+reservationId+' .pj_field').addClass('d-none')}});jQuery('.invoice-now').click(function (e) {e.preventDefault();var reservationId = $(this).data('guestyid');$.post("/reservation/save/invoice", {guestyId: reservationId}).done(function (data) {if (data.error != 0) {jQuery('#message_' + reservationId).show();jQuery('#message_' + reservationId).children('span').html(data.error);jQuery('#message_' + reservationId).children('i').removeClass('fa-check').addClass('fa-ban');} else{jQuery('#message_' + reservationId).removeClass('alert-danger').addClass('alert-success').show().children('span').html("OK");jQuery('#message_' + reservationId).children('i').addClass('fa-check').removeClass('fa-ban');}});});jQuery('.delete-now').click(function (e) {e.preventDefault();var reservationId = $(this).data('guestyid');$.post("/reservation/save/invoice", {guestyId: reservationId,"delete":1}).done(function (data) {if (data.error != 0) {jQuery('#message_' + reservationId).show().children('p').html(data.error);} else {toastr.success('Saved! ')}});});jQuery(function () {jQuery('.date-filter').datetimepicker({format: 'L',locale: 'ro'});});});</script><script>$(function () {$.fn.dataTable.moment( 'D/M/YYYY' );/* $('#reservations thead tr').clone(true).addClass('filters').appendTo('#reservations thead');*/$("#reservations").DataTable({"responsive": true, "lengthChange": true, "autoWidth": true, "ordering": true,/* initComplete: function () {var api = this.api();// For each columnapi.columns().eq(0).each(function (colIdx) {// Set the header cell to contain the input elementvar cell = $('.filters th').eq($(api.column(colIdx).header()).index());var title = $(cell).text();$(cell).html('<input type="text" placeholder="' + title + '" />');// On every keypress in this input$('input',$('.filters th').eq($(api.column(colIdx).header()).index())).off('keyup change').on('change', function (e) {// Get the search value$(this).attr('title', $(this).val());var regexr = '({search})'; //$(this).parents('th').find('select').val();var cursorPosition = this.selectionStart;// Search the column for that valueapi.column(colIdx).search(this.value != ''? regexr.replace('{search}', '(((' + this.value + ')))'): '',this.value != '',this.value == '').draw();}).on('keyup', function (e) {e.stopPropagation();var cursorPosition = this.selectionStart;$(this).trigger('change');$(this).focus()[0].setSelectionRange(cursorPosition, cursorPosition);});});},*/"order": [[ {% if type =='invoiced' %} 8 {% else %} 5 {% endif %}, 'asc' ]]});});</script>{% endblock %}