feat(Artemis/Dashboard): Affiche les devis du client sur le dashboard

Ajoute l'affichage des devis du client connecté sur le dashboard,
avec leur référence, date, montant et statut. Modifie le template pour
un affichage plus clair.
This commit is contained in:
Serreau Jovann
2025-10-10 09:49:31 +02:00
parent d84029911e
commit 31d9c7800d
3 changed files with 43 additions and 44 deletions

View File

@@ -4,6 +4,7 @@ namespace App\Controller\Artemis;
use App\Entity\CustomerAdvertPayment;
use App\Repository\CustomerAdvertPaymentRepository;
use App\Repository\CustomerDevisRepository;
use App\Repository\CustomerOrderRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
@@ -14,10 +15,15 @@ use Symfony\Component\Routing\Attribute\Route;
class DashboardController extends AbstractController
{
#[Route('/artemis', name: 'artemis_dashboard', methods: ['GET', 'POST'])]
public function artemis(Request $request,CustomerOrderRepository $customerOrderRepository,CustomerAdvertPaymentRepository $customerAdvertPaymentRepository): Response
public function artemis(Request $request,
CustomerOrderRepository $customerOrderRepository,
CustomerAdvertPaymentRepository $customerAdvertPaymentRepository,
CustomerDevisRepository $customerDevisRepository
): Response
{
$invoiceList = [];
$advertList = [];
$devisList = [];
$remaining_amount = 0;
if(in_array("ROLE_CUSTOMER",$this->getUser()->getRoles())) {
$customer = $this->getUser()->getCustomers()[0];
@@ -48,11 +54,24 @@ class DashboardController extends AbstractController
'status' => $order->getState(),
];
}
foreach ($customerDevisRepository->findBy(['customer'=>$customer]) as $order) {
$amount = 0;
foreach ($order->getCustomerDevisLines() as $customerOrderLine) {
$amount += (1.*20*$customerOrderLine->getPriceHt());
}
$devisList[] = [
'reference' => $order->getNumDevis(),
'date' => $order->getCreateAt()->format('Y-m-d'),
'amount' => $amount,
'status' => $order->getState(),
];
}
}
return $this->render('artemis/dashboard.twig',[
'invoiceList' => $invoiceList,
'advertList' => $advertList,
'devisList' => $devisList,
'remaining_amount' => $remaining_amount,
]);
}

View File

@@ -142,49 +142,27 @@
</div>
</div>
{# COLONNE DROITE (2/3) : Liste des Derniers Documents #}
<div class="lg:w-2/3">
{# COLONNE DROITE (2/3) : Liste des Documents EMPILÉE #}
<div class="lg:w-2/3 flex flex-col gap-6">
{# 1. Section : Factures #}
<div class="bg-white dark:bg-gray-800 rounded-xl shadow-xl p-6">
<div class="text-xl font-semibold text-gray-700 dark:text-gray-200 border-b border-gray-200 dark:border-gray-700 pb-3 mb-4">Derniers Documents</div>
{# Onglets de Navigation (Adapté au Dark Mode) #}
<div class="border-b border-gray-200 dark:border-gray-700">
<nav class="-mb-px flex space-x-8" id="documentTabs" role="tablist">
{% set tab_class = "tab-link border-b-2 border-transparent py-2 px-1 text-sm font-medium text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 hover:border-gray-300 dark:hover:border-gray-500 cursor-pointer transition duration-150" %}
{% set active_class = "border-indigo-500 dark:border-indigo-400 text-indigo-600 dark:text-indigo-400" %}
<a id="invoices-tab" data-target="#invoices" role="tab" aria-controls="invoices" aria-selected="true"
class="{{ tab_class }}">
Factures ({{ invoiceList|length }})
</a>
<a id="notices-tab" data-target="#notices" role="tab" aria-controls="notices" aria-selected="false"
class="{{ tab_class }}">
Avis de Paiement ({{ advertList|length }})
</a>
<a id="quotes-tab" data-target="#quotes" role="tab" aria-controls="quotes" aria-selected="false"
class="{{ tab_class }}">
Devis ({{ static_quotes|length }})
</a>
</nav>
</div>
<div id="documentTabsContent" class="mt-4">
{# Inclusions du fichier artemis/dashboard/customer_doc_list.twig #}
<div id="invoices" role="tabpanel" aria-labelledby="invoices-tab" class="tab-pane-tailwind block">
{% include 'artemis/dashboard/customer_doc_list.twig' with {'documents': invoiceList, 'type': 'facture'} %}
</div>
<div id="notices" role="tabpanel" aria-labelledby="notices-tab" class="tab-pane-tailwind hidden">
{% include 'artemis/dashboard/customer_doc_list.twig' with {'documents': advertList, 'type': 'avis de paiement'} %}
</div>
<div id="quotes" role="tabpanel" aria-labelledby="quotes-tab" class="tab-pane-tailwind hidden">
{% include 'artemis/dashboard/customer_doc_list.twig' with {'documents': static_quotes, 'type': 'devis'} %}
</div>
</div>
<div class="text-xl font-semibold text-gray-700 dark:text-gray-200 border-b border-gray-200 dark:border-gray-700 pb-3 mb-4">Dernières Factures</div>
{% include 'artemis/dashboard/customer_doc_list.twig' with {'documents': invoiceList, 'type': 'facture'} %}
</div>
{# 2. Section : Avis de Paiement #}
<div class="bg-white dark:bg-gray-800 rounded-xl shadow-xl p-6">
<div class="text-xl font-semibold text-gray-700 dark:text-gray-200 border-b border-gray-200 dark:border-gray-700 pb-3 mb-4">Avis de Paiement</div>
{% include 'artemis/dashboard/customer_doc_list.twig' with {'documents': advertList, 'type': 'avis de paiement'} %}
</div>
{# 3. Section : Devis #}
<div class="bg-white dark:bg-gray-800 rounded-xl shadow-xl p-6">
<div class="text-xl font-semibold text-gray-700 dark:text-gray-200 border-b border-gray-200 dark:border-gray-700 pb-3 mb-4">Devis</div>
{% include 'artemis/dashboard/customer_doc_list.twig' with {'documents': devisList, 'type': 'devis'} %}
</div>
</div>
</div>

View File

@@ -23,10 +23,12 @@
<td class="px-6 py-4 whitespace-nowrap text-sm">
{# Logique pour les badges de statut (Couleurs ajustées pour le Dark Mode) #}
{% set badge_class = 'bg-blue-600 text-blue-100' %}
{% if document.status == 'Payé' or document.status == 'Validé' or document.status == 'Accepté' %}
{% if document.status == 'accepted' or document.status == "pay" or document.status == "f-send" %}
{% set badge_class = 'bg-green-600 text-green-100' %}
{% elseif document.status == 'En attente' or document.status == 'En cours' %}
{% elseif document.status == 'send_avis' %}
{% set badge_class = 'bg-yellow-600 text-yellow-100' %}
{% elseif document.status == 'cancel' %}
{% set badge_class = 'bg-red-600 text-yellow-100' %}
{% endif %}
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full {{ badge_class }}">
{{ ('dc_'~document.status)|trans }}