diff --git a/src/app/models/salaries/user-profession.ts b/src/app/models/salaries/user-profession.ts index d011089e..735202a0 100644 --- a/src/app/models/salaries/user-profession.ts +++ b/src/app/models/salaries/user-profession.ts @@ -36,4 +36,8 @@ export enum UserProfession { TechLeader = 17, SystemAnalyst = 18, + + ItHr = 19, + + ItRecruiter = 20, } diff --git a/src/app/modules/admin/components/salaries/salaries-admin-page/salaries-admin-page.component.html b/src/app/modules/admin/components/salaries/salaries-admin-page/salaries-admin-page.component.html index ae933e75..072e44c9 100644 --- a/src/app/modules/admin/components/salaries/salaries-admin-page/salaries-admin-page.component.html +++ b/src/app/modules/admin/components/salaries/salaries-admin-page/salaries-admin-page.component.html @@ -3,6 +3,46 @@
+ +
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+ + +
+
+
+
diff --git a/src/app/modules/admin/components/salaries/salaries-admin-page/salaries-admin-page.component.ts b/src/app/modules/admin/components/salaries/salaries-admin-page/salaries-admin-page.component.ts index 63b370b4..751c38c3 100644 --- a/src/app/modules/admin/components/salaries/salaries-admin-page/salaries-admin-page.component.ts +++ b/src/app/modules/admin/components/salaries/salaries-admin-page/salaries-admin-page.component.ts @@ -9,6 +9,7 @@ import { SalaryAdminItem } from './salary-admin-item'; import { ConfirmMsg } from '@shared/components/dialogs/models/confirm-msg'; import { DialogMessage } from '@shared/components/dialogs/models/dialog-message'; import { AlertService } from '@shared/components/alert/services/alert.service'; +import { SalariesTableFilter } from './salaries-table-filter'; @Component({ templateUrl: './salaries-admin-page.component.html' @@ -19,6 +20,8 @@ export class SalariesAdminPageComponent implements OnInit, OnDestroy { source: PaginatedList | null = null; confirmDeletionMessage: DialogMessage | null = null; + readonly filter = new SalariesTableFilter(); + constructor( private readonly service: UserSalariesService, private readonly titleService: TitleService, @@ -30,8 +33,18 @@ export class SalariesAdminPageComponent implements OnInit, OnDestroy { } loadData(page = 1): void { + + this.salaries = null; + this.source = null; + this.service - .all({ ...defaultPageParams, page }) + .all({ + page, + pageSize: defaultPageParams.pageSize, + profession: this.filter.profession ?? null, + company: this.filter.company ?? null, + grade: this.filter.grade ?? null, + }) .pipe(untilDestroyed(this)) .subscribe((x) => { this.salaries = x.results.map((x) => new SalaryAdminItem(x)); @@ -60,4 +73,10 @@ export class SalariesAdminPageComponent implements OnInit, OnDestroy { ) ); } + + clearFilter(): void { + this.filter.profession = null; + this.filter.company = null; + this.loadData(); + } } diff --git a/src/app/modules/admin/components/salaries/salaries-admin-page/salaries-table-filter.ts b/src/app/modules/admin/components/salaries/salaries-admin-page/salaries-table-filter.ts new file mode 100644 index 00000000..5b035dca --- /dev/null +++ b/src/app/modules/admin/components/salaries/salaries-admin-page/salaries-table-filter.ts @@ -0,0 +1,19 @@ +import { DeveloperGrade } from "@models/enums"; +import { CompanyType } from "@models/salaries/company-type"; +import { UserProfession } from "@models/salaries/user-profession"; +import { CompanyTypeSelectItem } from "@shared/select-boxes/company-type-select-item"; +import { DeveloperGradeSelectItem } from "@shared/select-boxes/developer-grade-select-item"; +import { ProfessionSelectItem } from "@shared/select-boxes/profession-select-item"; + +export class SalariesTableFilter { + + readonly professions: Array = ProfessionSelectItem.allItems(); + readonly companies: Array = CompanyTypeSelectItem.allItems(); + readonly grades: Array = DeveloperGradeSelectItem.gradesSimpleOnly(); + + profession: UserProfession | null = null; + company: CompanyType | null = null; + grade: DeveloperGrade | null = null; + + constructor() {} +} diff --git a/src/app/modules/salaries/components/add-salary/add-salary.component.html b/src/app/modules/salaries/components/add-salary/add-salary.component.html index baca3c7a..3b9c31ee 100644 --- a/src/app/modules/salaries/components/add-salary/add-salary.component.html +++ b/src/app/modules/salaries/components/add-salary/add-salary.component.html @@ -49,7 +49,7 @@
diff --git a/src/app/services/user-salaries.service.ts b/src/app/services/user-salaries.service.ts index 4d6a5e61..c97b82a2 100644 --- a/src/app/services/user-salaries.service.ts +++ b/src/app/services/user-salaries.service.ts @@ -63,6 +63,14 @@ export interface UpdateSalaryRequest { grade: DeveloperGrade | null; } +export interface AdminAllSalariesQueryParams extends PageParams { + page: number; + pageSize: number; + profession: UserProfession | null; + company: CompanyType | null; + grade: DeveloperGrade | null; +} + @Injectable({ providedIn: 'root' }) @@ -70,8 +78,9 @@ export class UserSalariesService { private readonly root = '/api/salaries/'; constructor(private readonly api: ApiService) {} - all(pageParams: PageParams = defaultPageParams): Observable> { - return this.api.get>(this.root + 'all?' + new ConvertObjectToHttpParams(pageParams).get()); + all(pageParams: AdminAllSalariesQueryParams): Observable> { + return this.api.get>( + this.root + 'all?' + new ConvertObjectToHttpParams(pageParams).get()); } charts(): Observable { diff --git a/src/app/shared/select-boxes/company-type-select-item.ts b/src/app/shared/select-boxes/company-type-select-item.ts index 0dc69067..bed4e8ad 100644 --- a/src/app/shared/select-boxes/company-type-select-item.ts +++ b/src/app/shared/select-boxes/company-type-select-item.ts @@ -16,7 +16,7 @@ export class CompanyTypeSelectItem implements SelectItem { this.label = 'Казахстанская'; break; case CompanyType.Remote: - this.label = 'Удаленно на иностранную компанию'; + this.label = 'Иностранная компания (оплата в валюте)'; break; default: this.label = new SplittedByWhitespacesString(CompanyType[item]).value; diff --git a/src/app/shared/value-objects/convert-object-to-http.ts b/src/app/shared/value-objects/convert-object-to-http.ts index 4fa1db29..c626a98e 100644 --- a/src/app/shared/value-objects/convert-object-to-http.ts +++ b/src/app/shared/value-objects/convert-object-to-http.ts @@ -14,6 +14,11 @@ export class ConvertObjectToHttpParams { let httpParams: HttpParams = new HttpParams(); for (const field of Object.keys(this.params)) { + const value = this.params[field]; + if (value == null) { + continue; + } + httpParams = httpParams.append(field, this.params[field]); }