Fixed error to function to create quotation
This commit is contained in:
@@ -72,9 +72,8 @@ export class CreatePurchaseorderForm {
|
||||
);
|
||||
});
|
||||
|
||||
const bestSupplier = this.getBestSupplier();
|
||||
this.createPurchaseOrderForm.patchValue({
|
||||
supplierId: bestSupplier.id,
|
||||
supplierId: this.getBestSupplier().id,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,20 @@
|
||||
<form [formGroup]="createQuotationForm">
|
||||
<nz-form-item nz-flex>
|
||||
<nz-form-label nzSpan="12" nzRequired>
|
||||
Client
|
||||
</nz-form-label>
|
||||
|
||||
<nz-form-control nzSpan="12" nzErrorTip="Ce champ est requis">
|
||||
<nz-select formControlName="customerId" nzPlaceHolder="Choisir un client"
|
||||
nzShowSearch>
|
||||
@for (customer of customers(); track customer.id) {
|
||||
<nz-option [nzLabel]="customer.note" [nzValue]="customer.id"></nz-option>
|
||||
}
|
||||
</nz-select>
|
||||
</nz-form-control>
|
||||
</nz-form-item>
|
||||
|
||||
|
||||
<nz-form-item nz-flex>
|
||||
<nz-form-label nzSpan="12" nzRequired>
|
||||
Message
|
||||
@@ -15,7 +31,7 @@
|
||||
</nz-form-label>
|
||||
|
||||
<nz-form-control nzSpan="12" nzErrorTip="Ce champ est requis">
|
||||
<input nz-input placeholder="Conditions générales de vente" formControlName="purchaseConditions">
|
||||
<input nz-input placeholder="Conditions générales de vente" formControlName="conditionsSale">
|
||||
</nz-form-control>
|
||||
</nz-form-item>
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import {Component, input} from '@angular/core';
|
||||
import {Component, inject, input, OnInit, signal} from '@angular/core';
|
||||
import {
|
||||
FormArray,
|
||||
FormBuilder,
|
||||
@@ -14,7 +14,10 @@ import {NzFormControlComponent, NzFormItemComponent, NzFormLabelComponent} from
|
||||
import {NzInputDirective} from "ng-zorro-antd/input";
|
||||
import {NzInputNumberComponent} from "ng-zorro-antd/input-number";
|
||||
import {NzTableComponent} from "ng-zorro-antd/table";
|
||||
import {GetProductDto} from "../../services/api";
|
||||
import {CustomersService, GetCustomerDto, GetProductDto, GetSupplierDto} from "../../services/api";
|
||||
import {NzOptionComponent, NzSelectComponent} from "ng-zorro-antd/select";
|
||||
import {firstValueFrom} from "rxjs";
|
||||
import {NzNotificationService} from "ng-zorro-antd/notification";
|
||||
|
||||
@Component({
|
||||
selector: 'app-create-quotation-form',
|
||||
@@ -28,17 +31,36 @@ import {GetProductDto} from "../../services/api";
|
||||
NzInputDirective,
|
||||
NzInputNumberComponent,
|
||||
NzTableComponent,
|
||||
ReactiveFormsModule
|
||||
ReactiveFormsModule,
|
||||
NzOptionComponent,
|
||||
NzSelectComponent
|
||||
],
|
||||
templateUrl: './create-quotation-form.html',
|
||||
styleUrl: './create-quotation-form.css',
|
||||
})
|
||||
export class CreateQuotationForm {
|
||||
export class CreateQuotationForm implements OnInit {
|
||||
private customersService = inject(CustomersService);
|
||||
private notificationService = inject(NzNotificationService);
|
||||
|
||||
suppliers = input.required<GetSupplierDto[]>();
|
||||
products = input.required<GetProductDto[]>();
|
||||
|
||||
customers = signal<GetCustomerDto[]>([]);
|
||||
|
||||
async ngOnInit() {
|
||||
try {
|
||||
const customers = await firstValueFrom(this.customersService.getAllCustomersEndpoint())
|
||||
this.customers.set(customers);
|
||||
} catch {
|
||||
this.notificationService.error('Erreur', 'Erreur de communication avec l\'API')
|
||||
}
|
||||
}
|
||||
|
||||
createQuotationForm: FormGroup = new FormGroup({
|
||||
message: new FormControl<string>(null, Validators.required),
|
||||
purchaseConditions: new FormControl<string>(null, Validators.required),
|
||||
conditionsSale: new FormControl<string>(null, Validators.required),
|
||||
supplierId: new FormControl<number>(null, Validators.required),
|
||||
customerId: new FormControl<number>(null, Validators.required),
|
||||
lines: new FormArray([], Validators.required),
|
||||
})
|
||||
|
||||
@@ -46,6 +68,24 @@ export class CreateQuotationForm {
|
||||
return this.createQuotationForm.get('lines') as FormArray;
|
||||
}
|
||||
|
||||
getDefaultSupplier() {
|
||||
let defaultSupplier: GetSupplierDto = this.suppliers()[0];
|
||||
let maxProducts = 0;
|
||||
|
||||
const selectedProducts = this.products().map(x => x.id);
|
||||
|
||||
this.suppliers().forEach(x => {
|
||||
const supplierProductsCount = x.prices.filter(p => selectedProducts.includes(p.productId)).length ?? 0;
|
||||
|
||||
if (supplierProductsCount > maxProducts) {
|
||||
maxProducts = supplierProductsCount;
|
||||
defaultSupplier = x;
|
||||
}
|
||||
})
|
||||
|
||||
return defaultSupplier;
|
||||
}
|
||||
|
||||
addProductToForm() {
|
||||
this.lines.clear();
|
||||
this.products().forEach(x => {
|
||||
@@ -53,9 +93,13 @@ export class CreateQuotationForm {
|
||||
new FormGroup({
|
||||
productId: new FormControl(x.id),
|
||||
name: new FormControl(x.name),
|
||||
quantity: new FormControl(0, [Validators.required, Validators.min(0)])
|
||||
quantity: new FormControl(1, [Validators.required, Validators.min(1)])
|
||||
})
|
||||
);
|
||||
});
|
||||
|
||||
this.createQuotationForm.patchValue({
|
||||
supplierId: this.getDefaultSupplier().id,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user