diff --git a/app/Services/Template/TemplateService.php b/app/Services/Template/TemplateService.php index 1fac26132e13..7640713dde94 100644 --- a/app/Services/Template/TemplateService.php +++ b/app/Services/Template/TemplateService.php @@ -11,11 +11,27 @@ namespace App\Services\Template; +use App\Models\Task; +use App\Models\Quote; +use App\Models\Credit; use App\Models\Design; +use App\Models\Invoice; +use App\Models\Payment; +use App\Models\Project; use App\Utils\HtmlEngine; +use League\Fractal\Manager; +use App\Models\PurchaseOrder; use App\Utils\VendorHtmlEngine; use App\Utils\PaymentHtmlEngine; use Illuminate\Support\Collection; +use App\Transformers\TaskTransformer; +use App\Transformers\QuoteTransformer; +use App\Transformers\CreditTransformer; +use App\Transformers\InvoiceTransformer; +use App\Transformers\PaymentTransformer; +use App\Transformers\ProjectTransformer; +use App\Transformers\PurchaseOrderTransformer; +use League\Fractal\Serializer\ArraySerializer; class TemplateService { @@ -232,80 +248,81 @@ nlog($data); })->toArray(); } - private function processInvoices($invoices): Collection + private function processInvoices($invoices): array { - return $invoices->map(function($invoice){ - return $invoice->makeHidden($this->standard_excludes); - }); + $it = new InvoiceTransformer(); + $it->setDefaultIncludes(['client']); + $manager = new Manager(); + $resource = new \League\Fractal\Resource\Collection($invoices, $it, Invoice::class); + $i = $manager->createData($resource)->toArray(); + return $i['data']; } private function processQuotes($quotes): Collection { - return $quotes->makeHidden($this->standard_excludes); - // return $quotes->map(function ($quote){ - // })->toArray(); + $it = new QuoteTransformer(); + $it->setDefaultIncludes(['client']); + $manager = new Manager(); + $resource = new \League\Fractal\Resource\Collection($quotes, $it, Quote::class); + $i = $manager->createData($resource)->toArray(); + return $i['data']; + } private function processCredits($credits): Collection { - return $credits->makeHidden($this->standard_excludes); - // return $credits->map(function ($credit){ - // })->toArray(); + $it = new CreditTransformer(); + $it->setDefaultIncludes(['client']); + $manager = new Manager(); + $resource = new \League\Fractal\Resource\Collection($credits, $it, Credit::class); + $i = $manager->createData($resource)->toArray(); + return $i['data']; + } private function processPayments($payments): Collection { - return $payments->makeHidden([ - 'id', - '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(); + $it = new PaymentTransformer(); + $it->setDefaultIncludes(['client','invoices','paymentables']); + $manager = new Manager(); + $resource = new \League\Fractal\Resource\Collection($payments, $it, Payment::class); + $i = $manager->createData($resource)->toArray(); + return $i['data']; + } private function processTasks($tasks): Collection { - return $tasks->makeHidden([ - 'id', - 'user_id', - 'assigned_user_id', - 'client_id', - 'company_id', - 'project_id', - 'invoice_id' - ]); - // return $tasks->map(function ($task){ - // })->toArray(); + $it = new TaskTransformer(); + $it->setDefaultIncludes(['client','tasks','project','invoice']); + $manager = new Manager(); + $resource = new \League\Fractal\Resource\Collection($tasks, $it, Task::class); + $i = $manager->createData($resource)->toArray(); + return $i['data']; + } private function processProjects($projects): Collection { - return $projects->makeHidden([ - 'id', - 'client_id', - 'company_id', - 'user_id', - 'assigned_user_id', - ]); - // return $projects->map(function ($project){ - // })->toArray(); + $it = new ProjectTransformer(); + $it->setDefaultIncludes(['client','tasks']); + $manager = new Manager(); + $resource = new \League\Fractal\Resource\Collection($projects, $it, Project::class); + $i = $manager->createData($resource)->toArray(); + return $i['data']; + } private function processPurchaseOrders($purchase_orders): array { - return $purchase_orders->makeHidden($this->purchase_excludes); + + $it = new PurchaseOrderTransformer(); + $it->setDefaultIncludes(['vendor','expense']); + $manager = new Manager(); + $resource = new \League\Fractal\Resource\Collection($purchase_orders, $it, PurchaseOrder::class); + $i = $manager->createData($resource)->toArray(); + return $i['data']; - // return $purchase_orders->map(function ($purchase_order){ - // })->toArray(); } } \ No newline at end of file diff --git a/tests/Feature/Template/TemplateTest.php b/tests/Feature/Template/TemplateTest.php index b2dc89d61540..dbd4e6bd02fa 100644 --- a/tests/Feature/Template/TemplateTest.php +++ b/tests/Feature/Template/TemplateTest.php @@ -79,6 +79,37 @@ class TemplateTest extends TestCase } + 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); @@ -95,7 +126,8 @@ class TemplateTest extends TestCase $ts = $replicated_design->service()->build($data); - nlog($ts->getHtml()); + // nlog("results = "); + // nlog($ts->getHtml()); $this->assertNotNull($ts->getHtml()); } @@ -150,10 +182,8 @@ class TemplateTest extends TestCase nlog("Twig + PDF Gen Time: " . $end-$start); - } - public function testStaticPdfGeneration() { $start = microtime(true);