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({
trackingNumber: this.deliveryNote().trackingNumber,
expeditionDate: this.deliveryNote().expeditionDate,
realDeliveryDate: this.deliveryNote().expeditionDate,
estimatedDate: this.deliveryNote().expeditionDate,
realDeliveryDate: this.deliveryNote().realDeliveryDate,
estimatedDate: this.deliveryNote().estimateDeliveryDate,
delivererId: this.deliveryNote().delivererId
});
}

View File

@@ -9,7 +9,6 @@
<th>Date d'expédition</th>
<th>Date de livraison estimée</th>
<th>Date de livraison réelle</th>
<th>Produits</th>
<th>Action</th>
</tr>
</thead >
@@ -21,31 +20,6 @@
<td>{{deliveryNote.expeditionDate | date: 'dd/MM/yyyy'}}</td>
<td>{{deliveryNote.estimateDeliveryDate | 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>
<div style="justify-content: center; display: flex">
<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 {DatePipe} from "@angular/common";
import {ModalButton} from "../modal-button/modal-button";
import {ModalNav} from "../modal-nav/modal-nav";
import {NzDividerComponent} from "ng-zorro-antd/divider";
import {NzIconDirective} from "ng-zorro-antd/icon";
@@ -15,7 +14,6 @@ import {FileService} from "../../services/file.service";
@Component({
selector: 'app-deliverery-note-table',
imports: [
ModalButton,
ModalNav,
NzDividerComponent,
NzIconDirective,
@@ -41,7 +39,7 @@ export class DelivereryNoteTable implements OnInit {
async fetchDeliveryNotes() {
this.deliveryNotesLoading.set(true)
try {
const deliveryNotes = await firstValueFrom(this.deliveryNotesService.getAllDeliveryNoteEndpoint())
const deliveryNotes = await firstValueFrom(this.deliveryNotesService.getAllDeliveryNoteEndpoint());
this.deliveryNotes.set(deliveryNotes);
} catch (e) {
this.notificationService.error(

View File

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

View File

@@ -6,6 +6,9 @@ import {NzTableComponent} from "ng-zorro-antd/table";
import {PurchaseOrderForm} from "../purchase-order-form/purchase-order-form";
import {ModalButton} from "../modal-button/modal-button";
import {
CreateDeliveryNoteDto,
DeliverynotesService,
GetDeliveryNoteDto, GetProductDeliveryDto,
GetPurchaseOrderDto,
GetPurchaseProductDto,
PurchaseordersService,
@@ -15,6 +18,7 @@ import {NzNotificationService} from "ng-zorro-antd/notification";
import {firstValueFrom} from "rxjs";
import {FileService} from "../../services/file.service";
import {QuantityForm} from "../quantity-form/quantity-form";
import {PurchaseOrder} from "../../pages/purchase-order/purchase-order";
@Component({
selector: 'app-purchase-order-table',
@@ -34,7 +38,8 @@ export class PurchaseOrderTable implements OnInit {
private purchaseOrdersService = inject(PurchaseordersService);
private notificationService = inject(NzNotificationService);
private fileService = inject(FileService);
private purchaseProductService = inject(PurchaseproductsService)
private purchaseProductService = inject(PurchaseproductsService);
private deliveryNoteService = inject(DeliverynotesService);
purchaseOrders = signal<GetPurchaseOrderDto[]>([]);
purchaseOrdersLoading = signal<boolean>(false);
modal = viewChild.required<ModalNav>('modalNav');
@@ -93,9 +98,49 @@ export class PurchaseOrderTable implements OnInit {
this.purchaseOrdersLoading.set(false)
}
transfer() {
return
async transfer(purchaseOrder: GetPurchaseOrderDto) {
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) {
if (updatePurchaseOrderComponent.purchaseOrderForm.invalid) {

View File

@@ -1,8 +1,4 @@
<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">
<app-search></app-search>
</div>

View File

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

View File

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