diff --git a/src/app/components/deliverer-form/deliverer-form.css b/src/app/components/deliverer-form/deliverer-form.css new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/deliverer-form/deliverer-form.html b/src/app/components/deliverer-form/deliverer-form.html new file mode 100644 index 0000000..52d1834 --- /dev/null +++ b/src/app/components/deliverer-form/deliverer-form.html @@ -0,0 +1,11 @@ +
+ + + Transporteur + + + + + + +
\ No newline at end of file diff --git a/src/app/components/deliverer-form/deliverer-form.ts b/src/app/components/deliverer-form/deliverer-form.ts new file mode 100644 index 0000000..0125282 --- /dev/null +++ b/src/app/components/deliverer-form/deliverer-form.ts @@ -0,0 +1,38 @@ +import { Component } from '@angular/core'; +import {NzColDirective} from "ng-zorro-antd/grid"; +import {NzFlexDirective} from "ng-zorro-antd/flex"; +import {NzFormControlComponent, NzFormDirective, NzFormItemComponent, NzFormLabelComponent} from "ng-zorro-antd/form"; +import {NzInputDirective} from "ng-zorro-antd/input"; +import {FormControl, FormGroup, ReactiveFormsModule, Validators} from "@angular/forms"; + +@Component({ + selector: 'app-deliverer-form', + imports: [ + NzColDirective, + NzFlexDirective, + NzFormControlComponent, + NzFormDirective, + NzFormItemComponent, + NzFormLabelComponent, + NzInputDirective, + ReactiveFormsModule + ], + templateUrl: './deliverer-form.html', + styleUrl: './deliverer-form.css', +}) +export class DelivererForm { + delivererForm: FormGroup = new FormGroup({ + transporter: new FormControl(null, [Validators.required]) + }) + + submitForm() { + // Pour annuler si le formulaire est invalide + if (this.delivererForm.invalid) return; + + // Pour obtenir la valeur du formulaire + console.log(this.delivererForm.getRawValue()) + + // Pour vider le formulaire + this.delivererForm.reset() + } +} diff --git a/src/app/components/deliverer-table/deliverer-table.css b/src/app/components/deliverer-table/deliverer-table.css new file mode 100644 index 0000000..7ae664f --- /dev/null +++ b/src/app/components/deliverer-table/deliverer-table.css @@ -0,0 +1,85 @@ +/* Table globale */ +nz-table { + width: 100%; + border-collapse: separate; + border-spacing: 0 8px; /* espace entre les lignes */ + background: #fff; + border-radius: 8px; + overflow: hidden; + box-shadow: 0 2px 6px rgba(0,0,0,0.1); + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; +} + +/* En-tête */ +nz-table thead tr { + background-color: #f5f5f5; + text-align: left; + font-weight: 600; + color: #333; + border-bottom: 2px solid #e0e0e0; +} + +nz-table thead th { + padding: 12px 16px; +} + +/* Lignes du tableau */ +nz-table tbody tr { + background-color: #fff; + transition: background 0.2s ease; +} + +nz-table tbody tr:nth-child(even) { + background-color: #f9f9f9; +} + +nz-table tbody tr:hover { + background-color: #e6f7ff; /* survol */ +} + +/* Cellules */ +nz-table tbody td { + padding: 12px 16px; + vertical-align: middle; + color: #444; +} + +/* Boutons */ +nz-table button[nz-button] { + margin-right: 8px; +} + +/* Modals dans le tableau */ +nz-table app-modal { + margin-right: 8px; +} + +/* Dates (pour alignement et style) */ +nz-table tbody td p { + margin: 0; + font-size: 14px; + color: #555; +} + +/* Responsive */ +@media (max-width: 768px) { + nz-table thead { + display: none; + } + nz-table tbody tr { + display: block; + margin-bottom: 16px; + box-shadow: 0 1px 3px rgba(0,0,0,0.1); + border-radius: 8px; + padding: 12px; + } + nz-table tbody td { + display: flex; + justify-content: space-between; + padding: 6px 12px; + } + nz-table tbody td::before { + content: attr(data-label); + font-weight: 600; + } +} diff --git a/src/app/components/deliverer-table/deliverer-table.html b/src/app/components/deliverer-table/deliverer-table.html new file mode 100644 index 0000000..0c3184d --- /dev/null +++ b/src/app/components/deliverer-table/deliverer-table.html @@ -0,0 +1,53 @@ + + + + Transporteur + Bon de livraison + Action + + + + @for (data of basicTable.data; track data) { + + {{data.transporter}} + + +
+ + + + Numéro de livraison + Date d'expédition + Date de livraison estimée + Date de livraison finale + + + + @for (deliveryInfo of data.deliveryNote; track deliveryInfo) { + + {{deliveryInfo.trackingNumber}} + {{deliveryInfo.expeditionDate | date: 'dd/MM/yyyy'}} + {{deliveryInfo.estimateDeliveryDate | date: 'dd/MM/yyyy'}} + {{deliveryInfo.realDeliveryDate | date: 'dd/MM/yyyy'}} + + } + + +
+
+ + +
+ + + + +
+ +
+
+ + + } + +
diff --git a/src/app/components/deliverer-table/deliverer-table.ts b/src/app/components/deliverer-table/deliverer-table.ts new file mode 100644 index 0000000..919c615 --- /dev/null +++ b/src/app/components/deliverer-table/deliverer-table.ts @@ -0,0 +1,300 @@ +import { Component } from '@angular/core'; +import {ProductTable} from "../product-table/product-table"; +import {DelivererInfo} from "../../interfaces/deliverer.interface"; +import {ModalNav} from "../modal-nav/modal-nav"; +import {NzDividerComponent} from "ng-zorro-antd/divider"; +import {NzIconDirective} from "ng-zorro-antd/icon"; +import {NzTableComponent} from "ng-zorro-antd/table"; +import {ProfilForm} from "../profil-form/profil-form"; +import {ModalButton} from "../modal-button/modal-button"; +import {DatePipe} from "@angular/common"; +import {DelivererForm} from "../deliverer-form/deliverer-form"; + +@Component({ + selector: 'app-deliverer-table', + imports: [ + ModalNav, + NzDividerComponent, + NzIconDirective, + NzTableComponent, + ProfilForm, + ModalButton, + DatePipe, + DelivererForm + ], + templateUrl: './deliverer-table.html', + styleUrl: './deliverer-table.css', +}) +export class DelivererTable { + listOfDeliverers: DelivererInfo[] = [ + { + transporter: 'Transporteur 1', + deliveryNote: [ + { + trackingNumber: 'TRK-1000', + deliverer: 'Transporteur 1', + estimateDeliveryDate: new Date('2025-11-20'), + expeditionDate: new Date('2025-11-15'), + realDeliveryDate: new Date('2025-11-19'), + productDelivery: [ + { product: ProductTable.listOfProducts[0], quantity: 5 }, + { product: ProductTable.listOfProducts[1], quantity: 3 }, + { product: ProductTable.listOfProducts[2], quantity: 7 }, + ], + }, + { + trackingNumber: 'TRK-1001', + deliverer: 'Transporteur 1', + estimateDeliveryDate: new Date('2025-11-22'), + expeditionDate: new Date('2025-11-16'), + realDeliveryDate: new Date('2025-11-21'), + productDelivery: [ + { product: ProductTable.listOfProducts[3], quantity: 2 }, + { product: ProductTable.listOfProducts[4], quantity: 4 }, + { product: ProductTable.listOfProducts[5], quantity: 6 }, + ], + }, + { + trackingNumber: 'TRK-1000', + deliverer: 'Transporteur 1', + estimateDeliveryDate: new Date('2025-11-20'), + expeditionDate: new Date('2025-11-15'), + realDeliveryDate: new Date('2025-11-19'), + productDelivery: [ + { product: ProductTable.listOfProducts[0], quantity: 5 }, + { product: ProductTable.listOfProducts[1], quantity: 3 }, + { product: ProductTable.listOfProducts[2], quantity: 7 }, + ], + }, + { + trackingNumber: 'TRK-1001', + deliverer: 'Transporteur 1', + estimateDeliveryDate: new Date('2025-11-22'), + expeditionDate: new Date('2025-11-16'), + realDeliveryDate: new Date('2025-11-21'), + productDelivery: [ + { product: ProductTable.listOfProducts[3], quantity: 2 }, + { product: ProductTable.listOfProducts[4], quantity: 4 }, + { product: ProductTable.listOfProducts[5], quantity: 6 }, + ], + }, + { + trackingNumber: 'TRK-1000', + deliverer: 'Transporteur 1', + estimateDeliveryDate: new Date('2025-11-20'), + expeditionDate: new Date('2025-11-15'), + realDeliveryDate: new Date('2025-11-19'), + productDelivery: [ + { product: ProductTable.listOfProducts[0], quantity: 5 }, + { product: ProductTable.listOfProducts[1], quantity: 3 }, + { product: ProductTable.listOfProducts[2], quantity: 7 }, + ], + }, + { + trackingNumber: 'TRK-1001', + deliverer: 'Transporteur 1', + estimateDeliveryDate: new Date('2025-11-22'), + expeditionDate: new Date('2025-11-16'), + realDeliveryDate: new Date('2025-11-21'), + productDelivery: [ + { product: ProductTable.listOfProducts[3], quantity: 2 }, + { product: ProductTable.listOfProducts[4], quantity: 4 }, + { product: ProductTable.listOfProducts[5], quantity: 6 }, + ], + }, + { + trackingNumber: 'TRK-1000', + deliverer: 'Transporteur 1', + estimateDeliveryDate: new Date('2025-11-20'), + expeditionDate: new Date('2025-11-15'), + realDeliveryDate: new Date('2025-11-19'), + productDelivery: [ + { product: ProductTable.listOfProducts[0], quantity: 5 }, + { product: ProductTable.listOfProducts[1], quantity: 3 }, + { product: ProductTable.listOfProducts[2], quantity: 7 }, + ], + }, + { + trackingNumber: 'TRK-1001', + deliverer: 'Transporteur 1', + estimateDeliveryDate: new Date('2025-11-22'), + expeditionDate: new Date('2025-11-16'), + realDeliveryDate: new Date('2025-11-21'), + productDelivery: [ + { product: ProductTable.listOfProducts[3], quantity: 2 }, + { product: ProductTable.listOfProducts[4], quantity: 4 }, + { product: ProductTable.listOfProducts[5], quantity: 6 }, + ], + }, + { + trackingNumber: 'TRK-1001', + deliverer: 'Transporteur 1', + estimateDeliveryDate: new Date('2025-11-22'), + expeditionDate: new Date('2025-11-16'), + realDeliveryDate: new Date('2025-11-21'), + productDelivery: [ + { product: ProductTable.listOfProducts[3], quantity: 2 }, + { product: ProductTable.listOfProducts[4], quantity: 4 }, + { product: ProductTable.listOfProducts[5], quantity: 6 }, + ], + }, + { + trackingNumber: 'TRK-1001', + deliverer: 'Transporteur 1', + estimateDeliveryDate: new Date('2025-11-22'), + expeditionDate: new Date('2025-11-16'), + realDeliveryDate: new Date('2025-11-21'), + productDelivery: [ + { product: ProductTable.listOfProducts[3], quantity: 2 }, + { product: ProductTable.listOfProducts[4], quantity: 4 }, + { product: ProductTable.listOfProducts[5], quantity: 6 }, + ], + }, + { + trackingNumber: 'TRK-1001', + deliverer: 'Transporteur 1', + estimateDeliveryDate: new Date('2025-11-22'), + expeditionDate: new Date('2025-11-16'), + realDeliveryDate: new Date('2025-11-21'), + productDelivery: [ + { product: ProductTable.listOfProducts[3], quantity: 2 }, + { product: ProductTable.listOfProducts[4], quantity: 4 }, + { product: ProductTable.listOfProducts[5], quantity: 6 }, + ], + }, + { + trackingNumber: 'TRK-1001', + deliverer: 'Transporteur 1', + estimateDeliveryDate: new Date('2025-11-22'), + expeditionDate: new Date('2025-11-16'), + realDeliveryDate: new Date('2025-11-21'), + productDelivery: [ + { product: ProductTable.listOfProducts[3], quantity: 2 }, + { product: ProductTable.listOfProducts[4], quantity: 4 }, + { product: ProductTable.listOfProducts[5], quantity: 6 }, + ], + }, + ] + }, + { + transporter: 'Transporteur 2', + deliveryNote: [ + { + trackingNumber: 'TRK-1002', + deliverer: 'Transporteur 2', + estimateDeliveryDate: new Date('2025-11-23'), + expeditionDate: new Date('2025-11-17'), + realDeliveryDate: new Date('2025-11-22'), + productDelivery: [ + { product: ProductTable.listOfProducts[6], quantity: 3 }, + { product: ProductTable.listOfProducts[7], quantity: 8 }, + { product: ProductTable.listOfProducts[8], quantity: 5 }, + ], + }, + { + trackingNumber: 'TRK-1003', + deliverer: 'Transporteur 2', + estimateDeliveryDate: new Date('2025-11-24'), + expeditionDate: new Date('2025-11-18'), + realDeliveryDate: new Date('2025-11-23'), + productDelivery: [ + { product: ProductTable.listOfProducts[9], quantity: 4 }, + { product: ProductTable.listOfProducts[10], quantity: 6 }, + { product: ProductTable.listOfProducts[11], quantity: 7 }, + ], + } + ] + }, + { + transporter: 'Transporteur 3', + deliveryNote: [ + { + trackingNumber: 'TRK-1004', + deliverer: 'Transporteur 3', + estimateDeliveryDate: new Date('2025-11-25'), + expeditionDate: new Date('2025-11-19'), + realDeliveryDate: new Date('2025-11-24'), + productDelivery: [ + { product: ProductTable.listOfProducts[12], quantity: 2 }, + { product: ProductTable.listOfProducts[13], quantity: 5 }, + { product: ProductTable.listOfProducts[14], quantity: 6 }, + ], + }, + { + trackingNumber: 'TRK-1005', + deliverer: 'Transporteur 3', + estimateDeliveryDate: new Date('2025-11-26'), + expeditionDate: new Date('2025-11-20'), + realDeliveryDate: new Date('2025-11-25'), + productDelivery: [ + { product: ProductTable.listOfProducts[15], quantity: 3 }, + { product: ProductTable.listOfProducts[16], quantity: 7 }, + { product: ProductTable.listOfProducts[17], quantity: 4 }, + ], + } + ] + }, + { + transporter: 'Transporteur 4', + deliveryNote: [ + { + trackingNumber: 'TRK-1006', + deliverer: 'Transporteur 4', + estimateDeliveryDate: new Date('2025-11-27'), + expeditionDate: new Date('2025-11-21'), + realDeliveryDate: new Date('2025-11-26'), + productDelivery: [ + { product: ProductTable.listOfProducts[18], quantity: 5 }, + { product: ProductTable.listOfProducts[19], quantity: 6 }, + { product: ProductTable.listOfProducts[20], quantity: 7 }, + ], + }, + { + trackingNumber: 'TRK-1007', + deliverer: 'Transporteur 4', + estimateDeliveryDate: new Date('2025-11-28'), + expeditionDate: new Date('2025-11-22'), + realDeliveryDate: new Date('2025-11-27'), + productDelivery: [ + { product: ProductTable.listOfProducts[21], quantity: 3 }, + { product: ProductTable.listOfProducts[22], quantity: 5 }, + { product: ProductTable.listOfProducts[23], quantity: 4 }, + ], + } + ] + }, + { + transporter: 'Transporteur 5', + deliveryNote: [ + { + trackingNumber: 'TRK-1008', + deliverer: 'Transporteur 5', + estimateDeliveryDate: new Date('2025-11-29'), + expeditionDate: new Date('2025-11-23'), + realDeliveryDate: new Date('2025-11-28'), + productDelivery: [ + { product: ProductTable.listOfProducts[24], quantity: 6 }, + { product: ProductTable.listOfProducts[25], quantity: 7 }, + { product: ProductTable.listOfProducts[26], quantity: 3 }, + ], + }, + { + trackingNumber: 'TRK-1009', + deliverer: 'Transporteur 5', + estimateDeliveryDate: new Date('2025-11-30'), + expeditionDate: new Date('2025-11-24'), + realDeliveryDate: new Date('2025-11-29'), + productDelivery: [ + { product: ProductTable.listOfProducts[27], quantity: 5 }, + { product: ProductTable.listOfProducts[28], quantity: 4 }, + { product: ProductTable.listOfProducts[29], quantity: 6 }, + ], + } + ] + }, + ]; + + delete(){ + return + } +} diff --git a/src/app/interfaces/delivery-note.interface.ts b/src/app/interfaces/delivery-note.interface.ts index 808567c..88610e0 100644 --- a/src/app/interfaces/delivery-note.interface.ts +++ b/src/app/interfaces/delivery-note.interface.ts @@ -1,5 +1,4 @@ import {productDeliveryInfo} from "./product-delivery.interface"; -import {DelivererInfo} from "./deliverer.interface"; export interface DeliveryNoteInfo { trackingNumber: string; diff --git a/src/app/pages/deliverer/deliverer.html b/src/app/pages/deliverer/deliverer.html index fd81883..3fe4500 100644 --- a/src/app/pages/deliverer/deliverer.html +++ b/src/app/pages/deliverer/deliverer.html @@ -1 +1,7 @@ -

deliverer works!

+ + + + +
+ +
diff --git a/src/app/pages/deliverer/deliverer.ts b/src/app/pages/deliverer/deliverer.ts index 9e36ced..766563c 100644 --- a/src/app/pages/deliverer/deliverer.ts +++ b/src/app/pages/deliverer/deliverer.ts @@ -1,8 +1,15 @@ import { Component } from '@angular/core'; +import {ModalButton} from "../../components/modal-button/modal-button"; +import {DelivererTable} from "../../components/deliverer-table/deliverer-table"; +import {DelivererForm} from "../../components/deliverer-form/deliverer-form"; @Component({ selector: 'app-deliverer', - imports: [], + imports: [ + ModalButton, + DelivererTable, + DelivererForm + ], templateUrl: './deliverer.html', styleUrl: './deliverer.css', })