diff --git a/src/app/carnet/add/add-carnet.component.html b/src/app/carnet/add/add-carnet.component.html index f997d16..b12ae88 100644 --- a/src/app/carnet/add/add-carnet.component.html +++ b/src/app/carnet/add/add-carnet.component.html @@ -15,7 +15,8 @@ Holder Selection - + @@ -39,7 +40,8 @@ Shipping & Payment - + diff --git a/src/app/carnet/add/add-carnet.component.ts b/src/app/carnet/add/add-carnet.component.ts index 71cd598..6ffe92a 100644 --- a/src/app/carnet/add/add-carnet.component.ts +++ b/src/app/carnet/add/add-carnet.component.ts @@ -26,6 +26,7 @@ export class AddCarnetComponent { isEditMode = false; headerid: number = 0; userPreferences: UserPreferences; + refreshShippingData: boolean = false; // Track completion of each step stepsCompleted = { @@ -54,6 +55,10 @@ export class AddCarnetComponent { this.stepsCompleted.holderSelection = completed; } + onHolderSelectionUpdated(updated: boolean): void { + this.refreshShippingData = updated; + } + onGoodsSectionSaved(completed: boolean): void { this.stepsCompleted.goodsSection = completed; } diff --git a/src/app/carnet/edit/edit-carnet.component.html b/src/app/carnet/edit/edit-carnet.component.html index 2d66e0c..c3de58a 100644 --- a/src/app/carnet/edit/edit-carnet.component.html +++ b/src/app/carnet/edit/edit-carnet.component.html @@ -16,7 +16,7 @@ [editable]="stepsCompleted.applicationDetail"> Holder Selection + [applicationName]="applicationName" (updated)="onHolderSelectionUpdated($event)"> @@ -40,7 +40,8 @@ Shipping & Payment - + diff --git a/src/app/carnet/edit/edit-carnet.component.ts b/src/app/carnet/edit/edit-carnet.component.ts index e40730d..fe1fc04 100644 --- a/src/app/carnet/edit/edit-carnet.component.ts +++ b/src/app/carnet/edit/edit-carnet.component.ts @@ -27,6 +27,7 @@ export class EditCarnetComponent { headerid: number = 0; userPreferences: UserPreferences; applicationName: string = ''; + refreshShippingData: boolean = false; // Track completion of each step stepsCompleted = { @@ -68,6 +69,10 @@ export class EditCarnetComponent { this.stepsCompleted.goodsSection = completed; } + onHolderSelectionUpdated(updated: boolean): void { + this.refreshShippingData = updated; + } + onTravelPlanSaved(completed: boolean): void { this.stepsCompleted.travelPlan = completed; } diff --git a/src/app/carnet/holder/holder.component.ts b/src/app/carnet/holder/holder.component.ts index dee3a29..3ddc13e 100644 --- a/src/app/carnet/holder/holder.component.ts +++ b/src/app/carnet/holder/holder.component.ts @@ -18,6 +18,7 @@ export class HolderComponent { @Input() userPreferences: UserPreferences = {}; @Input() isEditMode: boolean = false; @Output() completed = new EventEmitter(); + @Output() updated = new EventEmitter(); selectedHolderId: number = 0; @@ -45,5 +46,6 @@ export class HolderComponent { onHolderSelectionSaved(completed: boolean): void { this.completed.emit(completed); + this.updated.emit(true); // to update dependent data } } diff --git a/src/app/carnet/shipping/shipping.component.html b/src/app/carnet/shipping/shipping.component.html index 6cc05a9..4d5d2ef 100644 --- a/src/app/carnet/shipping/shipping.component.html +++ b/src/app/carnet/shipping/shipping.component.html @@ -44,6 +44,18 @@

Shipping Address

+
+ + Company Name + + + Address is required + + + Maximum 100 characters allowed + + +
diff --git a/src/app/carnet/shipping/shipping.component.ts b/src/app/carnet/shipping/shipping.component.ts index d0268ae..487e76f 100644 --- a/src/app/carnet/shipping/shipping.component.ts +++ b/src/app/carnet/shipping/shipping.component.ts @@ -1,5 +1,5 @@ import { CommonModule } from '@angular/common'; -import { Component, EventEmitter, inject, Input, Output } from '@angular/core'; +import { Component, EventEmitter, inject, Input, Output, SimpleChanges } from '@angular/core'; import { ReactiveFormsModule, FormBuilder, FormGroup, Validators } from '@angular/forms'; import { NotificationService } from '../../core/services/common/notification.service'; import { AngularMaterialModule } from '../../shared/module/angular-material.module'; @@ -31,6 +31,7 @@ import { Holder } from '../../core/models/carnet/holder'; export class ShippingComponent { @Input() headerid: number = 0; @Input() isEditMode = false; + @Input() refreshShippingData = false; @Output() completed = new EventEmitter(); private fb = inject(FormBuilder); @@ -72,6 +73,7 @@ export class ShippingComponent { needsLostDocProtection: [false], shipTo: ['PREPARER', Validators.required], address: this.fb.group({ + companyName: [''], address1: [''], address2: [''], city: [''], @@ -110,7 +112,7 @@ export class ShippingComponent { this.loadDeliveryMethods(); this.loadPaymentTypes(); - if (this.headerid && this.isEditMode) { + if (this.headerid) { this.loadShippingData(); } } @@ -172,6 +174,12 @@ export class ShippingComponent { this.shippingForm.get('address.zip')?.updateValueAndValidity(); } + ngOnChanges(changes: SimpleChanges) { + if (changes['refreshShippingData'] && this.headerid > 0) { + this.loadShippingData(); + } + } + editAddressForm(): void { this.showAddressForm = true; let shipTo = this.shippingForm.get('shipTo')?.value; @@ -369,6 +377,7 @@ export class ShippingComponent { addressGroup.patchValue({ addressid: shipping.address?.addressid, + companyName: shipping.address?.companyName, address1: shipping.address?.address1, address2: shipping.address?.address2, city: shipping.address?.city, @@ -399,7 +408,9 @@ export class ShippingComponent { if (shipTo === '3RDPARTY') { Object.keys(addressGroup.controls).forEach(key => { - if (key === 'address1') { + if (key === 'companyName') { + addressGroup.get(key)?.setValidators([Validators.required, Validators.maxLength(100)]); + } else if (key === 'address1') { addressGroup.get(key)?.setValidators([Validators.required, Validators.maxLength(100)]); } else if (key === 'address2') { addressGroup.get(key)?.setValidators([Validators.maxLength(100)]); @@ -450,13 +461,13 @@ export class ShippingComponent { let shipTo = this.shippingForm.get('shipTo')?.value; if (shipTo === 'PREPARER' && this.preparerAddress) { - return `${this.preparerAddress.address1}, + return `${this.preparerAddress.companyName}, ${this.preparerAddress.address1}, ${this.preparerAddress.city}, ${this.preparerAddress.state}, ${this.preparerAddress.zip}, ${this.preparerAddress.country}`; } if (shipTo === 'HOLDER' && this.holderAddress) { - return `${this.holderAddress.address1}, + return `${this.holderAddress.companyName}, ${this.holderAddress.address1}, ${this.holderAddress.city}, ${this.holderAddress.state}, ${this.holderAddress.zip}, ${this.holderAddress.country}`; } diff --git a/src/app/core/models/carnet/shipping-address.ts b/src/app/core/models/carnet/shipping-address.ts index 0904f00..0beca1e 100644 --- a/src/app/core/models/carnet/shipping-address.ts +++ b/src/app/core/models/carnet/shipping-address.ts @@ -1,4 +1,5 @@ export interface ShippingAddress { + companyName: string; addressid: number; address1: string; address2?: string | null; diff --git a/src/app/core/services/carnet/shipping.service.ts b/src/app/core/services/carnet/shipping.service.ts index 3bc997c..5dc7760 100644 --- a/src/app/core/services/carnet/shipping.service.ts +++ b/src/app/core/services/carnet/shipping.service.ts @@ -38,6 +38,7 @@ export class ShippingService { }; shippingData.address = { + companyName: shippingDetails.P_SHIPNAME, addressid: shippingDetails.SHIPADDRESSID, address1: shippingDetails.ADDRESS1, address2: shippingDetails.ADDRESS2, @@ -74,11 +75,11 @@ export class ShippingService { P_CUSTCOURIERNO: shippingData.courierAccount, P_PAYMENTMETHOD: shippingData.paymentMethod, - P_FORMOFSECURITY: shippingData.needsBond ? 'Y' : 'N', P_INSPROTECTION: shippingData.needsInsurance ? 'Y' : 'N', P_LDIPROTECTION: shippingData.needsLostDocProtection ? 'Y' : 'N', + P_SHIPNAME: shippingData.address?.companyName, P_ADDRESS1: shippingData.address?.address1 || null, P_ADDRESS2: shippingData.address?.address2 || null, P_CITY: shippingData.address?.city || null, @@ -142,7 +143,8 @@ export class ShippingService { private mapToAddress(address: any): ShippingAddress { return { - addressid: address.SHIPADDRESSID, + companyName: address.NAMEOF ?? address.HOLDERNAME, + addressid: address.LOCATIONID ?? address.LOCATIONID, address1: address.ADDRESS1, address2: address.ADDRESS2, city: address.CITY,