From 912788b6c2d77fea58fb8c44251d31e9b1da2217 Mon Sep 17 00:00:00 2001 From: Cyril Joseph Date: Mon, 28 Jul 2025 13:56:04 -0300 Subject: [PATCH] shipping and holder updates --- src/app/carnet/goods/goods.component.scss | 4 +- .../carnet/shipping/shipping.component.html | 16 +++++++- .../carnet/shipping/shipping.component.scss | 5 +++ src/app/carnet/shipping/shipping.component.ts | 39 +++++++++++++++++-- src/app/common/footer/footer.component.scss | 12 +++++- src/app/core/models/carnet/holder.ts | 2 +- src/app/core/models/carnet/shipping.ts | 3 +- src/app/core/models/formofsecurity.ts | 6 +++ src/app/core/models/holder/basic-detail.ts | 2 +- .../core/services/carnet/holder.service.ts | 2 +- .../core/services/carnet/shipping.service.ts | 10 +++-- .../core/services/common/common.service.ts | 14 +++++++ .../services/holder/basic-detail.service.ts | 6 +-- .../core/services/holder/holder.service.ts | 2 +- .../basic-details.component.html | 4 +- .../basic-details/basic-details.component.ts | 4 +- 16 files changed, 107 insertions(+), 24 deletions(-) create mode 100644 src/app/core/models/formofsecurity.ts diff --git a/src/app/carnet/goods/goods.component.scss b/src/app/carnet/goods/goods.component.scss index c8bd7a0..c70ca04 100644 --- a/src/app/carnet/goods/goods.component.scss +++ b/src/app/carnet/goods/goods.component.scss @@ -57,8 +57,8 @@ } .table-container { - // position: relative; - // overflow-x: auto; + position: relative; + overflow-x: auto; .loading-shade { position: absolute; diff --git a/src/app/carnet/shipping/shipping.component.html b/src/app/carnet/shipping/shipping.component.html index 71e0b89..7d8b37f 100644 --- a/src/app/carnet/shipping/shipping.component.html +++ b/src/app/carnet/shipping/shipping.component.html @@ -4,12 +4,24 @@

Insurance & Bond

- Do you need Bond from - us? + Do you need insurance for your goods? Do you need Lost document protection? + + + Form Of Security + + + {{ formOfSecurity.name }} + + + + Form Of Security is required + +
diff --git a/src/app/carnet/shipping/shipping.component.scss b/src/app/carnet/shipping/shipping.component.scss index d86f7f9..543ca56 100644 --- a/src/app/carnet/shipping/shipping.component.scss +++ b/src/app/carnet/shipping/shipping.component.scss @@ -28,6 +28,11 @@ display: flex; flex-direction: row; gap: 8px; + + .formofsecurity { + margin-left: 1rem; + min-width: 300px; + } } .radio-group { diff --git a/src/app/carnet/shipping/shipping.component.ts b/src/app/carnet/shipping/shipping.component.ts index 21b40da..488950b 100644 --- a/src/app/carnet/shipping/shipping.component.ts +++ b/src/app/carnet/shipping/shipping.component.ts @@ -14,7 +14,7 @@ import { finalize, forkJoin, map, of, Subject, switchMap, takeUntil, throwError import { DeliveryType } from '../../core/models/delivery-type'; import { DeliveryMethod } from '../../core/models/delivery-method'; import { PaymentType } from '../../core/models/payment-type'; -import { format, addDays, isAfter, isWeekend, addBusinessDays } from 'date-fns'; +import { format, isAfter, isWeekend, addBusinessDays } from 'date-fns'; import { MatDialog } from '@angular/material/dialog'; import { ShippingContact } from '../../core/models/carnet/shipping-contact'; import { ShippingAddress } from '../../core/models/carnet/shipping-address'; @@ -23,6 +23,7 @@ import { HolderService } from '../../core/services/carnet/holder.service'; import { Holder } from '../../core/models/carnet/holder'; import { NavigationService } from '../../core/services/common/navigation.service'; import { StorageService } from '../../core/services/common/storage.service'; +import { FormOfSecurity } from '../../core/models/formofsecurity'; @Component({ selector: 'app-shipping', @@ -56,6 +57,7 @@ export class ShippingComponent { showContactForm = false; deliveryEstimate: string = ''; holderid: number = 0; + holder: Holder | undefined | null = null; countriesHasStates = ['US', 'CA', 'MX']; countries: Country[] = []; @@ -63,6 +65,9 @@ export class ShippingComponent { deliveryTypes: DeliveryType[] = []; deliveryMethods: DeliveryMethod[] = []; paymentTypes: PaymentType[] = []; + formOfSecurities: FormOfSecurity[] = []; + govFormOfSecurities: FormOfSecurity[] = []; + nonGovFormOfSecurities: FormOfSecurity[] = []; private destroy$ = new Subject(); @@ -75,9 +80,10 @@ export class ShippingComponent { constructor() { this.shippingForm = this.fb.group({ - needsBond: [false], + // needsBond: [false], needsInsurance: [false], needsLostDocProtection: [false], + formOfSecurity: ['', Validators.required], shipTo: ['PREPARER', Validators.required], address: this.fb.group({ companyName: [''], @@ -118,6 +124,7 @@ export class ShippingComponent { this.loadDeliveryTypes(); this.loadDeliveryMethods(); this.loadPaymentTypes(); + this.loadFormOfSecurities(); if (this.headerid) { this.loadShippingData(); @@ -300,6 +307,20 @@ export class ShippingComponent { }); } + loadFormOfSecurities(): void { + this.commonService.getFormOfSecurities(0) + .pipe(takeUntil(this.destroy$)) + .subscribe({ + next: (fos) => { + this.govFormOfSecurities = fos.filter(f => f.isGov); + this.nonGovFormOfSecurities = fos.filter(f => !f.isGov); + }, + error: (error) => { + console.error('Failed to load form of securities', error); + } + }); + } + loadShippingData(): void { this.isLoading = true; @@ -309,6 +330,9 @@ export class ShippingComponent { return of(undefined); } + this.holder = holder; + this.formOfSecurities = holder.holderType?.trim() === 'GOV' ? this.govFormOfSecurities : this.nonGovFormOfSecurities; + return forkJoin({ holderContacts: this.shippingService.getHolderContactsById(holder.holderid), holderAddress: this.shippingService.getHolderAddressById(holder.holderid), @@ -360,9 +384,10 @@ export class ShippingComponent { patchShippingData(shipping: Shipping): void { this.shippingForm.patchValue({ - needsBond: shipping.needsBond, + // needsBond: shipping.needsBond, needsInsurance: shipping.needsInsurance, needsLostDocProtection: shipping.needsLostDocProtection, + formOfSecurity: shipping.formOfSecurity, shipTo: shipping.shipTo, deliveryType: shipping.deliveryType, deliveryMethod: shipping.deliveryMethod, @@ -378,6 +403,14 @@ export class ShippingComponent { this.onDeliveryMethodChange(shipping.deliveryMethod); } + let formOfSecurityControl = this.shippingForm.get('formOfSecurity'); + if (this.holder?.holderType.trim() === 'GOV') { + formOfSecurityControl?.setValue(this.govFormOfSecurities?.[0].value); + formOfSecurityControl?.disable(); + } else { + formOfSecurityControl?.enable(); + } + this.calculateDeliveryEstimate(); this.updateShippingValidation(shipping.shipTo); diff --git a/src/app/common/footer/footer.component.scss b/src/app/common/footer/footer.component.scss index 38f9fe1..8c3e739 100644 --- a/src/app/common/footer/footer.component.scss +++ b/src/app/common/footer/footer.component.scss @@ -19,7 +19,7 @@ flex-direction: column; align-items: center; gap: 8px; - background-color: var(--mat-sys-primary); + background: var(--mat-sys-primary); } .footer-links { @@ -48,6 +48,16 @@ color: #000000; background: #ffffff; + .footer-content { + max-width: 1200px; + margin: 0 auto; + display: flex; + flex-direction: column; + align-items: center; + gap: 8px; + background: #ffffff; + } + .footer-links { a { color: #000000; diff --git a/src/app/core/models/carnet/holder.ts b/src/app/core/models/carnet/holder.ts index e55c2e6..85fdb1b 100644 --- a/src/app/core/models/carnet/holder.ts +++ b/src/app/core/models/carnet/holder.ts @@ -5,7 +5,7 @@ export interface Holder { holderNumber: string; holderType: string; uscibMember: boolean; - govAgency: boolean; + govAgency?: boolean; address1: string; address2: string; city: string; diff --git a/src/app/core/models/carnet/shipping.ts b/src/app/core/models/carnet/shipping.ts index d227984..3469509 100644 --- a/src/app/core/models/carnet/shipping.ts +++ b/src/app/core/models/carnet/shipping.ts @@ -3,9 +3,10 @@ import { ShippingContact } from "./shipping-contact"; export interface Shipping { // Insurance details - needsBond: boolean; + // needsBond: boolean; needsInsurance: boolean; needsLostDocProtection: boolean; + formOfSecurity: string; // Shipping details shipTo: string; diff --git a/src/app/core/models/formofsecurity.ts b/src/app/core/models/formofsecurity.ts new file mode 100644 index 0000000..3e65ea8 --- /dev/null +++ b/src/app/core/models/formofsecurity.ts @@ -0,0 +1,6 @@ +export interface FormOfSecurity { + name: string; + id: string; + value: string; + isGov: boolean; +} diff --git a/src/app/core/models/holder/basic-detail.ts b/src/app/core/models/holder/basic-detail.ts index a37598c..3040c2e 100644 --- a/src/app/core/models/holder/basic-detail.ts +++ b/src/app/core/models/holder/basic-detail.ts @@ -7,7 +7,7 @@ export interface BasicDetail { holderNumber: string; holderType: string; uscibMember: boolean; - govAgency: boolean; + govAgency?: boolean; address1: string; address2: string; city: string; diff --git a/src/app/core/services/carnet/holder.service.ts b/src/app/core/services/carnet/holder.service.ts index 9cb3090..d3c8172 100644 --- a/src/app/core/services/carnet/holder.service.ts +++ b/src/app/core/services/carnet/holder.service.ts @@ -26,7 +26,7 @@ export class HolderService { holderNumber: holder.HOLDERNO, holderType: holder.HOLDERTYPE, uscibMember: holder.USCIBMEMBERFLAG === 'Y', - govAgency: holder.GOVAGENCYFLAG === 'Y', + // govAgency: holder.GOVAGENCYFLAG === 'Y', holderName: holder.HOLDERNAME, //NAMEQUALIFIER: holder.NAMEQUALIFIER || null, dbaName: holder.ADDLNAME || null, diff --git a/src/app/core/services/carnet/shipping.service.ts b/src/app/core/services/carnet/shipping.service.ts index 5eddc2c..d60524e 100644 --- a/src/app/core/services/carnet/shipping.service.ts +++ b/src/app/core/services/carnet/shipping.service.ts @@ -31,9 +31,10 @@ export class ShippingService { courierAccount: shippingDetails.CUSTCOURIERNO, paymentMethod: shippingDetails.PAYMENTMETHOD, - needsBond: shippingDetails.INSPROTECTION === 'Y', - needsInsurance: shippingDetails.LDIPROTECTION === 'Y', - needsLostDocProtection: shippingDetails.LDIPROTECTION === 'Y' + //needsBond: shippingDetails.BONDPROTECTION === 'Y', + needsInsurance: shippingDetails.INSPROTECTION === 'Y', + needsLostDocProtection: shippingDetails.LDIPROTECTION === 'Y', + formOfSecurity: shippingDetails.FORMOFSECURITY }; shippingData.address = { @@ -74,9 +75,10 @@ export class ShippingService { P_CUSTCOURIERNO: shippingData.courierAccount, P_PAYMENTMETHOD: shippingData.paymentMethod, - P_FORMOFSECURITY: shippingData.needsBond ? 'Y' : 'N', + // P_BONDPROTECTION: shippingData.needsBond ? 'Y' : 'N', P_INSPROTECTION: shippingData.needsInsurance ? 'Y' : 'N', P_LDIPROTECTION: shippingData.needsLostDocProtection ? 'Y' : 'N', + P_FORMOFSECURITY: shippingData.formOfSecurity, P_SHIPNAME: shippingData.address?.companyName, P_ADDRESS1: shippingData.address?.address1 || null, diff --git a/src/app/core/services/common/common.service.ts b/src/app/core/services/common/common.service.ts index e9f0a07..2512bdf 100644 --- a/src/app/core/services/common/common.service.ts +++ b/src/app/core/services/common/common.service.ts @@ -15,6 +15,7 @@ import { Country } from '../../models/country'; import { UnitOfMeasure } from '../../models/unitofmeasure'; import { DeliveryMethod } from '../../models/delivery-method'; import { PaymentType } from '../../models/payment-type'; +import { FormOfSecurity } from '../../models/formofsecurity'; @Injectable({ providedIn: 'root' @@ -189,6 +190,19 @@ export class CommonService { ); } + getFormOfSecurities(spid: number = 0): Observable { + return this.http.get(`${this.apiUrl}/${this.apiDb}/GetParamValues?P_PARAMTYPE=016&P_SPID=0`).pipe( + map((response) => + response.map((item) => ({ + name: item.PARAMDESC, + id: item.PARAMID, + value: item.PARAMVALUE, + isGov: item.ADDLPARAMVALUE1 === 'GOV', + })) + ) + ); + } + formatUSDate(datetime: Date): string { const date = new Date(datetime); const month = String(date.getUTCMonth() + 1).padStart(2, '0'); diff --git a/src/app/core/services/holder/basic-detail.service.ts b/src/app/core/services/holder/basic-detail.service.ts index 0b5a3f7..f1739ac 100644 --- a/src/app/core/services/holder/basic-detail.service.ts +++ b/src/app/core/services/holder/basic-detail.service.ts @@ -28,7 +28,7 @@ export class BasicDetailService { holderNumber: basicDetails.HOLDERNO, holderType: basicDetails.HOLDERTYPE, uscibMember: basicDetails.USCIBMEMBERFLAG === 'Y', - govAgency: basicDetails.GOVAGENCYFLAG === 'Y', + // govAgency: basicDetails.GOVAGENCYFLAG === 'Y', holderName: basicDetails.HOLDERNAME, //NAMEQUALIFIER: basicDetails.NAMEQUALIFIER || null, dbaName: basicDetails.ADDLNAME || null, @@ -48,7 +48,7 @@ export class BasicDetailService { P_HOLDERNO: data.holderNumber, P_HOLDERTYPE: data.holderType, P_USCIBMEMBERFLAG: data.uscibMember ? 'Y' : 'N', - P_GOVAGENCYFLAG: data.govAgency ? 'Y' : 'N', + P_GOVAGENCYFLAG: 'N', P_HOLDERNAME: data.holderName, P_NAMEQUALIFIER: null, P_ADDLNAME: data.dbaName, @@ -72,7 +72,7 @@ export class BasicDetailService { P_HOLDERNO: data.holderNumber, P_HOLDERTYPE: data.holderType, P_USCIBMEMBERFLAG: data.uscibMember ? 'Y' : 'N', - P_GOVAGENCYFLAG: data.govAgency ? 'Y' : 'N', + P_GOVAGENCYFLAG: 'N', P_HOLDERNAME: data.holderName, P_NAMEQUALIFIER: null, P_ADDLNAME: data.dbaName, diff --git a/src/app/core/services/holder/holder.service.ts b/src/app/core/services/holder/holder.service.ts index 2589656..9213667 100644 --- a/src/app/core/services/holder/holder.service.ts +++ b/src/app/core/services/holder/holder.service.ts @@ -38,7 +38,7 @@ export class HolderService { holderNumber: holderDetail.HOLDERNO, holderType: holderDetail.HOLDERTYPE, uscibMember: holderDetail.USCIBMEMBERFLAG === 'Y', - govAgency: holderDetail.GOVAGENCYFLAG === 'Y', + // govAgency: holderDetail.GOVAGENCYFLAG === 'Y', holderName: holderDetail.HOLDERNAME, //: holderDetail.NAMEQUALIFIER, dbaName: holderDetail.ADDLNAME, diff --git a/src/app/holder/basic-details/basic-details.component.html b/src/app/holder/basic-details/basic-details.component.html index cd8efce..44e4597 100644 --- a/src/app/holder/basic-details/basic-details.component.html +++ b/src/app/holder/basic-details/basic-details.component.html @@ -57,11 +57,11 @@ Yes No - + diff --git a/src/app/holder/basic-details/basic-details.component.ts b/src/app/holder/basic-details/basic-details.component.ts index e983623..9400cad 100644 --- a/src/app/holder/basic-details/basic-details.component.ts +++ b/src/app/holder/basic-details/basic-details.component.ts @@ -60,7 +60,7 @@ export class BasicDetailComponent implements OnInit, OnDestroy { holderNumber: ['', [Validators.required, Validators.maxLength(20)]], holderType: ['', [Validators.required, Validators.maxLength(20)]], uscibMember: [false, [Validators.required]], - govAgency: [false, [Validators.required]], + // govAgency: [false, [Validators.required]], address1: ['', [Validators.required, Validators.maxLength(100)]], address2: ['', Validators.maxLength(100)], city: ['', [Validators.required, Validators.maxLength(50)]], @@ -156,7 +156,7 @@ export class BasicDetailComponent implements OnInit, OnDestroy { holderNumber: data.holderNumber, holderType: data.holderType, uscibMember: data.uscibMember, - govAgency: data.govAgency, + // govAgency: data.govAgency, address1: data.address1, address2: data.address2, city: data.city,