Compare commits
2 Commits
8b7d48779e
...
develop
| Author | SHA1 | Date | |
|---|---|---|---|
| cb4686765b | |||
| 5e039281de |
@@ -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
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -8,8 +8,6 @@ import {Search} from "../../components/search/search";
|
||||
selector: 'app-delivery-note',
|
||||
imports: [
|
||||
DelivereryNoteTable,
|
||||
ModalButton,
|
||||
DelivereryNoteForm,
|
||||
Search
|
||||
],
|
||||
templateUrl: './delivery-note.html',
|
||||
|
||||
@@ -142,6 +142,56 @@ export class ProductsService extends BaseService {
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @endpoint get /API/products/underLimit
|
||||
* @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 getAllProductsUnderLimitEndpoint(observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext, transferCache?: boolean}): Observable<Array<GetProductDto>>;
|
||||
public getAllProductsUnderLimitEndpoint(observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext, transferCache?: boolean}): Observable<HttpResponse<Array<GetProductDto>>>;
|
||||
public getAllProductsUnderLimitEndpoint(observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext, transferCache?: boolean}): Observable<HttpEvent<Array<GetProductDto>>>;
|
||||
public getAllProductsUnderLimitEndpoint(observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext, transferCache?: boolean}): Observable<any> {
|
||||
|
||||
let localVarHeaders = this.defaultHeaders;
|
||||
|
||||
const localVarHttpHeaderAcceptSelected: string | undefined = options?.httpHeaderAccept ?? this.configuration.selectHeaderAccept([
|
||||
'application/json'
|
||||
]);
|
||||
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/products/underLimit`;
|
||||
const { basePath, withCredentials } = this.configuration;
|
||||
return this.httpClient.request<Array<GetProductDto>>('get', `${basePath}${localVarPath}`,
|
||||
{
|
||||
context: localVarHttpContext,
|
||||
responseType: <any>responseType_,
|
||||
...(withCredentials ? { withCredentials } : {}),
|
||||
headers: localVarHeaders,
|
||||
observe: observe,
|
||||
...(localVarTransferCache !== undefined ? { transferCache: localVarTransferCache } : {}),
|
||||
reportProgress: reportProgress
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @endpoint get /API/products/{id}
|
||||
* @param id
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user