carnet ad holder updates
This commit is contained in:
parent
3d07921cec
commit
5be3f005ac
@ -21,7 +21,7 @@
|
||||
</div>
|
||||
|
||||
<div class="form-actions">
|
||||
<button mat-raised-button color="primary" type="submit"
|
||||
<button mat-raised-button color="primary" type="submit" *ngIf="!isViewMode"
|
||||
[disabled]="applicationDetailsForm.invalid || disableSaveButton ">
|
||||
Save
|
||||
</button>
|
||||
|
||||
@ -17,6 +17,7 @@ import { ActivatedRoute } from '@angular/router';
|
||||
})
|
||||
export class ApplicationComponent {
|
||||
@Input() isEditMode = false;
|
||||
@Input() isViewMode = false;
|
||||
@Input() headerid: number = 0;
|
||||
@Input() applicationName: string = '';
|
||||
|
||||
|
||||
@ -38,12 +38,13 @@
|
||||
<div class="table-actions">
|
||||
<h3>Goods Items</h3>
|
||||
<div class="actions">
|
||||
<button mat-raised-button color="primary" type="button" (click)="addNewItem()">
|
||||
<button mat-raised-button color="primary" type="button" *ngIf="!isViewMode" (click)="addNewItem()">
|
||||
<mat-icon>add</mat-icon> Add Item
|
||||
</button>
|
||||
<div class="upload-section">
|
||||
<input type="file" accept=".xlsx,.xls,.csv" (change)="fileUpload($event)" hidden #fileInput>
|
||||
<button mat-raised-button type="button" (click)="fileInput.click()" [disabled]="isProcessing">
|
||||
<button mat-raised-button type="button" *ngIf="!isViewMode" (click)="fileInput.click()"
|
||||
[disabled]="isProcessing">
|
||||
<mat-icon>upload</mat-icon> Upload
|
||||
</button>
|
||||
</div>
|
||||
@ -102,10 +103,12 @@
|
||||
<ng-container matColumnDef="actions">
|
||||
<th mat-header-cell *matHeaderCellDef>Actions</th>
|
||||
<td mat-cell *matCellDef="let item; let i = index">
|
||||
<button mat-icon-button color="primary" (click)="editItem(item)" matTooltip="Edit">
|
||||
<button mat-icon-button color="primary" *ngIf="!isViewMode" (click)="editItem(item)"
|
||||
matTooltip="Edit">
|
||||
<mat-icon>edit</mat-icon>
|
||||
</button>
|
||||
<button mat-icon-button color="warn" (click)="deleteItem(item)" matTooltip="Delete">
|
||||
<button mat-icon-button color="warn" *ngIf="!isViewMode" (click)="deleteItem(item)"
|
||||
matTooltip="Delete">
|
||||
<mat-icon>delete</mat-icon>
|
||||
</button>
|
||||
</td>
|
||||
@ -219,7 +222,7 @@
|
||||
</div>
|
||||
|
||||
<div class="form-actions">
|
||||
<button mat-raised-button color="primary" type="submit"
|
||||
<button mat-raised-button color="primary" type="submit" *ngIf="!isViewMode"
|
||||
[disabled]="itemForm.invalid || changeInProgress">
|
||||
Save
|
||||
</button>
|
||||
@ -229,7 +232,7 @@
|
||||
</div>
|
||||
|
||||
<div *ngIf="!showItemForm" class="form-actions">
|
||||
<button mat-raised-button color="primary" (click)="onSubmit()"
|
||||
<button mat-raised-button color="primary" (click)="onSubmit()" *ngIf="!isViewMode"
|
||||
[disabled]="goodsForm.invalid || changeInProgress">
|
||||
Save
|
||||
</button>
|
||||
|
||||
@ -28,6 +28,7 @@ import { Goods, GoodsItem } from '../../core/models/carnet/goods';
|
||||
})
|
||||
export class GoodsComponent {
|
||||
@Input() headerid: number = 0;
|
||||
@Input() isViewMode = false;
|
||||
@Input() userPreferences: UserPreferences = {};
|
||||
@Input() isEditMode: boolean = false;
|
||||
@Output() completed = new EventEmitter<boolean>();
|
||||
|
||||
@ -1,2 +1,2 @@
|
||||
<app-holder-search (holderSelectionCompleted)="onHolderSelectionSaved($event)" [applicationName]="applicationName"
|
||||
[headerid]="headerid" [selectedHolderId]="selectedHolderId"></app-holder-search>
|
||||
[headerid]="headerid" [selectedHolderId]="selectedHolderId" [isViewMode]="isViewMode"></app-holder-search>
|
||||
@ -13,6 +13,7 @@ import { ApiErrorHandlerService } from '../../core/services/common/api-error-han
|
||||
styleUrl: './holder.component.scss'
|
||||
})
|
||||
export class HolderComponent {
|
||||
@Input() isViewMode = false;
|
||||
@Input() headerid: number = 0;
|
||||
@Input() applicationName: string = '';
|
||||
@Input() userPreferences: UserPreferences = {};
|
||||
|
||||
@ -49,8 +49,8 @@
|
||||
<!-- <button type="button" mat-icon-button color="primary" matTooltip="Edit">
|
||||
<mat-icon>edit</mat-icon>
|
||||
</button> -->
|
||||
<button type="button" mat-icon-button color="primary" (click)="selectContact()"
|
||||
matTooltip="Change contact">
|
||||
<button type="button" mat-icon-button color="primary" *ngIf="!isViewMode"
|
||||
(click)="selectContact()" matTooltip="Change contact">
|
||||
<mat-icon>compare_arrows</mat-icon>
|
||||
</button>
|
||||
</div>
|
||||
@ -343,15 +343,24 @@
|
||||
</div>
|
||||
|
||||
<div class="form-actions">
|
||||
<button mat-raised-button color="primary" type="button" (click)="processApplication()"
|
||||
[disabled]="!enableSubmitButton" *ngIf="showProcessButton && !isViewMode">
|
||||
<span>Process Application</span>
|
||||
</button>
|
||||
|
||||
<button mat-raised-button color="primary" type="button" (click)="submitApplication()"
|
||||
[disabled]="!enableSubmitButton">
|
||||
[disabled]="!enableSubmitButton" *ngIf="showSubmitButton && !isViewMode">
|
||||
<span>Submit Application</span>
|
||||
</button>
|
||||
|
||||
<button mat-raised-button color="primary" type="submit"
|
||||
<button mat-raised-button color="primary" type="submit" *ngIf="!isViewMode"
|
||||
[disabled]="shippingForm.invalid || changeInProgress">
|
||||
Save
|
||||
</button>
|
||||
|
||||
<button mat-raised-button color="primary" type="button" (click)="returnToHome()" *ngIf="isViewMode">
|
||||
Back
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
@ -24,6 +24,8 @@ 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';
|
||||
import { CarnetService } from '../../core/services/carnet/carnet.service';
|
||||
import { environment } from '../../../environments/environment';
|
||||
|
||||
@Component({
|
||||
selector: 'app-shipping',
|
||||
@ -34,6 +36,7 @@ import { FormOfSecurity } from '../../core/models/formofsecurity';
|
||||
export class ShippingComponent {
|
||||
@Input() headerid: number = 0;
|
||||
@Input() isEditMode = false;
|
||||
@Input() isViewMode = false;
|
||||
@Input() enableSubmitButton = false;
|
||||
@Input() applicationName: string = '';
|
||||
|
||||
@ -49,6 +52,7 @@ export class ShippingComponent {
|
||||
private holderService = inject(HolderService);
|
||||
private navigationService = inject(NavigationService);
|
||||
private storageService = inject(StorageService);
|
||||
private carnetService = inject(CarnetService);
|
||||
|
||||
shippingForm: FormGroup;
|
||||
isLoading = false;
|
||||
@ -58,6 +62,8 @@ export class ShippingComponent {
|
||||
deliveryEstimate: string = '';
|
||||
holderid: number = 0;
|
||||
holder: Holder | undefined | null = null;
|
||||
showSubmitButton: boolean = environment.appType === 'client';
|
||||
showProcessButton: boolean = environment.appType === 'service-provider';
|
||||
|
||||
countriesHasStates = ['US', 'CA', 'MX'];
|
||||
countries: Country[] = [];
|
||||
@ -68,6 +74,7 @@ export class ShippingComponent {
|
||||
formOfSecurities: FormOfSecurity[] = [];
|
||||
govFormOfSecurities: FormOfSecurity[] = [];
|
||||
nonGovFormOfSecurities: FormOfSecurity[] = [];
|
||||
shippingFromDB: Shipping | null = null;
|
||||
|
||||
private destroy$ = new Subject<void>();
|
||||
|
||||
@ -126,7 +133,7 @@ export class ShippingComponent {
|
||||
this.loadPaymentTypes();
|
||||
this.loadFormOfSecurities();
|
||||
|
||||
if (this.headerid) {
|
||||
if (this.headerid && this.headerid > 0) {
|
||||
this.loadShippingData();
|
||||
}
|
||||
}
|
||||
@ -190,7 +197,7 @@ export class ShippingComponent {
|
||||
|
||||
public refreshShippingData(): void {
|
||||
if (this.headerid > 0) {
|
||||
this.loadShippingData();
|
||||
this.loadAddressContactData();
|
||||
}
|
||||
}
|
||||
|
||||
@ -218,7 +225,7 @@ export class ShippingComponent {
|
||||
this.showAddressForm = false;
|
||||
this.showContactForm = false;
|
||||
|
||||
this.updateShippingValidation(shipTo);
|
||||
this.updateAddressContactValidation(shipTo);
|
||||
|
||||
if (shipTo === '3RDPARTY') {
|
||||
this.shippingForm.get('contact')?.reset();
|
||||
@ -321,6 +328,30 @@ export class ShippingComponent {
|
||||
|
||||
loadShippingData(): void {
|
||||
this.isLoading = true;
|
||||
this.shippingService.getShippingData(this.headerid).pipe(
|
||||
finalize(() => {
|
||||
this.isLoading = false;
|
||||
})
|
||||
).subscribe({
|
||||
next: (results: Shipping) => {
|
||||
|
||||
if (!results) { // do nothing if empty
|
||||
return;
|
||||
}
|
||||
this.shippingFromDB = results;
|
||||
this.patchShippingData();
|
||||
this.loadAddressContactData();
|
||||
},
|
||||
error: (error: any) => {
|
||||
console.error('Error loading shipping data', error);
|
||||
const errorMessage = this.errorHandler.handleApiError(error, 'Failed to load shipping data');
|
||||
this.notificationService.showError(errorMessage);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
loadAddressContactData(): void {
|
||||
this.isLoading = true;
|
||||
|
||||
this.holderService.getHolder(this.headerid).pipe(
|
||||
switchMap((holder: Holder) => {
|
||||
@ -333,10 +364,9 @@ export class ShippingComponent {
|
||||
|
||||
return forkJoin({
|
||||
holderContacts: this.shippingService.getHolderContactsById(holder.holderid),
|
||||
holderAddress: this.shippingService.getHolderAddressById(holder.holderid),
|
||||
holderAddress: this.shippingService.getHolderAddress(holder),
|
||||
preparerAddress: this.shippingService.getPreparerAddress(),
|
||||
preparerContacts: this.shippingService.getPreparerContacts(),
|
||||
shippingData: this.shippingService.getShippingData(this.headerid)
|
||||
preparerContacts: this.shippingService.getPreparerContacts()
|
||||
}).pipe(
|
||||
// Combine the forkJoin results with the original holder object
|
||||
map((apiResults: any) => ({ ...apiResults, holder }))
|
||||
@ -346,7 +376,7 @@ export class ShippingComponent {
|
||||
).subscribe({
|
||||
next: (results) => {
|
||||
|
||||
if (!results) { // do nothing if empty
|
||||
if (!results && !this.shippingFromDB) { // do nothing if empty
|
||||
return;
|
||||
}
|
||||
|
||||
@ -357,20 +387,19 @@ export class ShippingComponent {
|
||||
this.preparerAddress = results.preparerAddress;
|
||||
|
||||
// Set holder contact
|
||||
if (results.shippingData?.shipTo === 'HOLDER' && results.shippingData?.contact?.contactid) {
|
||||
this.holderContact = this.holderContacts.find(hc => hc.contactid === results.shippingData?.contact?.contactid);
|
||||
if (this.shippingFromDB?.shipTo === 'HOLDER' && this.shippingFromDB?.contact?.contactid) {
|
||||
this.holderContact = this.holderContacts.find(hc => hc.contactid === this.shippingFromDB?.contact?.contactid);
|
||||
} else {
|
||||
this.holderContact = this.holderContacts?.[0];
|
||||
}
|
||||
|
||||
// Set preparer contact
|
||||
if (results.shippingData?.shipTo === 'PREPARER' && results.shippingData?.contact?.contactid) {
|
||||
this.preparerContact = this.preparerContacts.find(pc => pc.contactid === results.shippingData?.contact?.contactid);
|
||||
if (this.shippingFromDB?.shipTo === 'PREPARER' && this.shippingFromDB?.contact?.contactid) {
|
||||
this.preparerContact = this.preparerContacts.find(pc => pc.contactid === this.shippingFromDB?.contact?.contactid);
|
||||
} else {
|
||||
this.preparerContact = this.preparerContacts.find(pc => pc.defaultContact);
|
||||
}
|
||||
|
||||
this.patchShippingData(results.shippingData);
|
||||
this.patchAddressContactData();
|
||||
},
|
||||
error: (error: any) => {
|
||||
console.error('Error loading shipping data', error);
|
||||
@ -380,25 +409,40 @@ export class ShippingComponent {
|
||||
});
|
||||
}
|
||||
|
||||
patchShippingData(shipping: Shipping): void {
|
||||
this.shippingForm.patchValue({
|
||||
// needsBond: shipping.needsBond,
|
||||
needsInsurance: shipping.needsInsurance,
|
||||
needsLostDocProtection: shipping.needsLostDocProtection,
|
||||
formOfSecurity: shipping.formOfSecurity,
|
||||
shipTo: shipping.shipTo,
|
||||
deliveryType: shipping.deliveryType,
|
||||
deliveryMethod: shipping.deliveryMethod,
|
||||
courierAccount: shipping.courierAccount,
|
||||
paymentMethod: shipping.paymentMethod
|
||||
});
|
||||
|
||||
if (shipping.address?.country) {
|
||||
this.loadStates(shipping.address?.country);
|
||||
patchShippingData(): void {
|
||||
if (!this.shippingFromDB) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (shipping.deliveryMethod === 'CLC') {
|
||||
this.onDeliveryMethodChange(shipping.deliveryMethod);
|
||||
this.shippingForm.patchValue({
|
||||
// needsBond: shipping.needsBond,
|
||||
needsInsurance: this.shippingFromDB.needsInsurance,
|
||||
needsLostDocProtection: this.shippingFromDB.needsLostDocProtection,
|
||||
formOfSecurity: this.shippingFromDB.formOfSecurity,
|
||||
shipTo: this.shippingFromDB.shipTo,
|
||||
deliveryType: this.shippingFromDB.deliveryType,
|
||||
deliveryMethod: this.shippingFromDB.deliveryMethod,
|
||||
courierAccount: this.shippingFromDB.courierAccount,
|
||||
paymentMethod: this.shippingFromDB.paymentMethod
|
||||
});
|
||||
|
||||
if (this.shippingFromDB.deliveryMethod === 'CLC') {
|
||||
this.onDeliveryMethodChange(this.shippingFromDB.deliveryMethod);
|
||||
}
|
||||
|
||||
this.calculateDeliveryEstimate();
|
||||
this.shippingForm.markAsUntouched();
|
||||
this.completed.emit(this.shippingForm.valid);
|
||||
}
|
||||
|
||||
patchAddressContactData(): void {
|
||||
|
||||
if (!this.shippingFromDB) {
|
||||
return
|
||||
}
|
||||
|
||||
if (this.shippingFromDB.address?.country) {
|
||||
this.loadStates(this.shippingFromDB.address?.country);
|
||||
}
|
||||
|
||||
let formOfSecurityControl = this.shippingForm.get('formOfSecurity');
|
||||
@ -410,9 +454,9 @@ export class ShippingComponent {
|
||||
}
|
||||
|
||||
this.calculateDeliveryEstimate();
|
||||
this.updateShippingValidation(shipping.shipTo);
|
||||
this.updateAddressContactValidation(this.shippingFromDB.shipTo);
|
||||
|
||||
if (shipping.shipTo === '3RDPARTY') {
|
||||
if (this.shippingFromDB.shipTo === '3RDPARTY') {
|
||||
this.showAddressForm = true;
|
||||
this.showContactForm = true;
|
||||
|
||||
@ -420,35 +464,35 @@ export class ShippingComponent {
|
||||
const contactGroup = this.shippingForm.get('contact') as FormGroup;
|
||||
|
||||
addressGroup.patchValue({
|
||||
addressid: shipping.address?.addressid,
|
||||
companyName: shipping.address?.companyName,
|
||||
address1: shipping.address?.address1,
|
||||
address2: shipping.address?.address2,
|
||||
city: shipping.address?.city,
|
||||
state: shipping.address?.state,
|
||||
zip: shipping.address?.zip,
|
||||
country: shipping.address?.country
|
||||
addressid: this.shippingFromDB.address?.addressid,
|
||||
companyName: this.shippingFromDB.address?.companyName,
|
||||
address1: this.shippingFromDB.address?.address1,
|
||||
address2: this.shippingFromDB.address?.address2,
|
||||
city: this.shippingFromDB.address?.city,
|
||||
state: this.shippingFromDB.address?.state,
|
||||
zip: this.shippingFromDB.address?.zip,
|
||||
country: this.shippingFromDB.address?.country
|
||||
})
|
||||
|
||||
contactGroup.patchValue({
|
||||
contactid: shipping.contact?.contactid,
|
||||
firstName: shipping.contact?.firstName,
|
||||
lastName: shipping.contact?.lastName,
|
||||
middleInitial: shipping.contact?.middleInitial,
|
||||
title: shipping.contact?.title,
|
||||
phone: shipping.contact?.phone,
|
||||
mobile: shipping.contact?.mobile,
|
||||
fax: shipping.contact?.fax,
|
||||
email: shipping.contact?.email,
|
||||
refNumber: shipping.contact?.refNumber,
|
||||
notes: shipping.contact?.notes,
|
||||
contactid: this.shippingFromDB.contact?.contactid,
|
||||
firstName: this.shippingFromDB.contact?.firstName,
|
||||
lastName: this.shippingFromDB.contact?.lastName,
|
||||
middleInitial: this.shippingFromDB.contact?.middleInitial,
|
||||
title: this.shippingFromDB.contact?.title,
|
||||
phone: this.shippingFromDB.contact?.phone,
|
||||
mobile: this.shippingFromDB.contact?.mobile,
|
||||
fax: this.shippingFromDB.contact?.fax,
|
||||
email: this.shippingFromDB.contact?.email,
|
||||
refNumber: this.shippingFromDB.contact?.refNumber,
|
||||
notes: this.shippingFromDB.contact?.notes,
|
||||
})
|
||||
}
|
||||
this.shippingForm.markAsUntouched();
|
||||
this.completed.emit(this.shippingForm.valid);
|
||||
}
|
||||
|
||||
updateShippingValidation(shipTo: string): void {
|
||||
updateAddressContactValidation(shipTo: string): void {
|
||||
const addressGroup = this.shippingForm.get('address') as FormGroup;
|
||||
const contactGroup = this.shippingForm.get('contact') as FormGroup;
|
||||
|
||||
@ -641,4 +685,25 @@ export class ShippingComponent {
|
||||
|
||||
this.navigationService.navigate(["terms"])
|
||||
}
|
||||
|
||||
returnToHome(): void {
|
||||
this.navigationService.navigate(["home"])
|
||||
}
|
||||
|
||||
processApplication(): void {
|
||||
this.changeInProgress = true;
|
||||
this.carnetService.processApplication(this.headerid).pipe(finalize(() => {
|
||||
this.changeInProgress = false;
|
||||
})).subscribe({
|
||||
next: () => {
|
||||
this.notificationService.showSuccess('Application processed successfully');
|
||||
this.navigationService.navigate(["home"]);
|
||||
},
|
||||
error: (error) => {
|
||||
let errorMessage = this.errorHandler.handleApiError(error, 'Failed to submit application');
|
||||
this.notificationService.showError(errorMessage);
|
||||
console.error('Error submitting the application', error);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -61,7 +61,6 @@ export class TermsConditionsComponent {
|
||||
}
|
||||
|
||||
onAccept(): void {
|
||||
|
||||
this.changeInProgress = true;
|
||||
this.carnetService.submitApplication(this.currentApplicationDetails?.headerid!).pipe(finalize(() => {
|
||||
this.changeInProgress = false;
|
||||
|
||||
@ -46,11 +46,11 @@
|
||||
|
||||
<div class="action-buttons">
|
||||
<button mat-raised-button color="primary" type="button" (click)="addVisitCountry()"
|
||||
class="icon-end">
|
||||
*ngIf="!isViewMode" class="icon-end">
|
||||
<mat-icon>keyboard_double_arrow_right</mat-icon>
|
||||
<span> Add</span>
|
||||
</button>
|
||||
<button mat-raised-button type="button" (click)="removeVisitCountry()">
|
||||
<button mat-raised-button type="button" (click)="removeVisitCountry()" *ngIf="!isViewMode">
|
||||
<mat-icon>keyboard_double_arrow_left</mat-icon>
|
||||
<span> Remove</span>
|
||||
</button>
|
||||
@ -101,11 +101,11 @@
|
||||
|
||||
<div class="action-buttons">
|
||||
<button mat-raised-button color="primary" type="button" (click)="addTransitCountry()"
|
||||
class="icon-end">
|
||||
*ngIf="!isViewMode" class="icon-end">
|
||||
<mat-icon>keyboard_double_arrow_right</mat-icon>
|
||||
<span> Add</span>
|
||||
</button>
|
||||
<button mat-raised-button type="button" (click)="removeTransitCountry()">
|
||||
<button mat-raised-button type="button" (click)="removeTransitCountry()" *ngIf="!isViewMode">
|
||||
<mat-icon>keyboard_double_arrow_left</mat-icon>
|
||||
<span> Remove</span>
|
||||
</button>
|
||||
@ -142,7 +142,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button mat-raised-button color="primary" type="submit" [disabled]="changeInProgress">
|
||||
<button mat-raised-button color="primary" type="submit" *ngIf="!isViewMode" [disabled]="changeInProgress">
|
||||
Save
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@ -19,6 +19,8 @@ import { ConfirmDialogComponent } from '../../shared/components/confirm-dialog/c
|
||||
})
|
||||
export class TravelPlanComponent {
|
||||
@Input() headerid: number = 0;
|
||||
@Input() isViewMode = false;
|
||||
|
||||
@Output() completed = new EventEmitter<boolean>();
|
||||
|
||||
private fb = inject(FormBuilder);
|
||||
|
||||
42
src/app/carnet/view/view-carnet.component.html
Normal file
42
src/app/carnet/view/view-carnet.component.html
Normal file
@ -0,0 +1,42 @@
|
||||
<div class="carnet-action-buttons">
|
||||
<button mat-button (click)="accordion().openAll()">Expand All</button>
|
||||
<button mat-button (click)="accordion().closeAll()">Collapse All</button>
|
||||
</div>
|
||||
<mat-accordion class="carnet-headers-align" multi>
|
||||
<mat-expansion-panel>
|
||||
<mat-expansion-panel-header>
|
||||
<mat-panel-title> Application Name </mat-panel-title>
|
||||
</mat-expansion-panel-header>
|
||||
<app-application [isViewMode]="isViewMode" [applicationName]="applicationName">
|
||||
</app-application>
|
||||
</mat-expansion-panel>
|
||||
|
||||
<mat-expansion-panel>
|
||||
<mat-expansion-panel-header>
|
||||
<mat-panel-title> Holder Selection </mat-panel-title>
|
||||
</mat-expansion-panel-header>
|
||||
<app-holder [headerid]="headerid" [isViewMode]="isViewMode">
|
||||
</app-holder>
|
||||
</mat-expansion-panel>
|
||||
|
||||
<mat-expansion-panel>
|
||||
<mat-expansion-panel-header>
|
||||
<mat-panel-title> Goods Section </mat-panel-title>
|
||||
</mat-expansion-panel-header>
|
||||
<app-goods [headerid]="headerid" [isViewMode]="isViewMode" [userPreferences]="userPreferences">
|
||||
</app-goods>
|
||||
</mat-expansion-panel>
|
||||
<mat-expansion-panel>
|
||||
<mat-expansion-panel-header>
|
||||
<mat-panel-title> Travel Plan </mat-panel-title>
|
||||
</mat-expansion-panel-header>
|
||||
<app-travel-plan [headerid]="headerid" [isViewMode]="isViewMode"></app-travel-plan>
|
||||
</mat-expansion-panel>
|
||||
<mat-expansion-panel>
|
||||
<mat-expansion-panel-header>
|
||||
<mat-panel-title> Shipping & Payment </mat-panel-title>
|
||||
</mat-expansion-panel-header>
|
||||
<app-shipping [headerid]="headerid" [isViewMode]="isViewMode">
|
||||
</app-shipping>
|
||||
</mat-expansion-panel>
|
||||
</mat-accordion>
|
||||
8
src/app/carnet/view/view-carnet.component.scss
Normal file
8
src/app/carnet/view/view-carnet.component.scss
Normal file
@ -0,0 +1,8 @@
|
||||
.carnet-headers-align .mat-expansion-panel-header-description {
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.carnet-headers-align .mat-mdc-form-field+.mat-mdc-form-field {
|
||||
margin-left: 8px;
|
||||
}
|
||||
46
src/app/carnet/view/view-carnet.component.ts
Normal file
46
src/app/carnet/view/view-carnet.component.ts
Normal file
@ -0,0 +1,46 @@
|
||||
import { afterNextRender, Component, inject, viewChild } from '@angular/core';
|
||||
import { AngularMaterialModule } from '../../shared/module/angular-material.module';
|
||||
import { MatAccordion } from '@angular/material/expansion';
|
||||
import { UserPreferences } from '../../core/models/user-preference';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { ActivatedRoute } from '@angular/router';
|
||||
import { UserPreferencesService } from '../../core/services/user-preference.service';
|
||||
import { ReactiveFormsModule } from '@angular/forms';
|
||||
import { ApplicationComponent } from '../application/application.component';
|
||||
import { GoodsComponent } from '../goods/goods.component';
|
||||
import { HolderComponent } from '../holder/holder.component';
|
||||
import { ShippingComponent } from '../shipping/shipping.component';
|
||||
import { TravelPlanComponent } from '../travel-plan/travel-plan.component';
|
||||
|
||||
@Component({
|
||||
selector: 'app-view-carnet',
|
||||
imports: [AngularMaterialModule, CommonModule, ReactiveFormsModule,
|
||||
ApplicationComponent, HolderComponent, GoodsComponent, TravelPlanComponent, ShippingComponent],
|
||||
templateUrl: './view-carnet.component.html',
|
||||
styleUrl: './view-carnet.component.scss'
|
||||
})
|
||||
export class ViewCarnetComponent {
|
||||
accordion = viewChild.required(MatAccordion);
|
||||
isViewMode = true;
|
||||
headerid: number = 0;
|
||||
applicationName: string = '';
|
||||
userPreferences: UserPreferences;
|
||||
|
||||
private route = inject(ActivatedRoute);
|
||||
|
||||
constructor(userPrefenceService: UserPreferencesService) {
|
||||
this.userPreferences = userPrefenceService.getPreferences();
|
||||
|
||||
afterNextRender(() => {
|
||||
// Open all panels
|
||||
this.accordion().openAll();
|
||||
});
|
||||
}
|
||||
|
||||
ngOnInit(): void {
|
||||
const idParam = this.route.snapshot.paramMap.get('headerid');
|
||||
this.headerid = idParam ? parseInt(idParam, 10) : 0;
|
||||
|
||||
this.applicationName = this.route.snapshot.queryParamMap.get('applicationname') || '';
|
||||
}
|
||||
}
|
||||
@ -1,5 +1,6 @@
|
||||
export interface Holder {
|
||||
holderid: number;
|
||||
locationid?: number;
|
||||
holderName: string;
|
||||
dbaName?: string | null;
|
||||
holderNumber: string;
|
||||
|
||||
@ -45,4 +45,15 @@ export class CarnetService {
|
||||
|
||||
return this.http.post<any>(`${this.apiUrl}/${this.apiDb}/TransmitApplicationtoProcess`, appData);
|
||||
}
|
||||
|
||||
processApplication(headerid: number): Observable<any> {
|
||||
|
||||
let appData = {
|
||||
// P_SPID: this.userService.getUserSpid(),
|
||||
P_USERID: this.userService.getUser(),
|
||||
P_HEADERID: headerid
|
||||
}
|
||||
|
||||
return this.http.post<any>(`${this.apiUrl}/${this.apiDb}//ProcessCarnet`, appData);
|
||||
}
|
||||
}
|
||||
|
||||
@ -23,6 +23,7 @@ export class HolderService {
|
||||
private mapToHolder(holder: any): Holder {
|
||||
return {
|
||||
holderid: holder.HOLDERID,
|
||||
locationid: holder.LOCATIONID,
|
||||
holderNumber: holder.HOLDERNO,
|
||||
holderType: holder.HOLDERTYPE,
|
||||
uscibMember: holder.USCIBMEMBERFLAG === 'Y',
|
||||
|
||||
@ -1,11 +1,12 @@
|
||||
import { inject, Injectable } from '@angular/core';
|
||||
import { environment } from '../../../../environments/environment';
|
||||
import { HttpClient } from '@angular/common/http';
|
||||
import { filter, map, Observable } from 'rxjs';
|
||||
import { filter, map, Observable, of } from 'rxjs';
|
||||
import { UserService } from '../common/user.service';
|
||||
import { Shipping } from '../../models/carnet/shipping';
|
||||
import { ShippingContact } from '../../models/carnet/shipping-contact';
|
||||
import { ShippingAddress } from '../../models/carnet/shipping-address';
|
||||
import { Holder } from '../../models/carnet/holder';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
@ -137,21 +138,20 @@ export class ShippingService {
|
||||
map(response => this.mapToAddress(response?.[0])));
|
||||
}
|
||||
|
||||
getHolderAddressById(id: number): ShippingAddress | any {
|
||||
return this.http.get<any[]>(`${this.apiUrl}/${this.apiDb}/GetHolderRecord/${this.userService.getUserSpid()}/${id}`).pipe(
|
||||
map(response => this.mapToAddress(response)));
|
||||
getHolderAddress(holder: Holder): ShippingAddress | any {
|
||||
return of(this.mapToAddress(holder));
|
||||
}
|
||||
|
||||
private mapToAddress(address: any): ShippingAddress {
|
||||
return {
|
||||
companyName: address.NAMEOF ?? address.HOLDERNAME,
|
||||
addressid: address.LOCATIONID ?? address.LOCATIONID,
|
||||
address1: address.ADDRESS1,
|
||||
address2: address.ADDRESS2,
|
||||
city: address.CITY,
|
||||
state: address.STATE,
|
||||
zip: address.ZIP,
|
||||
country: address.COUNTRY
|
||||
companyName: address.NAMEOF ?? address.holderName,
|
||||
addressid: address.LOCATIONID ?? address.locationid,
|
||||
address1: address.ADDRESS1 ?? address.address1,
|
||||
address2: address.ADDRESS2 ?? address.address2,
|
||||
city: address.CITY ?? address.city,
|
||||
state: address.STATE ?? address.state,
|
||||
zip: address.ZIP ?? address.zip,
|
||||
country: address.COUNTRY ?? address.country
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
Clear Search
|
||||
</button>
|
||||
|
||||
<button mat-raised-button color="primary" (click)="addNewHolder()">
|
||||
<button mat-raised-button color="primary" *ngIf="!isViewMode" (click)="addNewHolder()">
|
||||
<mat-icon>add</mat-icon>
|
||||
Add New Holder
|
||||
</button>
|
||||
@ -78,20 +78,21 @@
|
||||
|
||||
<div class="actions-icons">
|
||||
<mat-radio-button matTooltip="Select Holder" class="selectHolder" [value]="holder.holderid"
|
||||
[checked]="selectedHolderId === holder.holderid" (change)="onHolderSelection(holder)"
|
||||
aria-label="Select row" [hidden]="holder.isInactive">
|
||||
[checked]="selectedHolderId === holder.holderid" *ngIf="!isViewMode"
|
||||
(change)="onHolderSelection(holder)" aria-label="Select row" [hidden]="holder.isInactive">
|
||||
</mat-radio-button>
|
||||
|
||||
<button mat-icon-button color="primary" (click)="onEdit(holder.holderid)" matTooltip="Edit">
|
||||
<button mat-icon-button color="primary" *ngIf="!isViewMode" (click)="onEdit(holder.holderid)"
|
||||
matTooltip="Edit">
|
||||
<mat-icon>edit</mat-icon>
|
||||
</button>
|
||||
|
||||
<button mat-icon-button color="warn" *ngIf="!holder.isInactive" matTooltip="Inactivate"
|
||||
(click)="inactivateHolder(holder.holderid)">
|
||||
<button mat-icon-button color="warn" *ngIf="!holder.isInactive && !isViewMode"
|
||||
matTooltip="Inactivate" (click)="inactivateHolder(holder.holderid)">
|
||||
<mat-icon>delete</mat-icon>
|
||||
</button>
|
||||
<button mat-icon-button color="warn" *ngIf="holder.isInactive" matTooltip="Reactivate"
|
||||
(click)="reactivateHolder(holder.holderid)">
|
||||
<button mat-icon-button color="warn" *ngIf="holder.isInactive && !isViewMode"
|
||||
matTooltip="Reactivate" (click)="reactivateHolder(holder.holderid)">
|
||||
<mat-icon>loupe</mat-icon>
|
||||
</button>
|
||||
</div>
|
||||
@ -117,7 +118,8 @@
|
||||
</div>
|
||||
|
||||
<div class="form-actions">
|
||||
<button mat-raised-button color="primary" type="submit" [disabled]="changeInProgress" (click)="saveHolderSelection()">
|
||||
<button mat-raised-button color="primary" type="submit" [disabled]="changeInProgress" *ngIf="!isViewMode"
|
||||
(click)="saveHolderSelection()">
|
||||
{{ 'Save' }}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@ -44,6 +44,7 @@ export class SearchHolderComponent {
|
||||
this.dataSource.sort = value;
|
||||
}
|
||||
|
||||
@Input() isViewMode = false;
|
||||
@Input() headerid: number = 0;
|
||||
@Input() selectedHolderId: number = 0;
|
||||
@Input() applicationName: string = '';
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
export const environment = {
|
||||
production: false,
|
||||
apiUrl: 'https://dev.alphaomegainfosys.com/test-api',
|
||||
apiDb: 'oracle'
|
||||
apiDb: 'oracle',
|
||||
appType: 'client',
|
||||
};
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
export const environment = {
|
||||
production: true,
|
||||
apiUrl: 'https://dev.alphaomegainfosys.com/test-api',
|
||||
apiDb: 'oracle'
|
||||
apiDb: 'oracle',
|
||||
appType: 'client',
|
||||
};
|
||||
Loading…
x
Reference in New Issue
Block a user