created function for create delivery note

This commit is contained in:
2025-12-20 16:46:46 +01:00
parent 5e039281de
commit cb4686765b
8 changed files with 54 additions and 43 deletions

View File

@@ -63,8 +63,8 @@ export class DelivereryNoteForm implements OnInit {
this.deliveryNoteForm.patchValue({ this.deliveryNoteForm.patchValue({
trackingNumber: this.deliveryNote().trackingNumber, trackingNumber: this.deliveryNote().trackingNumber,
expeditionDate: this.deliveryNote().expeditionDate, expeditionDate: this.deliveryNote().expeditionDate,
realDeliveryDate: this.deliveryNote().expeditionDate, realDeliveryDate: this.deliveryNote().realDeliveryDate,
estimatedDate: this.deliveryNote().expeditionDate, estimatedDate: this.deliveryNote().estimateDeliveryDate,
delivererId: this.deliveryNote().delivererId delivererId: this.deliveryNote().delivererId
}); });
} }

View File

@@ -9,7 +9,6 @@
<th>Date d'expédition</th> <th>Date d'expédition</th>
<th>Date de livraison estimée</th> <th>Date de livraison estimée</th>
<th>Date de livraison réelle</th> <th>Date de livraison réelle</th>
<th>Produits</th>
<th>Action</th> <th>Action</th>
</tr> </tr>
</thead > </thead >
@@ -21,31 +20,6 @@
<td>{{deliveryNote.expeditionDate | date: 'dd/MM/yyyy'}}</td> <td>{{deliveryNote.expeditionDate | date: 'dd/MM/yyyy'}}</td>
<td>{{deliveryNote.estimateDeliveryDate | date: 'dd/MM/yyyy'}}</td> <td>{{deliveryNote.estimateDeliveryDate | date: 'dd/MM/yyyy'}}</td>
<td>{{deliveryNote.realDeliveryDate | date: 'dd/MM/yyyy'}}</td> <td>{{deliveryNote.realDeliveryDate | date: 'dd/MM/yyyy'}}</td>
<td>
<app-modal-button type="link" name="Voir les produits" size="40%">
<div style="max-height: 400px; overflow-y: auto;">
<nz-table [nzData]="deliveryNotes()"
[nzFrontPagination]="false">
<thead>
<tr class="text-center">
<th>Réference</th>
<th>Nom</th>
<th>Quantité</th>
</tr>
</thead>
<tbody class="text-center">
@for (product of deliveryNote.products; track product.productId) {
<tr>
<td>{{product.productReference}}</td>
<td>{{product.productName}}</td>
<td>{{product.quantity}}</td>
</tr>
}
</tbody>
</nz-table>
</div>
</app-modal-button>
</td>
<td> <td>
<div style="justify-content: center; display: flex"> <div style="justify-content: center; display: flex">
<nz-icon nzType="check" nzTheme="outline" (click)="validate(deliveryNote.id)" class="cursor-pointer text-green-700"/> <nz-icon nzType="check" nzTheme="outline" (click)="validate(deliveryNote.id)" class="cursor-pointer text-green-700"/>

View File

@@ -1,6 +1,5 @@
import {Component, inject, OnInit, signal, viewChild} from '@angular/core'; import {Component, inject, OnInit, signal, viewChild} from '@angular/core';
import {DatePipe} from "@angular/common"; import {DatePipe} from "@angular/common";
import {ModalButton} from "../modal-button/modal-button";
import {ModalNav} from "../modal-nav/modal-nav"; import {ModalNav} from "../modal-nav/modal-nav";
import {NzDividerComponent} from "ng-zorro-antd/divider"; import {NzDividerComponent} from "ng-zorro-antd/divider";
import {NzIconDirective} from "ng-zorro-antd/icon"; import {NzIconDirective} from "ng-zorro-antd/icon";
@@ -15,7 +14,6 @@ import {FileService} from "../../services/file.service";
@Component({ @Component({
selector: 'app-deliverery-note-table', selector: 'app-deliverery-note-table',
imports: [ imports: [
ModalButton,
ModalNav, ModalNav,
NzDividerComponent, NzDividerComponent,
NzIconDirective, NzIconDirective,
@@ -41,7 +39,7 @@ export class DelivereryNoteTable implements OnInit {
async fetchDeliveryNotes() { async fetchDeliveryNotes() {
this.deliveryNotesLoading.set(true) this.deliveryNotesLoading.set(true)
try { try {
const deliveryNotes = await firstValueFrom(this.deliveryNotesService.getAllDeliveryNoteEndpoint()) const deliveryNotes = await firstValueFrom(this.deliveryNotesService.getAllDeliveryNoteEndpoint());
this.deliveryNotes.set(deliveryNotes); this.deliveryNotes.set(deliveryNotes);
} catch (e) { } catch (e) {
this.notificationService.error( this.notificationService.error(

View File

@@ -62,7 +62,7 @@
<nz-divider nzType="vertical"></nz-divider> <nz-divider nzType="vertical"></nz-divider>
<nz-icon nzType="export" nzTheme="outline" (click)="export(purchaseOrder.id)" class="cursor-pointer text-green-700"/> <nz-icon nzType="export" nzTheme="outline" (click)="export(purchaseOrder.id)" class="cursor-pointer text-green-700"/>
<nz-divider nzType="vertical"></nz-divider> <nz-divider nzType="vertical"></nz-divider>
<nz-icon nzType="interaction" nzTheme="outline" (click)="transfer()" class="cursor-pointer text-blue-700"/> <nz-icon nzType="interaction" nzTheme="outline" (click)="transfer(purchaseOrder)" class="cursor-pointer text-blue-700"/>
</div> </div>
</td> </td>
</tr> </tr>

View File

@@ -6,6 +6,9 @@ import {NzTableComponent} from "ng-zorro-antd/table";
import {PurchaseOrderForm} from "../purchase-order-form/purchase-order-form"; import {PurchaseOrderForm} from "../purchase-order-form/purchase-order-form";
import {ModalButton} from "../modal-button/modal-button"; import {ModalButton} from "../modal-button/modal-button";
import { import {
CreateDeliveryNoteDto,
DeliverynotesService,
GetDeliveryNoteDto, GetProductDeliveryDto,
GetPurchaseOrderDto, GetPurchaseOrderDto,
GetPurchaseProductDto, GetPurchaseProductDto,
PurchaseordersService, PurchaseordersService,
@@ -15,6 +18,7 @@ import {NzNotificationService} from "ng-zorro-antd/notification";
import {firstValueFrom} from "rxjs"; import {firstValueFrom} from "rxjs";
import {FileService} from "../../services/file.service"; import {FileService} from "../../services/file.service";
import {QuantityForm} from "../quantity-form/quantity-form"; import {QuantityForm} from "../quantity-form/quantity-form";
import {PurchaseOrder} from "../../pages/purchase-order/purchase-order";
@Component({ @Component({
selector: 'app-purchase-order-table', selector: 'app-purchase-order-table',
@@ -34,7 +38,8 @@ export class PurchaseOrderTable implements OnInit {
private purchaseOrdersService = inject(PurchaseordersService); private purchaseOrdersService = inject(PurchaseordersService);
private notificationService = inject(NzNotificationService); private notificationService = inject(NzNotificationService);
private fileService = inject(FileService); private fileService = inject(FileService);
private purchaseProductService = inject(PurchaseproductsService) private purchaseProductService = inject(PurchaseproductsService);
private deliveryNoteService = inject(DeliverynotesService);
purchaseOrders = signal<GetPurchaseOrderDto[]>([]); purchaseOrders = signal<GetPurchaseOrderDto[]>([]);
purchaseOrdersLoading = signal<boolean>(false); purchaseOrdersLoading = signal<boolean>(false);
modal = viewChild.required<ModalNav>('modalNav'); modal = viewChild.required<ModalNav>('modalNav');
@@ -93,9 +98,49 @@ export class PurchaseOrderTable implements OnInit {
this.purchaseOrdersLoading.set(false) this.purchaseOrdersLoading.set(false)
} }
transfer() { async transfer(purchaseOrder: GetPurchaseOrderDto) {
return this.purchaseOrdersLoading.set(true);
try {
const today = new Date();
const date = today.toISOString().split('T')[0]; // yyyy-mm-dd
const futureDate = new Date(today);
futureDate.setMonth(today.getMonth() + 2);
const yyyy = futureDate.getFullYear();
const mm = (futureDate.getMonth() + 1).toString().padStart(2, '0');
const dd = futureDate.getDate().toString().padStart(2, '0');
const estimateDate = `${yyyy}-${mm}-${dd}`;
let trackingValue = 'TRK-';
const idStr = purchaseOrder.id?.toString() ?? '';
if (idStr.length < 2) trackingValue += '00' + idStr + '-' + date;
else if (idStr.length < 3) trackingValue += '0' + idStr + '-' + date;
else trackingValue += idStr.substring(0, 3) + date.replace(/-/g, '');
const productQuantities: Record<number, number> = {};
purchaseOrder.products?.forEach(p => {
if(p.productId != null && p.quantity != null) {
productQuantities[p.productId] = p.quantity;
} }
});
const deliveryNoteDto: CreateDeliveryNoteDto = {
trackingNumber: trackingValue,
expeditionDate: date,
estimateDeliveryDate: estimateDate,
delivererId: 1,
productQuantities: productQuantities
};
await firstValueFrom(this.deliveryNoteService.createDeliveryNoteEndpoint(deliveryNoteDto));
this.notificationService.success('Succès', 'Bon de livraison créé avec succès');
} catch (e) {
console.error(e);
this.notificationService.error('Erreur', 'Erreur lors du transfert');
}
this.purchaseOrdersLoading.set(false);
}
async edit(id: number, updatePurchaseOrderComponent: PurchaseOrderForm) { async edit(id: number, updatePurchaseOrderComponent: PurchaseOrderForm) {
if (updatePurchaseOrderComponent.purchaseOrderForm.invalid) { if (updatePurchaseOrderComponent.purchaseOrderForm.invalid) {

View File

@@ -1,8 +1,4 @@
<div class="flex mt-2"> <div class="flex mt-2">
<app-modal-button type="primary" name="Créer un bon de livraison" size="32%">
<app-deliverery-note-form></app-deliverery-note-form>
</app-modal-button>
<div class="ml-95 w-150"> <div class="ml-95 w-150">
<app-search></app-search> <app-search></app-search>
</div> </div>

View File

@@ -8,8 +8,6 @@ import {Search} from "../../components/search/search";
selector: 'app-delivery-note', selector: 'app-delivery-note',
imports: [ imports: [
DelivereryNoteTable, DelivereryNoteTable,
ModalButton,
DelivereryNoteForm,
Search Search
], ],
templateUrl: './delivery-note.html', templateUrl: './delivery-note.html',

View File

@@ -11,11 +11,11 @@
export interface GetProductDeliveryDto { export interface GetProductDeliveryDto {
productId?: number; productId?: number;
productReference?: number; productReference?: string | null;
productName?: string | null; productName?: string | null;
productDuration?: number; productDuration?: number;
productCaliber?: number; productCaliber?: number;
productApprovalNumber?: number; productApprovalNumber?: string | null;
productWeight?: number; productWeight?: number;
productNec?: number; productNec?: number;
productImage?: string | null; productImage?: string | null;