fixes for defaults when converting quotes to invoices

This commit is contained in:
David Bomba 2021-07-25 18:05:53 +10:00
parent 8a4230c81c
commit 4f940e41b0
3 changed files with 47 additions and 23 deletions

View File

@ -28,6 +28,10 @@ class CloneQuoteToInvoiceFactory
unset($quote_array['invoice_id']); unset($quote_array['invoice_id']);
unset($quote_array['id']); unset($quote_array['id']);
unset($quote_array['invitations']); unset($quote_array['invitations']);
unset($quote_array['terms']);
unset($quote_array['public_notes']);
unset($quote_array['footer']);
unset($quote_array['design_id']);
foreach ($quote_array as $key => $value) { foreach ($quote_array as $key => $value) {
$invoice->{$key} = $value; $invoice->{$key} = $value;

View File

@ -11,11 +11,14 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Factory\InvoiceFactory;
use App\Http\Requests\Invoice\StoreInvoiceRequest;
use App\Jobs\Util\PreviewPdf; use App\Jobs\Util\PreviewPdf;
use App\Models\Client; use App\Models\Client;
use App\Models\ClientContact; use App\Models\ClientContact;
use App\Models\Invoice; use App\Models\Invoice;
use App\Models\InvoiceInvitation; use App\Models\InvoiceInvitation;
use App\Repositories\InvoiceRepository;
use App\Services\PdfMaker\Design; use App\Services\PdfMaker\Design;
use App\Services\PdfMaker\PdfMaker; use App\Services\PdfMaker\PdfMaker;
use App\Utils\HostedPDF\NinjaPdf; use App\Utils\HostedPDF\NinjaPdf;
@ -28,6 +31,7 @@ use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Lang; use Illuminate\Support\Facades\Lang;
use Illuminate\Support\Facades\Response; use Illuminate\Support\Facades\Response;
use App\Services\PdfMaker\Design as PdfMakerDesign;
class PreviewController extends BaseController class PreviewController extends BaseController
{ {
@ -149,65 +153,81 @@ class PreviewController extends BaseController
return $this->blankEntity(); return $this->blankEntity();
} }
public function live() public function live(StoreInvoiceRequest $request)
{ {
if (request()->has('entity') && if(request()->input('entity') == 'invoice'){
request()->has('entity_id') && $repo = new InvoiceRepository();
! empty(request()->input('entity')) && $factory = InvoiceFactory::create(auth()->user()->company()->id, auth()->user()->id);
! empty(request()->input('entity_id')) && }
request()->has('body')) {
$design_object = json_decode(json_encode(request()->input('design')));
if (! is_object($design_object)) { DB::connection(config('database.default'))->beginTransaction();
return response()->json(['message' => ctrans('texts.invalid_design_object')], 400);
}
$entity = ucfirst(request()->input('entity')); $entity = ucfirst(request()->input('entity'));
$class = "App\Models\\$entity"; $class = "App\Models\\$entity";
$pdf_class = "App\Jobs\\$entity\\Create{$entity}Pdf";
$entity_obj = $class::whereId($this->decodePrimaryKey(request()->input('entity_id')))->company()->first(); $entity_obj = $class::whereId($this->decodePrimaryKey(request()->input('entity_id')))->company()->first();
if (! $entity_obj) { if (! $entity_obj) {
return $this->blankEntity();
$entity_obj = $repo->save(request()->all(), $factory);
} }
$entity_obj->load('client'); $entity_obj->load('client');
App::forgetInstance('translator'); App::forgetInstance('translator');
$t = app('translator'); $t = app('translator');
App::setLocale($entity_obj->client->primary_contact()->preferredLocale()); App::setLocale($entity_obj->client->primary_contact()->first()->preferredLocale());
$t->replace(Ninja::transformTranslations($entity_obj->client->getMergedSettings())); $t->replace(Ninja::transformTranslations($entity_obj->client->getMergedSettings()));
$html = new HtmlEngine($entity_obj->invitations()->first()); $html = new HtmlEngine($entity_obj->invitations()->first());
$design_namespace = 'App\Services\PdfMaker\Designs\\'.request()->design['name']; $design = \App\Models\Design::find($entity_obj->design_id);
$design_class = new $design_namespace(); /* Catch all in case migration doesn't pass back a valid design */
if(!$design)
$design = Design::find(2);
if ($design->is_custom) {
$options = [
'custom_partials' => json_decode(json_encode($design->design), true)
];
$template = new PdfMakerDesign(PdfDesignModel::CUSTOM, $options);
} else {
$template = new PdfMakerDesign(strtolower($design->name));
}
$variables = $html->generateLabelsAndValues();
$state = [ $state = [
'template' => $design_class->elements([ 'template' => $template->elements([
'client' => $entity_obj->client, 'client' => $entity_obj->client,
'entity' => $entity_obj, 'entity' => $entity_obj,
'pdf_variables' => (array) $entity_obj->company->settings->pdf_variables, 'pdf_variables' => (array) $entity_obj->company->settings->pdf_variables,
'products' => request()->design['design']['product'], '$product' => $design->design->product,
'variables' => $variables,
]), ]),
'variables' => $html->generateLabelsAndValues(), 'variables' => $variables,
'options' => [
'all_pages_header' => $entity_obj->client->getSetting('all_pages_header'),
'all_pages_footer' => $entity_obj->client->getSetting('all_pages_footer'),
],
]; ];
$design = new Design(request()->design['name']);
$maker = new PdfMaker($state); $maker = new PdfMaker($state);
$maker $maker
->design($design) ->design($template)
->build(); ->build();
if (request()->query('html') == 'true') { if (request()->query('html') == 'true') {
return $maker->getCompiledHTML; return $maker->getCompiledHTML;
} }
DB::connection(config('database.default'))->rollBack();
//if phantom js...... inject here.. //if phantom js...... inject here..
if (config('ninja.phantomjs_pdf_generation') || config('ninja.pdf_generator') == 'phantom') { if (config('ninja.phantomjs_pdf_generation') || config('ninja.pdf_generator') == 'phantom') {
return (new Phantom)->convertHtmlToPdf($maker->getCompiledHTML(true)); return (new Phantom)->convertHtmlToPdf($maker->getCompiledHTML(true));
@ -221,9 +241,8 @@ class PreviewController extends BaseController
$file_path = PreviewPdf::dispatchNow($maker->getCompiledHTML(true), auth()->user()->company()); $file_path = PreviewPdf::dispatchNow($maker->getCompiledHTML(true), auth()->user()->company());
return response()->download($file_path, basename($file_path), ['Cache-Control:' => 'no-cache'])->deleteFileAfterSend(true); return response()->download($file_path, basename($file_path), ['Cache-Control:' => 'no-cache'])->deleteFileAfterSend(true);
}
return $this->blankEntity();
} }

View File

@ -40,6 +40,7 @@ class ConvertQuote
$invoice->fresh(); $invoice->fresh();
$invoice->service() $invoice->service()
->fillDefaults()
// ->markSent() // ->markSent()
// ->createInvitations() // ->createInvitations()
->save(); ->save();