Compare commits
2 Commits
8b7d48779e
...
cb4686765b
| Author | SHA1 | Date | |
|---|---|---|---|
| cb4686765b | |||
| 5e039281de |
@@ -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
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"/>
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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',
|
||||||
|
|||||||
@@ -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}
|
* @endpoint get /API/products/{id}
|
||||||
* @param id
|
* @param id
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user