Commit cfd0102d authored by Julien Ait azzouzene's avatar Julien Ait azzouzene
Browse files

feat: generate basic security sheet (no style)

parent e15bc28e
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
<?php

namespace App\Http\Controllers\SecuritySheets;

class PreviewStrategy implements SecuritySheetStrategy{
    public function generatePdf($html, $ds_code){
        return $html;
    }
}
 No newline at end of file
+63 −0
Original line number Diff line number Diff line
<?php

declare(strict_types=1);

namespace App\Http\Controllers\SecuritySheets;

use App\Models\User;
use Illuminate\Http\Request;
use App\Models\DivingSession;
use App\Models\DivingLocation;
use App\Http\Controllers\Controller;
use App\Http\Controllers\SecuritySheets\StoreSilentStrategy;

class SecuritySheetController extends Controller
{
    private SecuritySheetStrategy $strategy;

    public function __construct(){
        $this->strategy = new StoreSilentStrategy;
    }

    public function generate(string $ds_code){
        $html =  self::callPdfBuilderView($ds_code);
        return $this->strategy->generatePdf($html, $ds_code);
    }

    public function show(string $ds_code){
       
    }

    public function setStrategy(SecuritySheetStrategy $strategy){
        $this->strategy = $strategy;
        return $this;
    }

    private function callPdfBuilderView(string $ds_code){
        $dive = DivingSession::find($ds_code);

        $director = User::find($dive->US_ID_CAR_DIRECT);
        $surfaceSecurity = User::find($dive->US_ID_CAR_SECURE);

        $location = DivingLocation::find($dive->DL_ID);

        $divingGroups = $dive->getDivingGroups();

        $divingGroupsForView = [];

        foreach($divingGroups as $divingGroup){
            $divingGroupsForView[] = [
                'group' => $divingGroup,
                'divers' => $divingGroup->getDivers()
            ];
        }

        return view('securitySheet.pdf', [
            'dive' => $dive,
            'director' => $director,
            'surfaceSecurity' => $surfaceSecurity,
            'location' => $location,
            'divingGroups' => $divingGroupsForView
        ]);
    }
}
+7 −0
Original line number Diff line number Diff line
<?php

namespace App\Http\Controllers\SecuritySheets;

interface SecuritySheetStrategy{
    public function generatePdf($html, $ds_code);
}
 No newline at end of file
+21 −0
Original line number Diff line number Diff line
<?php

namespace App\Http\Controllers\SecuritySheets;

use Spipu\Html2Pdf\Html2Pdf;

class StoreSilentStrategy implements SecuritySheetStrategy{
    public function generatePdf($html, $ds_code){
        $html2pdf = new Html2Pdf();

        $html2pdf->writeHTML($html);

        $path = defined('PUBLIC_PATH') ? PUBLIC_PATH : '../www-dev/';
        
        $fileName = 'security-sheets/fiche-securite-' . $ds_code . '.pdf';

        $html2pdf->output(__DIR__ . '/../../../../' . $path . $fileName, 'F');
        
        return 'OK';
    }
}
 No newline at end of file
+2 −1
Original line number Diff line number Diff line
@@ -6,12 +6,13 @@
    "license": "MIT",
    "require": {
        "php": "^7.4",
        "ext-pdo": "*",
        "fruitcake/laravel-cors": "^2.0",
        "guzzlehttp/guzzle": "^7.0.1",
        "laravel/framework": "^8.75",
        "laravel/sanctum": "^2.11",
        "laravel/tinker": "^2.5",
        "ext-pdo": "*"
        "spipu/html2pdf": "^5.2.8"
    },
    "require-dev": {
        "facade/ignition": "^2.5",
Loading