Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
204 changes: 204 additions & 0 deletions src/app/models/salaries/kazakhstan-city.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,204 @@
import { SelectItem } from "@shared/select-boxes/select-item";
import { EnumHelper } from "@shared/value-objects/enum-helper";
import { SplittedByWhitespacesString } from "@shared/value-objects/splitted-by-whitespaces-string";

export enum KazakhstanCity {
Undefined = 0,

Aktau = 1,

Aktobe = 2,

Almaty = 3,

Atyrau = 4,

Astana = 5,

Arkalyk = 6,

Baikonur = 7,

Balqash = 8,

Jezkazgan = 9,

Karaganda = 10,

Kentau = 11,

Kyzylorda = 12,

Kokshetau = 13,

Kostanay = 14,

Konaev = 15,

Janaozen = 16,

Pavlodar = 17,

Petropavl = 18,

Ridder = 19,

Saran = 20,

Satpaev = 21,

Semey = 22,

Stepnogorsk = 23,

Taldykorgan = 24,

Taraz = 25,

Temirtau = 26,

Turkestan = 27,

Oral = 28,

Oskemen = 29,

Shymkent = 30,

Shakhtinsk = 31,

Schuschinsk = 32,

Ekibastuz = 33,
}

export class KazakhstanCityEnum {
static options(): Array<SelectItem<KazakhstanCity>> {
const array = [{
value: KazakhstanCity.Undefined.toString(),
item: KazakhstanCity.Undefined,
label: 'Живу в другой стране'
},
...KazakhstanCityEnum.allItems().map((item) => {
return {
value: item.toString(),
item: item,
label: KazakhstanCityEnum.label(item)
};
}),
];

return array;
}

static allItems(): KazakhstanCity[] {
return EnumHelper.getValues(KazakhstanCity)
.filter((x) => x !== KazakhstanCity.Undefined);
}

static label(item: KazakhstanCity): string {
switch (item) {
case KazakhstanCity.Aktau:
return 'Актау';

case KazakhstanCity.Aktobe:
return 'Актобе';

case KazakhstanCity.Almaty:
return 'Алматы';

case KazakhstanCity.Atyrau:
return 'Атырау';

case KazakhstanCity.Astana:
return 'Астана';

case KazakhstanCity.Arkalyk:
return 'Аркалык';

case KazakhstanCity.Baikonur:
return 'Байконур';

case KazakhstanCity.Balqash:
return 'Балхаш';

case KazakhstanCity.Jezkazgan:
return 'Жезказган';

case KazakhstanCity.Karaganda:
return 'Караганда';

case KazakhstanCity.Kentau:
return 'Кентау';

case KazakhstanCity.Kyzylorda:
return 'Кызылорда';

case KazakhstanCity.Kokshetau:
return 'Кокшетау';

case KazakhstanCity.Kostanay:
return 'Костанай';

case KazakhstanCity.Konaev:
return 'Кунаев';

case KazakhstanCity.Janaozen:
return 'Жанаозен';

case KazakhstanCity.Pavlodar:
return 'Павлодар';

case KazakhstanCity.Petropavl:
return 'Петропавловск';

case KazakhstanCity.Ridder:
return 'Риддер';

case KazakhstanCity.Saran:
return 'Саран';

case KazakhstanCity.Satpaev:
return 'Сатпаев';

case KazakhstanCity.Semey:
return 'Семей';

case KazakhstanCity.Stepnogorsk:
return 'Степногорск';

case KazakhstanCity.Taldykorgan:
return 'Талдыкорган';

case KazakhstanCity.Taraz:
return 'Тараз';

case KazakhstanCity.Temirtau:
return 'Темиртау';

case KazakhstanCity.Turkestan:
return 'Туркестан';

case KazakhstanCity.Oral:
return 'Уральск';

case KazakhstanCity.Oskemen:
return 'Усть-Каменогорск';

case KazakhstanCity.Shymkent:
return 'Шымкент';

case KazakhstanCity.Shakhtinsk:
return 'Шахтинск';

case KazakhstanCity.Schuschinsk:
return 'Щучинск';

case KazakhstanCity.Ekibastuz:
return 'Экибастуз';

default:
return new SplittedByWhitespacesString(KazakhstanCity[item]).value;
}
}
}
3 changes: 3 additions & 0 deletions src/app/models/salaries/salary.model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { DeveloperGrade } from "@models/enums";
import { CompanyType } from "./company-type";
import { Currency } from "./currency";
import { UserProfession } from "./user-profession";
import { KazakhstanCity } from "./kazakhstan-city";

export interface UserSalaryAdminDto extends UserSalary{
id: string;
Expand All @@ -15,5 +16,7 @@ export interface UserSalary {
company: CompanyType;
grade: DeveloperGrade | null;
profession: UserProfession;
city: KazakhstanCity | null;
skillId: number | null;
createdAt: Date;
}
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
<th>Profession</th>
<th>Grade</th>
<th>Company</th>
<th>City</th>
<th>Created at</th>
<th></th>
</thead>
Expand All @@ -64,6 +65,7 @@
<td>{{ item.profession }}</td>
<td>{{ item.grade }}</td>
<td>{{ item.company }}</td>
<td>{{ item.city }}</td>
<td>{{ item.createdAt | date: 'yyyy-MM-dd HH:mm' }}</td>
<td>
<button
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { DeveloperGrade } from "@models/enums/developer-grade.enum";
import { CompanyType } from "@models/salaries/company-type";
import { Currency } from "@models/salaries/currency";
import { KazakhstanCity } from "@models/salaries/kazakhstan-city";
import { UserSalaryAdminDto } from "@models/salaries/salary.model";
import { UserProfession } from "@models/salaries/user-profession";

Expand All @@ -14,6 +15,7 @@ export class SalaryAdminItem {
readonly company: string;
readonly grade: string | null;
readonly profession: string;
readonly city: string;
readonly createdAt: Date;

constructor(private readonly item: UserSalaryAdminDto) {
Expand All @@ -25,6 +27,7 @@ export class SalaryAdminItem {
this.company = CompanyType[item.company];
this.grade = item.grade != null ? DeveloperGrade[item.grade] : null;
this.profession = UserProfession[item.profession];
this.city = item.city != null ? KazakhstanCity[item.city] : '-';
this.createdAt = item.createdAt;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
(ngSubmit)="addSalarySubmitAction()">
<div class="mb-3">
<label>Зарплата в тенге <strong>в месяц</strong>. Если вы получаете в иной валюте, переведите в тенге.</label>
<input formControlName="value" type="text" class="form-control form-control-lg" />
<input formControlName="value" type="text" class="form-control form-control-lg" appOnlyNumber />
<app-field-error [field]="addSalaryForm.get('value')" [max]="10000000" [min]="75000"></app-field-error>
</div>

Expand Down Expand Up @@ -71,13 +71,29 @@
</div>

<div class="mb-3">
<div><label class="">Ваш грейд</label></div>
<select formControlName="grade" class="form-select" aria-label="Select your grade">
<option [value]="null" selected disabled>Ваш грейд</option>
<option [value]="null" selected disabled>Выберите грейд</option>
<option *ngFor="let option of grades" [value]="option.value">{{ option.label }}</option>
</select>
<app-field-error [field]="addSalaryForm.get('grade')"></app-field-error>
</div>

<div class="mb-3">
<div><label class="">В каком городе Казахстана Вы живете?</label></div>
<ng-select
[items]="cities"
[selectOnTab]="true"
bindLabel="label"
bindValue="item"
placeholder="Выберите город"
appendTo=""
formControlName="city"
>
</ng-select>
<app-field-error [field]="addSalaryForm.get('city')"></app-field-error>
</div>

<div *ngIf="errorMessage" class="mb-3 alert alert-danger">
{{ errorMessage }}
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { UserSalary } from '@models/salaries/salary.model';
import { AlertService } from '@shared/components/alert/services/alert.service';
import { UserProfession, UserProfessionEnum } from '@models/salaries/user-profession';
import { SelectItem } from '@shared/select-boxes/select-item';
import { KazakhstanCity, KazakhstanCityEnum } from '@models/salaries/kazakhstan-city';

@Component({
selector: 'app-add-salary-modal',
Expand All @@ -28,6 +29,7 @@ export class AddSalaryComponent implements OnInit, OnDestroy {
readonly companyTypes: Array<CompanyTypeSelectItem> = CompanyTypeSelectItem.allItems();
readonly grades: Array<DeveloperGradeSelectItem> = DeveloperGradeSelectItem.gradesSimpleOnly();
readonly professions: Array<SelectItem<UserProfession>> = UserProfessionEnum.options(true);
readonly cities: Array<SelectItem<KazakhstanCity>> = KazakhstanCityEnum.options();

constructor(
private readonly service: UserSalariesService,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import { formatNumber } from "@angular/common";
import { FormControl, FormGroup, Validators } from "@angular/forms";
import { DeveloperGrade } from "@models/enums";
import { CompanyType } from "@models/salaries/company-type";
import { Currency } from "@models/salaries/currency";
import { KazakhstanCity } from "@models/salaries/kazakhstan-city";
import { UserSalary } from "@models/salaries/salary.model";
import { UserProfession } from "@models/salaries/user-profession";
import { CreateUserSalaryRequest } from "@services/user-salaries.service";
Expand All @@ -13,10 +15,13 @@ static readonly digitsPattern = '^[0-9]*$';
constructor(private readonly salarytoBeEdited: UserSalary | null = null) {
const now = new Date(Date.now());
const currentQuarter = Math.floor((now.getMonth() + 3) / 3);
const salaryValue = salarytoBeEdited?.value != null
? formatNumber(salarytoBeEdited.value, 'en-US', '1.0-2')
: null;

super({
value: new FormControl(
salarytoBeEdited?.value ?? null,
salaryValue,
[
Validators.pattern(EditSalaryForm.digitsPattern),
Validators.required,
Expand All @@ -43,13 +48,22 @@ static readonly digitsPattern = '^[0-9]*$';
company: new FormControl(salarytoBeEdited?.company ?? null, [Validators.required]),
grade: new FormControl(salarytoBeEdited?.grade ?? null, [Validators.required]),
profession: new FormControl(salarytoBeEdited?.profession ?? null, [Validators.required]),
city: new FormControl(salarytoBeEdited?.city ?? null, []),
skillId: new FormControl(salarytoBeEdited?.skillId ?? null, []),
});
}

createRequestOrNull(): CreateUserSalaryRequest | null {
if (this.valid) {
const profession = Number(this.value.profession) as UserProfession;
const grade = Number(this.value.grade) as DeveloperGrade;
const city = this.value.city != null
? Number(this.value.city) as KazakhstanCity
: null;

const skillId = this.value.skillId != null
? Number(this.value.skillId)
: null;

return {
value: Number(this.value.value),
Expand All @@ -59,6 +73,8 @@ static readonly digitsPattern = '^[0-9]*$';
company: Number(this.value.company) as CompanyType,
grade: grade,
profession: profession,
city: city != KazakhstanCity.Undefined ? city : null,
skillId: skillId,
};
}

Expand Down
Loading