1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-11-14 23:22:52 +01:00
invoiceninja/resources/views/proposals/edit.blade.php
Hillel Coren 5dfb90604b Proposals
2018-02-07 16:16:31 +02:00

186 lines
5.9 KiB
PHP

@extends('header')
@section('head')
@parent
@include('money_script')
@include('proposals.grapesjs_header')
@stop
@section('content')
{!! Former::open($url)
->method($method)
->id('mainForm')
->rules([
'invoice_id' => 'required',
]) !!}
@if ($proposal)
{!! Former::populate($proposal) !!}
@endif
<span style="display:none">
{!! Former::text('public_id') !!}
{!! Former::text('html') !!}
{!! Former::text('css') !!}
</span>
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-body">
<div class="row">
<div class="col-md-6">
{!! Former::select('invoice_id')->addOption('', '')
->label(trans('texts.quote'))
->addGroupClass('invoice-select') !!}
{!! Former::select('proposal_template_id')->addOption('', '')
->label(trans('texts.template'))
->addGroupClass('template-select') !!}
</div>
<div class="col-md-6">
{!! Former::textarea('private_notes')
->style('height: 100px') !!}
</div>
</div>
</div>
</div>
</div>
</div>
<center class="buttons">
{!! Button::normal(trans('texts.cancel'))
->appendIcon(Icon::create('remove-circle'))
->asLinkTo(HTMLUtils::previousUrl('/proposals')) !!}
{!! Button::success(trans("texts.save"))
->withAttributes(array('id' => 'saveButton', 'onclick' => 'onSaveClick()'))
->appendIcon(Icon::create('floppy-disk')) !!}
</center>
{!! Former::close() !!}
<div id="gjs"></div>
<script type="text/javascript">
var invoices = {!! $invoices !!};
var invoiceMap = {};
var templates = {!! $templates !!};
var templateMap = {};
function onSaveClick() {
$('#html').val(grapesjsEditor.getHtml());
$('#css').val(grapesjsEditor.getCss());
$('#mainForm').submit();
}
function loadTemplate() {
var templateId = $('select#proposal_template_id').val();
var template = templateMap[templateId];
if (! template) {
return;
}
var html = mergeTemplate(template.html);
// grapesjsEditor.CssComposer.getAll().reset();
grapesjsEditor.setComponents(html);
grapesjsEditor.setStyle(template.css);
}
function mergeTemplate(html) {
var invoiceId = $('select#invoice_id').val();
var invoice = invoiceMap[invoiceId];
if (!invoice) {
return html;
}
var regExp = new RegExp(/\$[a-z][\w\.]*/, 'g');
var matches = html.match(regExp);
if (matches) {
for (var i=0; i<matches.length; i++) {
var match = matches[i];
field = match.substring(1, match.length);
field = toSnakeCase(field);
if (field == 'invoice_number') {
field = 'invoice_number';
} else if (field == 'valid_until') {
field = 'due_date';
} else if (field == 'invoice_date') {
field = 'invoice_date';
}
var value = getDescendantProp(invoice, field) || ' ';
value = doubleDollarSign(value) + '';
value = value.replace(/\n/g, "\\n").replace(/\r/g, "\\r");
if (field == 'amount' || field == 'partial') {
value = formatMoneyInvoice(value, invoice);
} else if (['invoice_date', 'due_date'].indexOf(field) >= 0) {
value = moment.utc(value).format('{{ $account->getMomentDateFormat() }}');
}
html = html.replace(match, value);
}
}
return html;
}
$(function() {
var invoiceId = {{ ! empty($invoicePublicId) ? $invoicePublicId : 0 }};
var $invoiceSelect = $('select#invoice_id');
for (var i = 0; i < invoices.length; i++) {
var invoice = invoices[i];
invoiceMap[invoice.public_id] = invoice;
$invoiceSelect.append(new Option(invoice.invoice_number + ' - ' + getClientDisplayName(invoice.client), invoice.public_id));
}
@include('partials/entity_combobox', ['entityType' => ENTITY_INVOICE])
if (invoiceId) {
var invoice = invoiceMap[invoiceId];
$invoiceSelect.val(invoice.public_id);
setComboboxValue($('.invoice-select'), invoice.public_id, invoice.invoice_number + ' - ' + getClientDisplayName(invoice.client));
}
$invoiceSelect.change(loadTemplate);
var templateId = {{ ! empty($templatePublicId) ? $templatePublicId : 0 }};
var $proposal_templateSelect = $('select#proposal_template_id');
for (var i = 0; i < templates.length; i++) {
var template = templates[i];
templateMap[template.public_id] = template;
$proposal_templateSelect.append(new Option(template.name, template.public_id));
}
@include('partials/entity_combobox', ['entityType' => ENTITY_PROPOSAL_TEMPLATE])
if (templateId) {
var template = templateMap[templateId];
setComboboxValue($('.template-select'), template.public_id, template.name);
}
$proposal_templateSelect.change(loadTemplate);
})
</script>
@include('proposals.grapesjs', ['entity' => $proposal])
<script type="text/javascript">
$(function() {
grapesjsEditor.on('canvas:drop', function() {
var html = mergeTemplate(grapesjsEditor.getHtml());
grapesjsEditor.setComponents(html);
});
});
</script>
@stop