1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-11-08 12:12:48 +01:00

Support background image on invoice

This commit is contained in:
Hillel Coren 2018-04-11 23:18:01 +03:00
parent 96c5e764b7
commit 7a5215e6a0
24 changed files with 174 additions and 52 deletions

View File

@ -1057,6 +1057,7 @@ class AccountController extends BaseController
$account->quote_design_id = Input::get('quote_design_id');
$account->font_size = intval(Input::get('font_size'));
$account->page_size = Input::get('page_size');
$account->background_image_id = Document::getPrivateId(request()->background_image_id);
$labels = [];
foreach (Account::$customLabels as $field) {

View File

@ -382,6 +382,11 @@ class Account extends Eloquent
return $this->hasMany('App\Models\Document')->whereIsDefault(true);
}
public function background_image()
{
return $this->hasOne('App\Models\Document', 'id', 'background_image_id');
}
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/

View File

@ -356,6 +356,11 @@ class Document extends EntityModel
return $document;
}
public function scopeProposalImages($query)
{
return $query->whereIsProposal(1);
}
}
Document::deleted(function ($document) {

View File

@ -108,7 +108,11 @@ class EntityModel extends Eloquent
$className = get_called_class();
return $className::scope($publicId)->withTrashed()->value('id');
if (method_exists($className, 'trashed')) {
return $className::scope($publicId)->withTrashed()->value('id');
} else {
return $className::scope($publicId)->value('id');
}
}
/**

View File

@ -136,6 +136,14 @@ class User extends Authenticatable
return $this->account->isPro();
}
/**
* @return mixed
*/
public function isEnterprise()
{
return $this->account->isEnterprise();
}
/**
* @return mixed
*/

View File

@ -79,6 +79,7 @@ class AddMoreCustomFields extends Migration
});
Schema::table('accounts', function ($table) {
$table->unsignedInteger('background_image_id')->nullable();
$table->mediumText('custom_messages')->nullable();
});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -189,6 +189,17 @@ function GetPdfMake(invoice, javascript, callback) {
if(!dd.defaultStyle)dd.defaultStyle = {font:NINJA.bodyFont};
else if(!dd.defaultStyle.font)dd.defaultStyle.font = NINJA.bodyFont;
if (window.accountBackground) {
var origBackground = dd.background;
dd.background = function(currentPage) {
var allPages = origBackground.length && origBackground[0].pages == 'all';
return currentPage == 1 || allPages ? origBackground : false;
}
} else {
// prevent unnecessarily showing blank image
dd.background = false;
}
doc = pdfMake.createPdf(dd);
doc.save = function(fileName) {
this.download(fileName);
@ -228,6 +239,7 @@ NINJA.decodeJavascript = function(invoice, javascript)
var json = {
'accountName': account.name || ' ',
'accountLogo': window.accountLogo ? window.accountLogo : blankImage,
'accountBackground': window.accountBackground ? window.accountBackground : blankImage,
'accountDetails': NINJA.accountDetails(invoice),
'accountAddress': NINJA.accountAddress(invoice),
'invoiceDetails': NINJA.invoiceDetails(invoice),

View File

@ -2831,6 +2831,10 @@ $LANG = array(
'strength_strong' => 'Strong',
'mark' => 'Mark',
'updated_task_status' => 'Successfully update task status',
'background_image' => 'Background Image',
'background_image_help' => 'Use the :link to manage your images.',
'proposal_editor' => 'proposal editor',
'background' => 'Background',
);

View File

@ -41,7 +41,7 @@
var invoiceDesigns = {!! $invoiceDesigns !!};
var invoiceFonts = {!! $invoiceFonts !!};
var invoice = {!! json_encode($invoice) !!};
var sections = ['content', 'styles', 'defaultStyle', 'pageMargins', 'header', 'footer'];
var sections = ['content', 'styles', 'defaultStyle', 'pageMargins', 'header', 'footer', 'background'];
var customDesign = origCustomDesign = {!! $customDesign ?: 'JSON.parse(invoiceDesigns[0].javascript);' !!};
function getPDFString(cb, force) {
@ -185,6 +185,9 @@
<li role="presentation"><a href="#margins" aria-controls="margins" role="tab" data-toggle="tab">{{ trans('texts.margins') }}</a></li>
<li role="presentation"><a href="#header" aria-controls="header" role="tab" data-toggle="tab">{{ trans('texts.header') }}</a></li>
<li role="presentation"><a href="#footer" aria-controls="footer" role="tab" data-toggle="tab">{{ trans('texts.footer') }}</a></li>
@if ($account->isEnterprise() && $account->background_image_id)
<li role="presentation"><a href="#background" aria-controls="footer" role="tab" data-toggle="tab">{{ trans('texts.background') }}</a></li>
@endif
</ul>
</div>
<div id="jsoneditor" style="width: 100%; height: 814px;"></div>

View File

@ -154,6 +154,7 @@
{!! Former::populateField('hide_paid_to_date', intval($account->hide_paid_to_date)) !!}
{!! Former::populateField('all_pages_header', intval($account->all_pages_header)) !!}
{!! Former::populateField('all_pages_footer', intval($account->all_pages_footer)) !!}
{!! Former::populateField('background_image_id', $account->background_image ? $account->background_image->public_id : null) !!}
@foreach ($invoiceLabels as $field => $value)
{!! Former::populateField("labels_{$field}", $value) !!}
@ -292,24 +293,32 @@
<div role="tabpanel" class="tab-pane" id="invoice_options">
<div class="panel-body">
{!! Former::checkbox('hide_paid_to_date')->text(trans('texts.hide_paid_to_date_help'))->value(1) !!}
{!! Former::checkbox('invoice_embed_documents')->text(trans('texts.invoice_embed_documents_help'))->value(1) !!}
@if (auth()->user()->isEnterprise())
{!! Former::select('background_image_id')
->label('background_image')
->addOption('', '')
->fromQuery(\App\Models\Document::scope()->proposalImages()->get(), 'name', 'public_id')
->help(trans('texts.background_image_help', ['link' => link_to('/proposals/create?show_assets=true', trans('texts.proposal_editor'), ['target' => '_blank'])])) !!}
@endif
<br/>
{!! Former::checkbox('hide_paid_to_date')->text(trans('texts.hide_paid_to_date_help'))->value(1) !!}
{!! Former::checkbox('invoice_embed_documents')->text(trans('texts.invoice_embed_documents_help'))->value(1) !!}
{!! Former::inline_radios('all_pages_header')
->label(trans('texts.all_pages_header'))
->radios([
trans('texts.first_page') => ['value' => 0, 'name' => 'all_pages_header'],
trans('texts.all_pages') => ['value' => 1, 'name' => 'all_pages_header'],
])->check($account->all_pages_header) !!}
<br/>
{!! Former::inline_radios('all_pages_footer')
->label(trans('texts.all_pages_footer'))
->radios([
trans('texts.last_page') => ['value' => 0, 'name' => 'all_pages_footer'],
trans('texts.all_pages') => ['value' => 1, 'name' => 'all_pages_footer'],
])->check($account->all_pages_footer) !!}
{!! Former::inline_radios('all_pages_header')
->label(trans('texts.all_pages_header'))
->radios([
trans('texts.first_page') => ['value' => 0, 'name' => 'all_pages_header'],
trans('texts.all_pages') => ['value' => 1, 'name' => 'all_pages_header'],
])->check($account->all_pages_header) !!}
{!! Former::inline_radios('all_pages_footer')
->label(trans('texts.all_pages_footer'))
->radios([
trans('texts.last_page') => ['value' => 0, 'name' => 'all_pages_footer'],
trans('texts.all_pages') => ['value' => 1, 'name' => 'all_pages_footer'],
])->check($account->all_pages_footer) !!}
</div>
</div>

View File

@ -88,6 +88,10 @@
}
@endif
@if ($account->isEnterprise() && $account->background_image_id && $account->background_image)
window.accountBackground = "{{ Form::image_data($account->background_image->getRaw(), true) }}";
@endif
var NINJA = NINJA || {};
@if ($account->hasFeature(FEATURE_CUSTOMIZE_INVOICE_DESIGN))
NINJA.primaryColor = "{{ $account->primary_color }}";

View File

@ -259,6 +259,12 @@
@if (! $proposal && $templatePublicId)
loadTemplate();
@endif
@if (request()->show_assets)
setTimeout(function() {
grapesjsEditor.runCommand('open-assets');
}, 500);
@endif
});
</script>

View File

@ -383,5 +383,11 @@
80,
0,
40
],
"background": [
{
"image": "$accountBackground",
"alignment": "center"
}
]
}

View File

@ -247,5 +247,11 @@
"color": "#737373"
}
},
"pageMargins": [40, 40, 40, 40]
"pageMargins": [40, 40, 40, 40],
"background": [
{
"image": "$accountBackground",
"alignment": "center"
}
]
}

View File

@ -295,5 +295,11 @@
40,
40,
60
],
"background": [
{
"image": "$accountBackground",
"alignment": "center"
}
]
}

View File

@ -218,5 +218,11 @@
"color": "#737373"
}
},
"pageMargins": [40, 40, 40, 40]
"pageMargins": [40, 40, 40, 40],
"background": [
{
"image": "$accountBackground",
"alignment": "center"
}
]
}

View File

@ -213,5 +213,11 @@
"color": "#737373"
}
},
"pageMargins": [40, 40, 40, 40]
"pageMargins": [40, 40, 40, 40],
"background": [
{
"image": "$accountBackground",
"alignment": "center"
}
]
}

View File

@ -215,5 +215,11 @@
"color": "#737373"
}
},
"pageMargins": [40, 40, 40, 40]
"pageMargins": [40, 40, 40, 40],
"background": [
{
"image": "$accountBackground",
"alignment": "center"
}
]
}

View File

@ -260,5 +260,11 @@
"margin": [0, 10, 0, 10]
}
},
"pageMargins": [40, 120, 40, 50]
"pageMargins": [40, 120, 40, 50],
"background": [
{
"image": "$accountBackground",
"alignment": "center"
}
]
}

View File

@ -178,5 +178,11 @@
"color": "#737373"
}
},
"pageMargins": [40, 30, 40, 30]
"pageMargins": [40, 30, 40, 30],
"background": [
{
"image": "$accountBackground",
"alignment": "center"
}
]
}

View File

@ -184,5 +184,11 @@
"margin": [0, 10, 0, 10]
}
},
"pageMargins": [40, 40, 40, 60]
"pageMargins": [40, 40, 40, 60],
"background": [
{
"image": "$accountBackground",
"alignment": "center"
}
]
}

View File

@ -269,5 +269,11 @@
"color": "#737373"
}
},
"pageMargins": [40, 40, 40, 40]
"pageMargins": [40, 40, 40, 40],
"background": [
{
"image": "$accountBackground",
"alignment": "center"
}
]
}