diff --git a/src/angular/hq/src/app/app.routes.ts b/src/angular/hq/src/app/app.routes.ts
index 5ca92293..af1425e6 100644
--- a/src/angular/hq/src/app/app.routes.ts
+++ b/src/angular/hq/src/app/app.routes.ts
@@ -16,6 +16,44 @@ export const routes: Routes = [
loadComponent: () =>
import('./callback.component').then((m) => m.CallbackComponent),
},
+ {
+ path: 'chargecodes',
+ title: 'Charge Codes',
+ canActivate: [AutoLoginPartialRoutesGuard, userRoleGuard(HQRole.Administrator)],
+ loadComponent: () =>
+ import('.//charge-code/charge-code.component').then(
+ (m) => m.ChargeCodeComponent
+ ),
+ children: [
+ {
+ path: '',
+ title: 'Charge Code List',
+ canActivate: [userRoleGuard(HQRole.Administrator)],
+ loadComponent: () =>
+ import('./charge-code/charge-code-list/charge-code-list.component').then(
+ (m) => m.ChargeCodeListComponent
+ ),
+ },
+ {
+ path: 'create',
+ title: 'Charge Code Create',
+ canActivate: [userRoleGuard(HQRole.Administrator)],
+ loadComponent: () =>
+ import('./charge-code/charge-code-create/charge-code-create.component').then(
+ (m) => m.ChargeCodeCreateComponent
+ ),
+ },
+ {
+ path: 'edit/:chargeCodeId',
+ title: 'Charge Code Edit',
+ canActivate: [userRoleGuard(HQRole.Administrator)],
+ loadComponent: () =>
+ import('./charge-code/charge-code-edit/charge-code-edit.component').then(
+ (m) => m.ChargeCodeEditComponent
+ ),
+ }
+ ]
+ },
{
path: 'clients',
title: 'Clients',
diff --git a/src/angular/hq/src/app/charge-code/SearchFilter/charge-code-search-filter.component.html b/src/angular/hq/src/app/charge-code/SearchFilter/charge-code-search-filter.component.html
new file mode 100644
index 00000000..27b994b7
--- /dev/null
+++ b/src/angular/hq/src/app/charge-code/SearchFilter/charge-code-search-filter.component.html
@@ -0,0 +1,57 @@
+
+ @if(ChargeCodeListService.showSearch$ | async) {
+
+
+
+
+
+
+
+ } @if(ChargeCodeListService.staffMembers$ && ChargeCodeListService.showStaffMembers$ | async) {
+
+
+
+
+
+
+ } @if(ChargeCodeListService.showIsSubmitted$ | async) {
+
+
+
+
+
+
+ } @if (ChargeCodeListService.showRoaster$ | async) {
+
+ } @if ( ChargeCodeListService.showActivityName$ | async ) {
+
+ }
+
\ No newline at end of file
diff --git a/src/angular/hq/src/app/charge-code/SearchFilter/charge-code-search-filter.component.ts b/src/angular/hq/src/app/charge-code/SearchFilter/charge-code-search-filter.component.ts
new file mode 100644
index 00000000..bbb7d914
--- /dev/null
+++ b/src/angular/hq/src/app/charge-code/SearchFilter/charge-code-search-filter.component.ts
@@ -0,0 +1,18 @@
+import { ChargeCodeListService } from './../services/ChargeCodeListService';
+import { CommonModule } from "@angular/common";
+import { Component } from "@angular/core";
+import { ReactiveFormsModule, FormsModule } from "@angular/forms";
+import { PsrService } from "../../psr/psr-service";
+
+
+@Component({
+ selector: 'hq-psr-search-filter',
+ standalone: true,
+ imports: [CommonModule, ReactiveFormsModule, FormsModule],
+ templateUrl: './charge-code-search-filter.component.html',
+})
+export class ChargeCodeSearchFilterComponent {
+ constructor(public ChargeCodeListService: ChargeCodeListService) {
+
+ }
+}
\ No newline at end of file
diff --git a/src/angular/hq/src/app/charge-code/charge-code-create/charge-code-create.component.html b/src/angular/hq/src/app/charge-code/charge-code-create/charge-code-create.component.html
new file mode 100644
index 00000000..55156034
--- /dev/null
+++ b/src/angular/hq/src/app/charge-code/charge-code-create/charge-code-create.component.html
@@ -0,0 +1,243 @@
+
diff --git a/src/angular/hq/src/app/charge-code/charge-code-create/charge-code-create.component.ts b/src/angular/hq/src/app/charge-code/charge-code-create/charge-code-create.component.ts
new file mode 100644
index 00000000..9686b6c8
--- /dev/null
+++ b/src/angular/hq/src/app/charge-code/charge-code-create/charge-code-create.component.ts
@@ -0,0 +1,151 @@
+import { ChargeCodeActivity } from './../../models/charge-codes/get-chargecodes-v1';
+import { Component } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import {
+ FormsModule,
+ ReactiveFormsModule,
+ FormGroup,
+ FormControl,
+ Validators,
+ ValidationErrors,
+} from '@angular/forms';
+import { Router, ActivatedRoute } from '@angular/router';
+import { Observable, BehaviorSubject, map, firstValueFrom } from 'rxjs';
+import { APIError } from '../../errors/apierror';
+import {
+ Jurisdiciton,
+} from '../../models/staff-members/get-staff-member-v1';
+import { HQService } from '../../services/hq.service';
+import { ErrorDisplayComponent } from '../../errors/error-display/error-display.component';
+import { GetProjectRecordV1 } from '../../models/projects/get-project-v1';
+import { GetServicesRecordV1 } from '../../models/Services/get-services-v1';
+import { GetQuotesRecordV1 } from '../../models/quotes/get-quotes-v1';
+
+
+interface Form {
+ Activity: FormControl;
+ ProjectId: FormControl;
+ QuoteId: FormControl;
+ ServiceAgreementId: FormControl;
+ Billable: FormControl;
+ Active: FormControl;
+ Description: FormControl;
+}
+
+@Component({
+ selector: 'hq-charge-code-create',
+ standalone: true,
+ imports: [CommonModule, FormsModule, ReactiveFormsModule, ErrorDisplayComponent],
+ templateUrl: './charge-code-create.component.html'
+})
+export class ChargeCodeCreateComponent {
+ apiErrors: string[] = [];
+ ChargeCodeActivity = ChargeCodeActivity;
+
+ projects$: Observable;
+ services$: Observable;
+ quotes$: Observable;
+
+ showProjects$ = new BehaviorSubject(null);
+ showQuotes$ = new BehaviorSubject(null);
+ showServices$ = new BehaviorSubject(null);
+
+
+
+
+ form = new FormGroup
diff --git a/src/angular/hq/src/app/charge-code/charge-code-edit/charge-code-edit.component.ts b/src/angular/hq/src/app/charge-code/charge-code-edit/charge-code-edit.component.ts
new file mode 100644
index 00000000..f5975cf5
--- /dev/null
+++ b/src/angular/hq/src/app/charge-code/charge-code-edit/charge-code-edit.component.ts
@@ -0,0 +1,168 @@
+import { Component, OnInit } from '@angular/core';
+import { FormGroup, FormControl, Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';
+import { Router, ActivatedRoute } from '@angular/router';
+import { Observable, BehaviorSubject, map, firstValueFrom } from 'rxjs';
+import { APIError } from '../../errors/apierror';
+import { ChargeCodeActivity } from '../../models/charge-codes/get-chargecodes-v1';
+import { GetProjectRecordV1 } from '../../models/projects/get-project-v1';
+import { GetQuotesRecordV1 } from '../../models/quotes/get-quotes-v1';
+import { GetServicesRecordV1 } from '../../models/Services/get-services-v1';
+import { HQService } from '../../services/hq.service';
+import { CommonModule } from '@angular/common';
+import { ErrorDisplayComponent } from '../../errors/error-display/error-display.component';
+
+
+interface Form {
+ Activity: FormControl;
+ ProjectId: FormControl;
+ QuoteId: FormControl;
+ ServiceAgreementId: FormControl;
+ Billable: FormControl;
+ Active: FormControl;
+ Description: FormControl;
+}
+@Component({
+ selector: 'hq-charge-code-edit',
+ standalone: true,
+ imports: [CommonModule, FormsModule, ReactiveFormsModule, ErrorDisplayComponent],
+
+ templateUrl: './charge-code-edit.component.html'
+})
+export class ChargeCodeEditComponent implements OnInit {
+ apiErrors: string[] = [];
+ ChargeCodeActivity = ChargeCodeActivity;
+
+ projects$: Observable;
+ services$: Observable;
+ quotes$: Observable;
+ chargeCodeId?: string;
+
+ showProjects$ = new BehaviorSubject(null);
+ showQuotes$ = new BehaviorSubject(null);
+ showServices$ = new BehaviorSubject(null);
+
+ form = new FormGroup