diff --git a/src/app/components/deliverery-note-form/deliverery-note-form.html b/src/app/components/deliverery-note-form/deliverery-note-form.html index 8f8a125..3cfaf9b 100644 --- a/src/app/components/deliverery-note-form/deliverery-note-form.html +++ b/src/app/components/deliverery-note-form/deliverery-note-form.html @@ -1,11 +1,15 @@ -
+ Transporteur - + + @for (deliverer of deliverers(); track deliverer.id) { + + } + diff --git a/src/app/components/deliverery-note-form/deliverery-note-form.ts b/src/app/components/deliverery-note-form/deliverery-note-form.ts index e65ba35..98d2719 100644 --- a/src/app/components/deliverery-note-form/deliverery-note-form.ts +++ b/src/app/components/deliverery-note-form/deliverery-note-form.ts @@ -1,10 +1,13 @@ -import { Component } from '@angular/core'; +import {Component, inject, signal} from '@angular/core'; import {FormControl, FormGroup, ReactiveFormsModule, Validators} from "@angular/forms"; import {NzFormControlComponent, NzFormDirective, NzFormItemComponent, NzFormLabelComponent} from "ng-zorro-antd/form"; -import {NzInputDirective} from "ng-zorro-antd/input"; import {NzColDirective} from "ng-zorro-antd/grid"; import {NzFlexDirective} from "ng-zorro-antd/flex"; import {NzDatePickerComponent} from "ng-zorro-antd/date-picker"; +import {NzOptionComponent, NzSelectComponent} from "ng-zorro-antd/select"; +import {DeliverersService, GetDelivererDto} from "../../services/api"; +import {NzNotificationService} from "ng-zorro-antd/notification"; +import {firstValueFrom} from "rxjs"; @Component({ selector: 'app-deliverery-note-form', @@ -12,12 +15,13 @@ import {NzDatePickerComponent} from "ng-zorro-antd/date-picker"; NzFormItemComponent, NzFormLabelComponent, NzFormControlComponent, - NzInputDirective, NzColDirective, NzFlexDirective, NzFormDirective, ReactiveFormsModule, - NzDatePickerComponent + NzDatePickerComponent, + NzSelectComponent, + NzOptionComponent ], templateUrl: './deliverery-note-form.html', styleUrl: './deliverery-note-form.css', @@ -30,14 +34,24 @@ export class DelivereryNoteForm { realDate: new FormControl(null) }) - submitForm() { - // Pour annuler si le formulaire est invalide - if (this.deliveryNoteForm.invalid) return; + private deliverersService = inject(DeliverersService); + private notificationService = inject(NzNotificationService); + deliverers = signal([]); - // Pour obtenir la valeur du formulaire - console.log(this.deliveryNoteForm.getRawValue()) + async fetchDeliverers() { + try { + const deliverers = await firstValueFrom(this.deliverersService.getAllDelivererEndpoint()); + this.deliverers.set(deliverers); + } catch (e) { + this.notificationService.error('Erreur', 'Impossible de récupérer les transporteurs'); + } + } - // Pour vider le formulaire - this.deliveryNoteForm.reset() + async ngOnInit() { + await this.fetchDeliverers(); + } + + filter(input: string, option: any) { + return option.nzLabel.toLowerCase().includes(input.toLowerCase()); } } diff --git a/src/app/components/deliverery-note-table/deliverery-note-table.html b/src/app/components/deliverery-note-table/deliverery-note-table.html index 72e73f9..fe0eaa2 100644 --- a/src/app/components/deliverery-note-table/deliverery-note-table.html +++ b/src/app/components/deliverery-note-table/deliverery-note-table.html @@ -1,4 +1,7 @@ - + Numéro de livraison @@ -11,17 +14,17 @@ - @for (data of basicTable.data; track data) { + @for (deliveryNote of deliveryNotes(); track deliveryNote.id) { - {{data.trackingNumber}} - {{data.deliverer}} - {{data.expeditionDate | date: 'dd/MM/yyyy'}} - {{data.estimateDeliveryDate | date: 'dd/MM/yyyy'}} - {{data.realDeliveryDate | date: 'dd/MM/yyyy'}} + {{deliveryNote.trackingNumber}} + {{deliveryNote.delivererTransporter}} + {{deliveryNote.expeditionDate | date: 'dd/MM/yyyy'}} + {{deliveryNote.estimateDeliveryDate | date: 'dd/MM/yyyy'}} + {{deliveryNote.realDeliveryDate | date: 'dd/MM/yyyy'}}
- + Réference @@ -30,10 +33,10 @@ - @for (product of data.productDelivery; track product) { + @for (product of deliveryNote.products; track product.productId) { - {{product.product.reference}} - {{product.product.name}} + {{product.productReference}} + {{product.productName}} {{product.quantity}} } @@ -49,11 +52,11 @@
- +
- +
diff --git a/src/app/components/deliverery-note-table/deliverery-note-table.ts b/src/app/components/deliverery-note-table/deliverery-note-table.ts index 6a1df24..302c950 100644 --- a/src/app/components/deliverery-note-table/deliverery-note-table.ts +++ b/src/app/components/deliverery-note-table/deliverery-note-table.ts @@ -1,6 +1,4 @@ -import { Component } from '@angular/core'; -import {DeliveryNoteInfo} from "../../interfaces/delivery-note.interface"; -import {ProductTable} from "../product-table/product-table"; +import {Component, inject, OnInit, signal} from '@angular/core'; import {DatePipe} from "@angular/common"; import {ModalButton} from "../modal-button/modal-button"; import {ModalNav} from "../modal-nav/modal-nav"; @@ -8,6 +6,9 @@ import {NzDividerComponent} from "ng-zorro-antd/divider"; import {NzIconDirective} from "ng-zorro-antd/icon"; import {NzTableComponent} from "ng-zorro-antd/table"; import {DelivereryNoteForm} from "../deliverery-note-form/deliverery-note-form"; +import {DeliverynotesService, GetDeliveryNoteDto} from "../../services/api"; +import {NzNotificationService} from "ng-zorro-antd/notification"; +import {firstValueFrom} from "rxjs"; @Component({ selector: 'app-deliverery-note-table', @@ -23,135 +24,48 @@ import {DelivereryNoteForm} from "../deliverery-note-form/deliverery-note-form"; templateUrl: './deliverery-note-table.html', styleUrl: './deliverery-note-table.css', }) -export class DelivereryNoteTable { - deliveryNotes: DeliveryNoteInfo[] = [ - { - trackingNumber: 'DLV-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: 'DLV-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: 'DLV-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: 'DLV-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 }, - ], - }, - { - trackingNumber: 'DLV-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: 'DLV-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 }, - ], - }, - { - trackingNumber: 'DLV-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: 'DLV-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 }, - ], - }, - { - trackingNumber: 'DLV-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: 'DLV-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 }, - ], - }, - ]; +export class DelivereryNoteTable implements OnInit { + private DeliveryNotesService = inject(DeliverynotesService); + private notificationService = inject(NzNotificationService) + deliveryNotes = signal([]); + deliveryNotesLoading = signal(false); - delete() { - return + async ngOnInit() { + await this.fetchDeliveryNotes(); } - export() { + async fetchDeliveryNotes() { + this.deliveryNotesLoading.set(true) + + try { + const deliveryNotes = await firstValueFrom(this.DeliveryNotesService.getAllDeliveryNoteEndpoint()) + this.deliveryNotes.set(deliveryNotes); + } catch (e) { + this.notificationService.error( + 'Erreur', + 'Erreur de communication avec l\'API' + ) + } + this.deliveryNotesLoading.set(false) + } + + async delete(deliveryNote:number) { + try { + await firstValueFrom(this.DeliveryNotesService.deleteDeliveryNoteEndpoint(deliveryNote)); + this.notificationService.success( + 'Success', + 'Suppression effectuée' + ) + } catch (e) { + this.notificationService.error( + 'Erreur', + 'Impossible de supprimer la ligne' + ) + } + await this.fetchDeliveryNotes(); + } + + export(deliveryNote: number) { return } } diff --git a/src/app/components/user-table/user-table.ts b/src/app/components/user-table/user-table.ts index 8a5c86f..82b0c8c 100644 --- a/src/app/components/user-table/user-table.ts +++ b/src/app/components/user-table/user-table.ts @@ -2,8 +2,6 @@ import {Component, inject, OnInit, signal, viewChild} from '@angular/core'; import {ModalNav} from "../modal-nav/modal-nav"; import {NzIconDirective} from "ng-zorro-antd/icon"; import {NzTableComponent} from "ng-zorro-antd/table"; -import {StockForm} from "../stock-form/stock-form"; -import {UserInfo} from "../../interfaces/user.interface"; import {ProfilForm} from "../profil-form/profil-form"; import {NzDividerComponent} from "ng-zorro-antd/divider"; import {GetUserDto, UsersService} from "../../services/api"; diff --git a/src/app/interfaces/deliverer.interface.ts b/src/app/interfaces/deliverer.interface.ts deleted file mode 100644 index d5222fd..0000000 --- a/src/app/interfaces/deliverer.interface.ts +++ /dev/null @@ -1,6 +0,0 @@ -import {DeliveryNoteInfo} from "./delivery-note.interface"; - -export interface DelivererInfo { - transporter: string; - deliveryNote: DeliveryNoteInfo[]; -} \ No newline at end of file diff --git a/src/app/interfaces/product-order.interface.ts b/src/app/interfaces/product-order.interface.ts deleted file mode 100644 index 13bcf8c..0000000 --- a/src/app/interfaces/product-order.interface.ts +++ /dev/null @@ -1,7 +0,0 @@ -import {ProductInfo} from "./product.interface"; - -export interface ProductOrderInfo { - product: ProductInfo; - quantity: number; - price: number; -} \ No newline at end of file diff --git a/src/app/interfaces/purchase-order.interface.ts b/src/app/interfaces/purchase-order.interface.ts deleted file mode 100644 index bb9a995..0000000 --- a/src/app/interfaces/purchase-order.interface.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {ProductOrderInfo} from "./product-order.interface"; -import {SupplierInfo} from "./supplier.interface"; - -export interface PurchaseOrderInfo { - purchaseCondition: string; - productOrder: ProductOrderInfo[]; - supplier: SupplierInfo; -} \ No newline at end of file diff --git a/src/app/interfaces/quotation.interface.ts b/src/app/interfaces/quotation.interface.ts deleted file mode 100644 index 1d8c87e..0000000 --- a/src/app/interfaces/quotation.interface.ts +++ /dev/null @@ -1,9 +0,0 @@ -import {ProductOrderInfo} from "./product-order.interface"; -import {SupplierInfo} from "./supplier.interface"; - -export interface QuotationInfo { - saleCondition: string; - message: string; - productOrder: ProductOrderInfo[]; - supplier: SupplierInfo; -} \ No newline at end of file diff --git a/src/app/interfaces/stock.interface.ts b/src/app/interfaces/stock.interface.ts deleted file mode 100644 index 5d9439d..0000000 --- a/src/app/interfaces/stock.interface.ts +++ /dev/null @@ -1,7 +0,0 @@ -import {ProductInfo} from "./product.interface"; - -export interface StockInfo { - id: number; - product: ProductInfo; - quantity: number; -} \ No newline at end of file diff --git a/src/app/interfaces/supplier.interface.ts b/src/app/interfaces/supplier.interface.ts deleted file mode 100644 index 1949a51..0000000 --- a/src/app/interfaces/supplier.interface.ts +++ /dev/null @@ -1,12 +0,0 @@ -import {ProductInfo} from "./product.interface"; - -export interface SupplierInfo { - name: string; - email: string; - phone: string; - address: string; - zipCode: string; - city: string; - deliveryDelay: number; - products: ProductInfo[]; -} \ No newline at end of file diff --git a/src/app/services/api/api/deliverynotes.service.ts b/src/app/services/api/api/deliverynotes.service.ts index 8b73f81..a2d7d7b 100644 --- a/src/app/services/api/api/deliverynotes.service.ts +++ b/src/app/services/api/api/deliverynotes.service.ts @@ -103,6 +103,59 @@ export class DeliverynotesService extends BaseService { ); } + /** + * @endpoint delete /API/deliveryNotes/{id} + * @param id + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public deleteDeliveryNoteEndpoint(id: number, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: undefined, context?: HttpContext, transferCache?: boolean}): Observable; + public deleteDeliveryNoteEndpoint(id: number, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: undefined, context?: HttpContext, transferCache?: boolean}): Observable>; + public deleteDeliveryNoteEndpoint(id: number, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: undefined, context?: HttpContext, transferCache?: boolean}): Observable>; + public deleteDeliveryNoteEndpoint(id: number, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: undefined, context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling deleteDeliveryNoteEndpoint.'); + } + + let localVarHeaders = this.defaultHeaders; + + const localVarHttpHeaderAcceptSelected: string | undefined = options?.httpHeaderAccept ?? this.configuration.selectHeaderAccept([ + ]); + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + const localVarHttpContext: HttpContext = options?.context ?? new HttpContext(); + + const localVarTransferCache: boolean = options?.transferCache ?? true; + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/API/deliveryNotes/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "number", dataFormat: "int32"})}`; + const { basePath, withCredentials } = this.configuration; + return this.httpClient.request('delete', `${basePath}${localVarPath}`, + { + context: localVarHttpContext, + responseType: responseType_, + ...(withCredentials ? { withCredentials } : {}), + headers: localVarHeaders, + observe: observe, + ...(localVarTransferCache !== undefined ? { transferCache: localVarTransferCache } : {}), + reportProgress: reportProgress + } + ); + } + /** * @endpoint get /API/deliveryNotes * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.