diff --git a/public/js/built.js b/public/js/built.js
index 4dbeb0a02ff1..11a81b35e02a 100644
--- a/public/js/built.js
+++ b/public/js/built.js
@@ -29885,6 +29885,7 @@ var isChrome = !!window.chrome && !isOpera && !isEdge; // Chrome 1+
var isChromium = isChrome && navigator.userAgent.indexOf('Chromium') >= 0;
var isIE = /*@cc_on!@*/false || !!document.documentMode; // At least IE6
+var pdfDoc;
var invoiceOld;
var refreshTimer;
function generatePDF(invoice, javascript, force, cb) {
@@ -29901,23 +29902,23 @@ function generatePDF(invoice, javascript, force, cb) {
refreshTimer = setTimeout(function() {
generatePDF(invoice, javascript, true, cb);
}, 500);
- return;
+ return pdfDoc;
}
invoice = calculateAmounts(invoice);
var a = copyObject(invoice);
var b = copyObject(invoiceOld);
- if (!force && _.isEqual(a, b)) {
- return;
+ if (_.isEqual(a, b)) {
+ return pdfDoc;
}
invoiceOld = invoice;
- doc = GetPdfMake(invoice, javascript, cb);
+ pdfDoc = GetPdfMake(invoice, javascript, cb);
if (cb) {
- doc.getDataUrl(cb);
+ pdfDoc.getDataUrl(cb);
}
- return doc;
+ return pdfDoc;
}
function copyObject(orig) {
diff --git a/public/js/script.js b/public/js/script.js
index 8f4399655818..071faac66e0e 100644
--- a/public/js/script.js
+++ b/public/js/script.js
@@ -7,6 +7,7 @@ var isChrome = !!window.chrome && !isOpera && !isEdge; // Chrome 1+
var isChromium = isChrome && navigator.userAgent.indexOf('Chromium') >= 0;
var isIE = /*@cc_on!@*/false || !!document.documentMode; // At least IE6
+var pdfDoc;
var invoiceOld;
var refreshTimer;
function generatePDF(invoice, javascript, force, cb) {
@@ -23,23 +24,23 @@ function generatePDF(invoice, javascript, force, cb) {
refreshTimer = setTimeout(function() {
generatePDF(invoice, javascript, true, cb);
}, 500);
- return;
+ return pdfDoc;
}
invoice = calculateAmounts(invoice);
var a = copyObject(invoice);
var b = copyObject(invoiceOld);
- if (!force && _.isEqual(a, b)) {
- return;
+ if (_.isEqual(a, b)) {
+ return pdfDoc;
}
invoiceOld = invoice;
- doc = GetPdfMake(invoice, javascript, cb);
+ pdfDoc = GetPdfMake(invoice, javascript, cb);
if (cb) {
- doc.getDataUrl(cb);
+ pdfDoc.getDataUrl(cb);
}
- return doc;
+ return pdfDoc;
}
function copyObject(orig) {
diff --git a/resources/views/invoices/edit.blade.php b/resources/views/invoices/edit.blade.php
index af2de672b00b..e62d9ab98c97 100644
--- a/resources/views/invoices/edit.blade.php
+++ b/resources/views/invoices/edit.blade.php
@@ -196,7 +196,6 @@
{!! Former::text('product_key')->useDatalist($products->toArray(), 'product_key')
->data_bind("value: product_key, valueUpdate: 'afterkeydown', attr: {name: 'invoice_items[' + \$index() + '][product_key]'}")
->addClass('datalist')
- ->onkeyup('onItemChange()')
->raw()
!!}
@@ -206,12 +205,12 @@
-
+
|
-
+
|
@@ -727,7 +726,8 @@
var $input = $('select#client');
$input.combobox().on('change', function(e) {
- var clientId = parseInt($('input[name=client]').val(), 10);
+ var oldId = model.invoice().client().public_id();
+ var clientId = parseInt($('input[name=client]').val(), 10) || 0;
if (clientId > 0) {
var selected = clientMap[clientId];
model.loadClient(selected);
@@ -735,7 +735,7 @@
$('.client-input').val(getClientDisplayName(selected));
// if there's an invoice number pattern we'll apply it now
setInvoiceNumber(selected);
- } else {
+ } else if (oldId) {
model.loadClient($.parseJSON(ko.toJSON(new ClientModel())));
model.invoice().client().country = false;
}
@@ -750,7 +750,7 @@
}
$('#invoice_footer, #terms, #public_notes, #invoice_number, #invoice_date, #due_date, #start_date, #po_number, #discount, #currency_id, #invoice_design_id, #recurring, #is_amount_discount, #partial, #custom_text_value1, #custom_text_value2').change(function() {
- setTimeout(function() {
+ setTimeout(function() {
refreshPDF(true);
}, 1);
});
@@ -789,8 +789,6 @@
});
$('label.radio').addClass('radio-inline');
-
- applyComboboxListeners();
@if ($invoice->client->id)
$input.trigger('change');
@@ -806,12 +804,15 @@
@if (isset($tasks) && $tasks)
NINJA.formIsChanged = true;
@endif
+
+ applyComboboxListeners();
});
function applyComboboxListeners() {
- var selectorStr = '.invoice-table input, .invoice-table select, .invoice-table textarea';
- $(selectorStr).off('blur').on('blur', function() {
- refreshPDF(true);
+ var selectorStr = '.invoice-table input, .invoice-table select, .invoice-table textarea';
+ $(selectorStr).off('change').on('change', function(event) {
+ onItemChange();
+ refreshPDF(true);
});
$('textarea').on('keyup focus', function(e) {
@@ -821,7 +822,7 @@
});
@if (Auth::user()->account->fill_products)
- $('.datalist').on('input', function() {
+ $('.datalist').off('input').on('input', function() {
var key = $(this).val();
for (var i=0; ihide_quantity)
- itemModel.qty(1);
+ itemModel.qty(1);
@endif
self.invoice_items.push(itemModel);
- applyComboboxListeners();
+ applyComboboxListeners();
return itemModel;
}
if (data) {
- ko.mapping.fromJS(data, self.mapping, self);
+ ko.mapping.fromJS(data, self.mapping, self);
} else {
self.addItem();
}
diff --git a/resources/views/invoices/pdf.blade.php b/resources/views/invoices/pdf.blade.php
index 8a8c3f627410..9825ab1cb697 100644
--- a/resources/views/invoices/pdf.blade.php
+++ b/resources/views/invoices/pdf.blade.php
@@ -89,14 +89,15 @@
var needsRefresh = false;
function refreshPDF(force) {
+ //console.log('refresh PDF - force: ' + force + ' ' + (new Date()).getTime())
return getPDFString(refreshPDFCB, force);
}
function refreshPDFCB(string) {
if (!string) return;
PDFJS.workerSrc = '{{ asset('js/pdf_viewer.worker.js') }}';
- if ({{ Auth::check() && Auth::user()->force_pdfjs ? 'false' : 'true' }} && (isFirefox || (isChrome && !isChromium))) {
- $('#theFrame').attr('src', string).show();
+ if ({{ Auth::check() && Auth::user()->force_pdfjs ? 'false' : 'true' }} && (isFirefox || isChrome)) {
+ $('#theFrame').attr('src', string).show();
} else {
if (isRefreshing) {
//needsRefresh = true;
|