$company.name {% for entity in invoices %} {% for item in entity.line_items|filter(item => item.type_id == "1") %} {% endfor %} {% endfor %}
Item # Description Ordered Delivered Outstanding
{{ item.product_key }} {{ item.notes }} {{ item.quantity }} {{ item.quantity }} 0
'; private string $nested_body = ' $company.name {% for entity in invoices %} Client Name: {{ entity.client.name }} Client Name with variables = $client.name {% for item in entity.line_items|filter(item => item.type_id == "1") %} {% endfor %} {% endfor %}
Item # Description Ordered Delivered Outstanding
{{ item.product_key }} {{ item.notes }} {{ item.quantity }} {{ item.quantity }} 0
'; protected function setUp() :void { parent::setUp(); $this->makeTestData(); $this->withoutMiddleware( ThrottleRequests::class ); } public function testDoubleEntityNestedDataTemplateServiceBuild() { $design_model = Design::find(2); $replicated_design = $design_model->replicate(); $design = $replicated_design->design; $design->body .= $this->nested_body; $replicated_design->design = $design; $replicated_design->is_custom = true; $replicated_design->save(); $i2 = Invoice::factory() ->for($this->client) ->create([ 'company_id' => $this->company->id, 'user_id' => $this->user->id, 'status_id' => Invoice::STATUS_SENT, 'design_id' => $replicated_design->id, 'balance' => 100, ]); $data = []; $data['invoices'] = collect([$this->invoice, $i2]); $ts = $replicated_design->service()->build($data); nlog("results = "); nlog($ts->getHtml()); $this->assertNotNull($ts->getHtml()); } public function testDoubleEntityTemplateServiceBuild() { $design_model = Design::find(2); $replicated_design = $design_model->replicate(); $design = $replicated_design->design; $design->body .= $this->body; $replicated_design->design = $design; $replicated_design->is_custom = true; $replicated_design->save(); $i2 = Invoice::factory() ->for($this->client) ->create([ 'company_id' => $this->company->id, 'user_id' => $this->user->id, 'status_id' => Invoice::STATUS_SENT, 'design_id' => $replicated_design->id, 'balance' => 100, ]); $data = []; $data['invoices'] = collect([$this->invoice, $i2]); $ts = $replicated_design->service()->build($data); // nlog("results = "); // nlog($ts->getHtml()); $this->assertNotNull($ts->getHtml()); } public function testTemplateServiceBuild() { $design_model = Design::find(2); $replicated_design = $design_model->replicate(); $design = $replicated_design->design; $design->body .= $this->body; $replicated_design->design = $design; $replicated_design->is_custom = true; $replicated_design->save(); $data = []; $data['invoices'] = collect([$this->invoice]); $ts = $replicated_design->service()->build($data); // nlog("results = "); // nlog($ts->getHtml()); $this->assertNotNull($ts->getHtml()); } public function testTemplateService() { $design_model = Design::find(2); $replicated_design = $design_model->replicate(); $design = $replicated_design->design; $design->body .= $this->body; $replicated_design->design = $design; $replicated_design->is_custom = true; $replicated_design->save(); $this->assertNotNull($replicated_design->service()); $this->assertInstanceOf(TemplateService::class, $replicated_design->service()); } public function testTimingOnCleanDesign() { $design_model = Design::find(2); $replicated_design = $design_model->replicate(); $design = $replicated_design->design; $design->body .= $this->body; $replicated_design->design = $design; $replicated_design->is_custom = true; $replicated_design->save(); $entity_obj = \App\Models\Invoice::factory()->create([ 'company_id' => $this->company->id, 'user_id' => $this->user->id, 'client_id' => $this->client->id, 'status_id' => Invoice::STATUS_SENT, 'design_id' => $replicated_design->id, ]); $i = \App\Models\InvoiceInvitation::factory()->create([ 'company_id' => $this->company->id, 'user_id' => $this->user->id, 'invoice_id' => $entity_obj->id, 'client_contact_id' => $this->client->contacts->first()->id, ]); $start = microtime(true); $pdf = (new CreateEntityPdf($i))->handle(); $end = microtime(true); $this->assertNotNull($pdf); nlog("Twig + PDF Gen Time: " . $end-$start); } public function testStaticPdfGeneration() { $start = microtime(true); $pdf = (new CreateEntityPdf($this->invoice->invitations->first()))->handle(); $end = microtime(true); $this->assertNotNull($pdf); nlog("Plain PDF Gen Time: " . $end-$start); } public function testTemplateGeneration() { $entity_obj = $this->invoice; $design = new Design(); $design->design = json_decode(json_encode($this->invoice->company->settings->pdf_variables), true); $design->name = 'test'; $design->is_active = true; $design->is_template = true; $design->is_custom = true; $design->user_id = $this->invoice->user_id; $design->company_id = $this->invoice->company_id; $design_object = new \stdClass; $design_object->includes = ''; $design_object->header = ''; $design_object->body = $this->body; $design_object->product = ''; $design_object->task = ''; $design_object->footer = ''; $design->design = $design_object; $design->save(); $start = microtime(true); App::forgetInstance('translator'); $t = app('translator'); App::setLocale($entity_obj->client->locale()); $t->replace(Ninja::transformTranslations($entity_obj->client->getMergedSettings())); $html = new HtmlEngine($entity_obj->invitations()->first()); $options = [ 'custom_partials' => json_decode(json_encode($design->design), true), ]; $template = new PdfMakerDesign(PdfDesignModel::CUSTOM, $options); $variables = $html->generateLabelsAndValues(); $state = [ 'template' => $template->elements([ 'client' => $entity_obj->client, 'entity' => $entity_obj, 'pdf_variables' => (array) $entity_obj->company->settings->pdf_variables, '$product' => $design->design->product, 'variables' => $variables, ]), 'variables' => $variables, 'options' => [ 'all_pages_header' => $entity_obj->client->getSetting('all_pages_header'), 'all_pages_footer' => $entity_obj->client->getSetting('all_pages_footer'), 'client' => $entity_obj->client, 'entity' => $entity_obj, 'variables' => $variables, ], 'process_markdown' => $entity_obj->client->company->markdown_enabled, ]; $maker = new PdfMaker($state); $maker ->design($template) ->build(); $html = $maker->getCompiledHTML(true); $end = microtime(true); $this->assertNotNull($html); $this->assertStringContainsStringIgnoringCase($this->company->settings->name, $html); nlog("Twig Solo Gen Time: ". $end - $start); } }