Working on template service

This commit is contained in:
David Bomba 2023-09-22 22:08:57 +10:00
parent ad41e6dc93
commit c83e94d3af
3 changed files with 124 additions and 30 deletions

View File

@ -11,6 +11,7 @@
namespace App\Models; namespace App\Models;
use App\Services\Template\TemplateService;
use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\SoftDeletes;
/** /**
@ -75,4 +76,9 @@ class Design extends BaseModel
{ {
return $this->belongsTo(Company::class); return $this->belongsTo(Company::class);
} }
public function service(): TemplateService
{
return new TemplateService($this);
}
} }

View File

@ -12,7 +12,9 @@
namespace App\Services\Template; namespace App\Services\Template;
use App\Models\Design; use App\Models\Design;
use App\Utils\VendorHtmlEngine;
use App\Utils\PaymentHtmlEngine;
use Illuminate\Database\Eloquent\Collection;
class TemplateService class TemplateService
{ {
@ -21,6 +23,30 @@ class TemplateService
private string $compiled_html = ''; private string $compiled_html = '';
private array $standard_excludes = [
'id',
'client_id',
'assigned_user_id',
'project_id',
'vendor_id',
'design_id',
'company_id',
'recurring_id',
'subscription_id'
];
private array $purchase_excludes = [
'id',
'vendor_id',
'assigned_user_id',
'project_id',
'vendor_id',
'design_id',
'company_id',
'recurring_id',
'subscription_id'
];
public function __construct(public Design $template) public function __construct(public Design $template)
{ {
$this->template = $template; $this->template = $template;
@ -51,7 +77,7 @@ class TemplateService
{ {
$this->compose() $this->compose()
->parseNinjaBlocks($data) ->parseNinjaBlocks($data)
->parseVariables(); ->parseVariables($data);
return $this; return $this;
} }
@ -112,8 +138,10 @@ class TemplateService
{ {
$variables = $this->resolveHtmlEngine(); $variables = $this->resolveHtmlEngine();
$html = strtr($this->getHtml(), $variables['labels']); foreach($variables as $key => $variable) {
$html = strtr($html, $variables['values']); $html = strtr($this->getHtml(), $variable['labels']);
$html = strtr($html, $variable['values']);
}
@$this->document->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8')); @$this->document->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'));
$this->save(); $this->save();
@ -158,8 +186,25 @@ class TemplateService
* *
* @return array * @return array
*/ */
private function resolveHtmlEngine(): array private function resolveHtmlEngine(array $data): array
{ {
return collect($data)->map(function ($key, $value) {
$processed[$key] = [];
match ($key) {
'invoices' => $processed[$key] = (new HtmlEngine($value->first()->invitations()->first()))->generateLabelsAndValues(),
'quotes' => $processed[$key] = (new HtmlEngine($value->first()->invitations()->first()))->generateLabelsAndValues(),
'credits' => $processed[$key] = (new HtmlEngine($value->first()->invitations()->first()))->generateLabelsAndValues(),
'payments' => $processed[$key] = (new PaymentHtmlEngine($value->first(), $value->first()->client->contacts()->first()))->generateLabelsAndValues(),
'tasks' => $processed[$key] = [],
'projects' => $processed[$key] = [],
'purchase_orders' => $processed[$key] = (new VendorHtmlEngine($value->first()->invitations()->first()))->generateLabelsAndValues(),
};
return $processed;
})->toArray();
} }
@ -184,52 +229,78 @@ class TemplateService
})->toArray(); })->toArray();
} }
private function processInvoices($invoices): array private function processInvoices($invoices): Collection
{ {
return $invoices->map(function ($invoice){ return $invoices->makeHidden($this->standard_excludes);
})->toArray();
} }
private function processQuotes($quotes): array private function processQuotes($quotes): Collection
{ {
return $quotes->map(function ($quote){ return $quotes->makeHidden($this->standard_excludes);
// return $quotes->map(function ($quote){
})->toArray(); // })->toArray();
} }
private function processCredits($credits): array private function processCredits($credits): Collection
{ {
return $credits->map(function ($credit){ return $credits->makeHidden($this->standard_excludes);
// return $credits->map(function ($credit){
})->toArray(); // })->toArray();
} }
private function processPayments($payments): array private function processPayments($payments): Collection
{ {
return $payments->map(function ($payment){ return $payments->makeHidden([
'id',
})->toArray(); 'user_id',
'assigned_user_id',
'client_id',
'company_id',
'project_id',
'vendor_id',
'client_contact_id',
'invitation_id',
'company_gateway_id',
'transaction_id',
]);
// return $payments->map(function ($payment){
// })->toArray();
} }
private function processTasks($tasks): array private function processTasks($tasks): Collection
{ {
return $tasks->map(function ($task){ return $task->makeHidden([
'id',
})->toArray(); 'user_id',
'assigned_user_id',
'client_id',
'company_id',
'project_id',
'invoice_id'
]);
// return $tasks->map(function ($task){
// })->toArray();
} }
private function processProjects($projects): array private function processProjects($projects): Collection
{ {
return $projects->map(function ($project){ return $projects->makeHidden([
'id',
'client_id',
'company_id',
'user_id',
'assigned_user_id',
]);
})->toArray(); // return $projects->map(function ($project){
// })->toArray();
} }
private function processPurchaseOrders($purchase_orders): array private function processPurchaseOrders($purchase_orders): array
{ {
return $purchase_orders->map(function ($purchase_order){ return $projects->makeHidden($this->purchase_excludes);
})->toArray(); // return $purchase_orders->map(function ($purchase_order){
// })->toArray();
} }
} }

View File

@ -23,6 +23,7 @@ use App\Jobs\Entity\CreateEntityPdf;
use App\Services\PdfMaker\Design as DesignMaker; use App\Services\PdfMaker\Design as DesignMaker;
use App\Services\PdfMaker\Design as PdfDesignModel; use App\Services\PdfMaker\Design as PdfDesignModel;
use App\Services\PdfMaker\Design as PdfMakerDesign; use App\Services\PdfMaker\Design as PdfMakerDesign;
use App\Services\Template\TemplateService;
use Illuminate\Routing\Middleware\ThrottleRequests; use Illuminate\Routing\Middleware\ThrottleRequests;
use Illuminate\Foundation\Testing\DatabaseTransactions; use Illuminate\Foundation\Testing\DatabaseTransactions;
@ -77,6 +78,22 @@ class TemplateTest extends TestCase
} }
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() public function testTimingOnCleanDesign()
{ {
$design_model = Design::find(2); $design_model = Design::find(2);