Application de gestion d'un restaurant ب laravel الجزء السابع

فهاد الجزء السابع من Application de gestion d'un restaurant ب laravel غادي ندوزوا نشوفوا كيفاش نقادو les rapports ونعرضهم ف fichier excel قبل غادي ن installer واحد ل package سميتو laravel excel.

1

نظرة سريعة بالفيديو


1- إضافة الملف SalesExport


كيف قلنا أول حاجة installer laravel excel بل commande :

composer require maatwebsite/excel

من بعد غادي تدير هاد ل commande :

php artisan make:export UsersExport --model=User

من بعد غادي تمشي ل dossier http غادي تلقى dossier exports تزاد فيه fichier SalesExport فتحو وزيد فيه هاد الكود لي فيه المعلومات على les ventes الثمن الإجمالي والكمية إلخ...

الكود ديال الملف هو :

                                    
                                        <?php

namespace App\Exports;

use App\Sales;
use Illuminate\Contracts\View\View;
use Maatwebsite\Excel\Concerns\FromView;

class SalesExport implements FromView
{
    private $from;
    private $to;
    private $sales;
    private $total;

    public function __construct($from, $to)
    {
        $this->from = $from;
        $this->to = $to;
        $this->sales = Sales::whereBetween("created_at", [$from, $to])
            ->where("payment_status", "paid")->get();
        $this->total = $this->sales->sum("total_received");
    }
    /**
     * @return \Illuminate\Support\Collection
     */
    public function view(): View
    {
        return view('reports.export', [
            'total' => $this->total,
            'sales' => $this->sales,
            'to' => $this->to,
            'from' => $this->from,
        ]);
    }
}
                                    
                                

2- إضافة ReportController


منبعد زيد controller سميه ReportController لي فيه غادي تكون fonction index كتعرض ملف لي غادي نزيدوه من بعد فيه كنعرض التقرير قبل من صيفطو ل excel ثم fonction generate لي كنسترجع بها المبيعات الخاصة بواحد التاريخ معين ول fonction export لي كتصيفط المعلومات ل excel.

الكود ديال الملف هو :

                                    
                                        <?php

namespace App\Http\Controllers;

use App\Exports\SalesExport;
use App\Sales;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;

class ReportController extends Controller
{
    //
    public function __construct()
    {
        $this->middleware("auth");
    }

    public function index()
    {
        return view("reports.index");
    }

    public function generate(Request $request)
    {
        //validation
        $this->validate($request, [
            "from" => "required",
            "to" => "required"
        ]);
        //get data
        $startDate = date("Y-m-d H:i:s", strtotime($request->from . "00:00:00"));
        $endDate = date("Y-m-d H:i:s", strtotime($request->to . "23:59:59"));
        $sales = Sales::whereBetween("created_at", [$startDate, $endDate])
            ->where("payment_status", "paid")->get();
        //return data
        return view("reports.index")->with([
            "startDate" => $startDate,
            "endDate" => $endDate,
            "total" => $sales->sum('total_received'),
            "sales" => $sales
        ]);
    }

    public function export(Request $request)
    {
        return Excel::download(new SalesExport($request->from, $request->to), "sales.xlsx");
    }
}
                                    
                                

3- عرض التقرير


ف dossier views زيد dossier reports فيه زيد fichier index.blade.php هنا غادي نعرضوا les rapports ديالنا قبل ما نصيفطوهم ل excel عن طريق فورم لي كتمكن من عرض التقارير ديال المبيعات من تاريخ بداية لتاريخ نهاية.

الكود ديال الملف هو :

                                      
                                        @extends('layouts.app')


@section("content")
    <div class="container">
        <div class="row justify-content-center">
            <div class="col-md-12">
                <div class="card">
                    <div class="card-body">
                        <div class="row">
                            <div class="col-md-12">
                                <div class="d-flex flex-row justify-content-between align-items-center border-bottom pb-1">
                                    <h3 class="text-secondary">
                                        <i class="fas fa-bars"></i> Rapports
                                    </h3>
                                    <a href="{{ route("home") }}" class="btn btn-outline-secondary">
                                        <i class="fa fa-chevron-left fa-x2"></i>
                                    </a>
                                </div>
                                <div class="card">
                                    <div class="card-body">
                                        <div class="row">
                                            <div class="col-sm-3 shadow mx-auto p-2">
                                                <form action="{{ route("reports.generate") }}" method="post">
                                                    @csrf
                                                    <div class="form-group">
                                                        <input type="date" name="from" placeholder="Date Début" class="form-control">
                                                    </div>
                                                    <div class="form-group">
                                                        <input type="date" name="to" placeholder="Date Fin" class="form-control">
                                                    </div>
                                                    <div class="form-group">
                                                        <button class="btn btn-primary">
                                                            Afficher le rapport
                                                        </button>
                                                    </div>
                                                </form>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                                @isset($total)
                                    <h4 class="text-primary mt-4 mb-2 font-weight-bold">
                                        Rapport de {{ $startDate  }} à {{ $endDate }}
                                    </h4>
                                    <table class="table table-hover table-responsive-sm">
                                        <thead>
                                            <tr>
                                                <th>Id</th>
                                                <th>Menus</th>
                                                <th>Tables</th>
                                                <th>Sérveur</th>
                                                <th>Quantité</th>
                                                <th>Total</th>
                                                <th>Type de paiement</th>
                                                <th>Etat de paiement</th>
                                            </tr>
                                        </thead>
                                        <tbody>
                                            @foreach ($sales as $sale)
                                                <tr>
                                                    <td>
                                                        {{ $sale->id }}
                                                    </td>
                                                    <td>
                                                        @foreach($sale->menus()->where("sales_id",$sale->id)->get() as $menu)
                                                            <div class="col-md-4 mb-2">
                                                                <div class="h-100">
                                                                    <div class="d-flex
                                                                    flex-column justify-content-center
                                                                    align-items-center">
                                                                        <h5 class="font-weight-bold mt-2">
                                                                            {{ $menu->title }}
                                                                        </h5>
                                                                        <h5 class="text-muted">
                                                                            {{ $menu->price }} DH
                                                                        </h5>
                                                                    </div>
                                                                </div>
                                                            </div>
                                                        @endforeach
                                                    </td>
                                                    <td>
                                                        @foreach($sale->tables()->where("sales_id",$sale->id)->get() as $table)
                                                            <div class="col-md-4 mb-2">
                                                                <div class="h-100">
                                                                    <div class="d-flex
                                                                    flex-column justify-content-center
                                                                    align-items-center">
                                                                        <i class="fa fa-chair fa-3x"></i>
                                                                        <h5 class="text-muted mt-2">
                                                                            {{ $table->name }}
                                                                        </h5>
                                                                    </div>
                                                                </div>
                                                            </div>
                                                        @endforeach
                                                    </td>
                                                    <td>
                                                        {{ $sale->servant->name}}
                                                    </td>
                                                    <td>
                                                        {{ $sale->quantity}}
                                                    </td>
                                                    <td>
                                                        {{ $sale->total_received}}
                                                    </td>
                                                    <td>
                                                        {{ $sale->payment_type === "cash" ? "Espéce" : "Carte bancaire"}}
                                                    </td>
                                                    <td>
                                                        {{ $sale->payment_status === "paid" ? "Payé" : "Impayé"}}
                                                    </td>
                                                </tr>
                                            @endforeach
                                        </tbody>
                                    </table>
                                    <p class="text-danger text-center font-weight-bold">
                                        <span class="border border-danger p-2">
                                            Total : {{ $total }} DH
                                        </span>
                                    </p>
                                    <form action="{{ route("reports.export") }}" method="post">
                                        @csrf
                                        <div class="form-group">
                                            <input type="hidden" name="from" value="{{ $startDate }}" class="form-control">
                                        </div>
                                        <div class="form-group">
                                            <input type="hidden" name="to" value="{{ $endDate }}" class="form-control">
                                        </div>
                                        <div class="form-group">
                                            <button class="btn btn-danger">
                                                Génerer le rapport excel
                                            </button>
                                        </div>
                                    </form>
                                @endisset
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
@endsection
                                      
                                    

4- عرض التقرير ف excel


ف dossier reports زيد fichier export.blade.php هنا غادي نعرضوا rapport ديال المبيعات لي غادي يتعرض ف excel.

الكود ديال الملف هو :

                                        
                                            <table>
    <thead>
        <tr>
            <th>Id</th>
            <th>Menus</th>
            <th>Tables</th>
            <th>Sérveur</th>
            <th>Quantité</th>
            <th>Total</th>
            <th>Type de paiement</th>
            <th>Etat de paiement</th>
        </tr>
    </thead>
    <tbody>
        @foreach ($sales as $sale)
            <tr>
                <td>
                    {{ $sale->id }}
                </td>
                <td>
                    @foreach($sale->menus()->where("sales_id",$sale->id)->get() as $menu)
                        <h5>
                            {{ $menu->title }}
                        </h5>
                        <h5>
                            {{ $menu->price }} DH
                        </h5>
                    @endforeach
                </td>
                <td>
                    @foreach($sale->tables()->where("sales_id",$sale->id)->get() as $table)
                        <h5>
                            {{ $table->name }}
                        </h5>
                    @endforeach
                </td>
                <td>
                    {{ $sale->servant->name}}
                </td>
                <td>
                    {{ $sale->quantity}}
                </td>
                <td>
                    {{ $sale->total_received}}
                </td>
                <td>
                    {{ $sale->payment_type === "cash" ? "Espéce" : "Carte bancaire"}}
                </td>
                <td>
                    {{ $sale->payment_status === "paid" ? "Payé" : "Impayé"}}
                </td>
            </tr>
        @endforeach
        <tr>
            <td colspan="5">
                Rapport de {{ $from }} à {{ $to }}
            </td>
            <td>
                {{ $total }} dh
            </td>
        </tr>
    </tbody>
</table>
                                        
                                    

5- إضافة الصفحة الرئيسية


فل fichier home.blade.php غادي نديرو تعديل لي غادي يمكن من عرض ل menu لي غادي تمكن باش نتنقلوا ما بين الصفحات ديالنا.

الكود ديال الملف بعد التعديل هو :

                                        
                                            @extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-body">
                    <div class="row">
                        <div class="col-sm-4 d-flex flex-column align-items-center justify-content-center">
                            <i class="fa fa-cog fa-5x text-danger"></i>
                            <a href="/categories" class="font-weight-bold btn btn-link">
                                Gérer
                            </a>
                        </div>
                        <div class="col-sm-4 d-flex flex-column align-items-center justify-content-center">
                            <i class="fa fa-shopping-bag fa-5x text-primary"></i>
                            <a href="/payments" class="font-weight-bold btn btn-link">
                                Ventes
                            </a>
                        </div>
                        <div class="col-sm-4 d-flex flex-column align-items-center justify-content-center">
                            <i class="fa fa-clipboard-list fa-5x text-success"></i>
                            <a href="/reports" class="font-weight-bold btn btn-link">
                                Rapports
                            </a>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection
                                        
                                    

كلمات مفاتيح :