mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 03:14:30 -04:00
Bug fixes
This commit is contained in:
parent
8bbe164505
commit
45ed680c77
@ -24,8 +24,18 @@ App::before(function($request)
|
||||
if (Input::has('lang'))
|
||||
{
|
||||
$locale = Input::get('lang');
|
||||
Session::set(SESSION_LOCALE, $locale);
|
||||
App::setLocale($locale);
|
||||
Session::set(SESSION_LOCALE, $locale);
|
||||
|
||||
if (Auth::check())
|
||||
{
|
||||
if ($language = Language::whereLocale($locale)->first())
|
||||
{
|
||||
$account = Auth::user()->account;
|
||||
$account->language_id = $language->id;
|
||||
$account->save();
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (Auth::check())
|
||||
{
|
||||
|
@ -24,9 +24,7 @@ class AccountRepository
|
||||
if (Session::has(SESSION_LOCALE))
|
||||
{
|
||||
$locale = Session::get(SESSION_LOCALE);
|
||||
$language = Language::whereLocale($locale)->first();
|
||||
|
||||
if ($language)
|
||||
if ($language = Language::whereLocale($locale)->first())
|
||||
{
|
||||
$account->language_id = $language->id;
|
||||
}
|
||||
|
@ -606,17 +606,12 @@
|
||||
});
|
||||
|
||||
function applyComboboxListeners() {
|
||||
$('.invoice-table input, .invoice-table select, .invoice-table textarea').on('blur', function() {
|
||||
//if (value != $(this).val()) refreshPDF();
|
||||
var selectorStr = '.invoice-table input, .invoice-table select, .invoice-table textarea';
|
||||
$(selectorStr).off('blur').on('blur', function() {
|
||||
refreshPDF();
|
||||
});
|
||||
|
||||
var value;
|
||||
$('.datalist').on('focus', function() {
|
||||
value = $(this).val();
|
||||
}).on('blur', function() {
|
||||
if (value != $(this).val()) refreshPDF();
|
||||
}).on('input', function() {
|
||||
$('.datalist').on('input', function() {
|
||||
var key = $(this).val();
|
||||
for (var i=0; i<products.length; i++) {
|
||||
var product = products[i];
|
||||
@ -633,7 +628,7 @@
|
||||
|
||||
function createInvoiceModel() {
|
||||
var invoice = ko.toJS(model).invoice;
|
||||
invoice.is_pro = {{ Auth::user()->isPro() }};
|
||||
invoice.is_pro = {{ Auth::user()->isPro() ? 'true' : 'false' }};
|
||||
|
||||
@if (file_exists($account->getLogoPath()))
|
||||
invoice.image = "{{ HTML::image_data($account->getLogoPath()) }}";
|
||||
@ -641,17 +636,18 @@
|
||||
invoice.imageHeight = {{ $account->getLogoHeight() }};
|
||||
@endif
|
||||
|
||||
invoice.imageLogo1 = "{{ HTML::image_data('images/report_logo1.jpg') }}";
|
||||
invoice.imageLogoWidth1 =120;
|
||||
invoice.imageLogoHeight1 = 40
|
||||
window.logoImages = {};
|
||||
logoImages.imageLogo1 = "{{ HTML::image_data('images/report_logo1.jpg') }}";
|
||||
logoImages.imageLogoWidth1 =120;
|
||||
logoImages.imageLogoHeight1 = 40
|
||||
|
||||
invoice.imageLogo2 = "{{ HTML::image_data('images/report_logo2.jpg') }}";
|
||||
invoice.imageLogoWidth2 =325/2;
|
||||
invoice.imageLogoHeight2 = 81/2;
|
||||
logoImages.imageLogo2 = "{{ HTML::image_data('images/report_logo2.jpg') }}";
|
||||
logoImages.imageLogoWidth2 =325/2;
|
||||
logoImages.imageLogoHeight2 = 81/2;
|
||||
|
||||
invoice.imageLogo3 = "{{ HTML::image_data('images/report_logo3.jpg') }}";
|
||||
invoice.imageLogoWidth3 =325/2;
|
||||
invoice.imageLogoHeight3 = 81/2;
|
||||
logoImages.imageLogo3 = "{{ HTML::image_data('images/report_logo3.jpg') }}";
|
||||
logoImages.imageLogoWidth3 =325/2;
|
||||
logoImages.imageLogoHeight3 = 81/2;
|
||||
|
||||
|
||||
return invoice;
|
||||
@ -678,38 +674,42 @@
|
||||
if (!doc) return;
|
||||
return doc.output('datauristring');
|
||||
}
|
||||
|
||||
function refreshPDF() {
|
||||
console.log('refreshPDF');
|
||||
if ({{ Auth::user()->force_pdfjs ? 'false' : 'true' }} && (isFirefox || (isChrome && !isChromium))) {
|
||||
var string = getPDFString();
|
||||
if (!string) return;
|
||||
$('#theFrame').attr('src', string).show();
|
||||
} else {
|
||||
if (isRefreshing) {
|
||||
needsRefresh = true;
|
||||
return;
|
||||
}
|
||||
isRefreshing = true;
|
||||
var string = getPDFString();
|
||||
if (!string) return;
|
||||
isRefreshing = true;
|
||||
var pdfAsArray = convertDataURIToBinary(string);
|
||||
PDFJS.getDocument(pdfAsArray).then(function getPdfHelloWorld(pdf) {
|
||||
PDFJS.getDocument(pdfAsArray).then(function getPdfHelloWorld(pdf) {
|
||||
|
||||
pdf.getPage(1).then(function getPageHelloWorld(page) {
|
||||
var scale = 1.5;
|
||||
var viewport = page.getViewport(scale);
|
||||
pdf.getPage(1).then(function getPageHelloWorld(page) {
|
||||
var scale = 1.5;
|
||||
var viewport = page.getViewport(scale);
|
||||
|
||||
var canvas = document.getElementById('theCanvas');
|
||||
var context = canvas.getContext('2d');
|
||||
canvas.height = viewport.height;
|
||||
canvas.width = viewport.width;
|
||||
var canvas = document.getElementById('theCanvas');
|
||||
var context = canvas.getContext('2d');
|
||||
canvas.height = viewport.height;
|
||||
canvas.width = viewport.width;
|
||||
|
||||
page.render({canvasContext: context, viewport: viewport});
|
||||
$('#theCanvas').show();
|
||||
isRefreshing = false;
|
||||
if (needsRefresh) {
|
||||
needsRefresh = false;
|
||||
refreshPDF();
|
||||
}
|
||||
});
|
||||
});
|
||||
page.render({canvasContext: context, viewport: viewport});
|
||||
$('#theCanvas').show();
|
||||
isRefreshing = false;
|
||||
if (needsRefresh) {
|
||||
needsRefresh = false;
|
||||
refreshPDF();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -29,18 +29,19 @@
|
||||
|
||||
$(function() {
|
||||
window.invoice = {{ $invoice->toJson() }};
|
||||
window.logoImages = {};
|
||||
|
||||
invoice.imageLogo1 = "{{ HTML::image_data('images/report_logo1.jpg') }}";
|
||||
invoice.imageLogoWidth1 =120;
|
||||
invoice.imageLogoHeight1 = 40
|
||||
logoImages.imageLogo1 = "{{ HTML::image_data('images/report_logo1.jpg') }}";
|
||||
logoImages.imageLogoWidth1 =120;
|
||||
logoImages.imageLogoHeight1 = 40
|
||||
|
||||
invoice.imageLogo2 = "{{ HTML::image_data('images/report_logo2.jpg') }}";
|
||||
invoice.imageLogoWidth2 =325/2;
|
||||
invoice.imageLogoHeight2 = 81/2;
|
||||
logoImages.imageLogo2 = "{{ HTML::image_data('images/report_logo2.jpg') }}";
|
||||
logoImages.imageLogoWidth2 =325/2;
|
||||
logoImages.imageLogoHeight2 = 81/2;
|
||||
|
||||
invoice.imageLogo3 = "{{ HTML::image_data('images/report_logo3.jpg') }}";
|
||||
invoice.imageLogoWidth3 =325/2;
|
||||
invoice.imageLogoHeight3 = 81/2;
|
||||
logoImages.imageLogo3 = "{{ HTML::image_data('images/report_logo3.jpg') }}";
|
||||
logoImages.imageLogoWidth3 =325/2;
|
||||
logoImages.imageLogoHeight3 = 81/2;
|
||||
|
||||
@if (file_exists($invoice->client->account->getLogoPath()))
|
||||
invoice.image = "{{ HTML::image_data($invoice->client->account->getLogoPath()) }}";
|
||||
|
@ -75,7 +75,7 @@ th:last-child {
|
||||
tr {border: none;}
|
||||
th {border-left: 1px solid #d26b26; }
|
||||
.table>thead>tr>th, .table>tbody>tr>th, .table>tfoot>tr>th, .table>thead>tr>td, .table>tbody>tr>td, .table>tfoot>tr>td {
|
||||
vertical-align: top;
|
||||
vertical-align: middle;
|
||||
border-top: none;
|
||||
border-bottom: 1px solid #dfe0e1;
|
||||
}
|
||||
|
@ -106,13 +106,35 @@ function GetReportTemplate4(doc, invoice, layout, checkMath) {
|
||||
}
|
||||
|
||||
|
||||
var invoiceOld;
|
||||
function generatePDF(invoice, checkMath) {
|
||||
invoice = calculateAmounts(invoice);
|
||||
report_id=invoice.invoice_design_id;
|
||||
doc= GetPdf(invoice,checkMath,report_id);
|
||||
return doc;
|
||||
console.log('generatePDF: %s', (JSON.stringify(invoice) == invoiceOld));
|
||||
//console.log(JSON.stringify(invoice));
|
||||
//console.log(invoiceOld);
|
||||
invoice = calculateAmounts(invoice);
|
||||
|
||||
var a = copyInvoice(invoice);
|
||||
var b = copyInvoice(invoiceOld);
|
||||
|
||||
console.log(JSON.stringify(a));
|
||||
console.log(JSON.stringify(b));
|
||||
if (_.isEqual(a, b)) {
|
||||
return;
|
||||
}
|
||||
invoiceOld = invoice;
|
||||
report_id = invoice.invoice_design_id;
|
||||
doc = GetPdf(invoice, checkMath, report_id);
|
||||
return doc;
|
||||
}
|
||||
|
||||
function copyInvoice(orig) {
|
||||
if (!orig) return false;
|
||||
var copy = JSON.stringify(orig);
|
||||
//console.log(copy);
|
||||
var copy = JSON.parse(copy);
|
||||
//console.log(copy);
|
||||
return copy;
|
||||
}
|
||||
|
||||
/* Handle converting variables in the invoices (ie, MONTH+1) */
|
||||
function processVariables(str) {
|
||||
@ -689,11 +711,11 @@ function GetReportTemplate1(doc, invoice, layout, checkMath)
|
||||
doc.addImage(invoice.image, 'JPEG', layout.marginLeft, 30);
|
||||
}
|
||||
|
||||
if (!invoice.is_pro && invoice.imageLogo1)
|
||||
if (!invoice.is_pro && logoImages.imageLogo1)
|
||||
{
|
||||
pageHeight=820;
|
||||
y=pageHeight-invoice.imageLogoHeight1;
|
||||
doc.addImage(invoice.imageLogo1, 'JPEG', layout.marginLeft, y, invoice.imageLogoWidth1, invoice.imageLogoHeight1);
|
||||
y=pageHeight-logoImages.imageLogoHeight1;
|
||||
doc.addImage(logoImages.imageLogo1, 'JPEG', layout.marginLeft, y, logoImages.imageLogoWidth1, logoImages.imageLogoHeight1);
|
||||
}
|
||||
|
||||
|
||||
@ -1044,15 +1066,15 @@ function Report2AddFooter (invoice,doc)
|
||||
doc.rect(x1, y1, w2, h2, 'FD');
|
||||
|
||||
|
||||
if (!invoice.is_pro && invoice.imageLogo2)
|
||||
if (!invoice.is_pro && logoImages.imageLogo2)
|
||||
{
|
||||
pageHeight=820;
|
||||
var left = 250;//headerRight ;
|
||||
y=pageHeight-invoice.imageLogoHeight2;
|
||||
y=pageHeight-logoImages.imageLogoHeight2;
|
||||
var headerRight=370;
|
||||
|
||||
var left = headerRight - invoice.imageLogoWidth2;
|
||||
doc.addImage(invoice.imageLogo2, 'JPEG', left, y, invoice.imageLogoWidth2, invoice.imageLogoHeight2);
|
||||
var left = headerRight - logoImages.imageLogoWidth2;
|
||||
doc.addImage(logoImages.imageLogo2, 'JPEG', left, y, logoImages.imageLogoWidth2, logoImages.imageLogoHeight2);
|
||||
|
||||
|
||||
}
|
||||
@ -1085,17 +1107,15 @@ function Report3AddFooter (invoice, account, doc, layout)
|
||||
doc.rect(x1, y1, w2, h2, 'FD');
|
||||
|
||||
|
||||
if (!invoice.is_pro && invoice.imageLogo3)
|
||||
if (!invoice.is_pro && logoImages.imageLogo3)
|
||||
{
|
||||
pageHeight=820;
|
||||
// var left = 25;//250;//headerRight ;
|
||||
y=pageHeight-invoice.imageLogoHeight3;
|
||||
y=pageHeight-logoImages.imageLogoHeight3;
|
||||
//var headerRight=370;
|
||||
|
||||
//var left = headerRight - invoice.imageLogoWidth3;
|
||||
doc.addImage(invoice.imageLogo3, 'JPEG', 40, y, invoice.imageLogoWidth3, invoice.imageLogoHeight3);
|
||||
|
||||
|
||||
doc.addImage(logoImages.imageLogo3, 'JPEG', 40, y, logoImages.imageLogoWidth3, logoImages.imageLogoHeight3);
|
||||
}
|
||||
|
||||
|
||||
@ -1227,12 +1247,12 @@ function Report3AddHeader (invoice,account,doc)
|
||||
function Report1AddNewPage(invoice,account,doc)
|
||||
{
|
||||
doc.addPage();
|
||||
if (invoice.imageLogo1)
|
||||
if (logoImages.imageLogo1)
|
||||
{
|
||||
pageHeight=820;
|
||||
y=pageHeight-invoice.imageLogoHeight1;
|
||||
y=pageHeight-logoImages.imageLogoHeight1;
|
||||
var left = 20;//headerRight - invoice.imageLogoWidth1;
|
||||
doc.addImage(invoice.imageLogo1, 'JPEG', left, y, invoice.imageLogoWidth1, invoice.imageLogoHeight1);
|
||||
doc.addImage(logoImages.imageLogo1, 'JPEG', left, y, logoImages.imageLogoWidth1, logoImages.imageLogoHeight1);
|
||||
|
||||
}
|
||||
|
||||
@ -1650,3 +1670,28 @@ function displayInvoiceItems(doc, invoice, layout) {
|
||||
|
||||
return y;
|
||||
}
|
||||
|
||||
// http://stackoverflow.com/questions/1068834/object-comparison-in-javascript
|
||||
function objectEquals(x, y) {
|
||||
// if both are function
|
||||
if (x instanceof Function) {
|
||||
if (y instanceof Function) {
|
||||
return x.toString() === y.toString();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
if (x === null || x === undefined || y === null || y === undefined) { return x === y; }
|
||||
if (x === y || x.valueOf() === y.valueOf()) { return true; }
|
||||
|
||||
// if one of them is date, they must had equal valueOf
|
||||
if (x instanceof Date) { return false; }
|
||||
if (y instanceof Date) { return false; }
|
||||
|
||||
// if they are not function or strictly equal, they both need to be Objects
|
||||
if (!(x instanceof Object)) { return false; }
|
||||
if (!(y instanceof Object)) { return false; }
|
||||
|
||||
var p = Object.keys(x);
|
||||
return Object.keys(y).every(function (i) { return p.indexOf(i) !== -1; }) ?
|
||||
p.every(function (i) { return objectEquals(x[i], y[i]); }) : false;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user