diff --git a/brewman/.pre-commit-config.yaml b/brewman/.pre-commit-config.yaml new file mode 100644 index 00000000..6da7f1d7 --- /dev/null +++ b/brewman/.pre-commit-config.yaml @@ -0,0 +1,29 @@ +# See https://pre-commit.com for more information +# See https://pre-commit.com/hooks.html for more hooks +repos: + - repo: https://github.com/psf/black + rev: 22.6.0 + hooks: + - id: black + + - repo: https://gitlab.com/pycqa/flake8 + rev: 4.0.1 + hooks: + - id: flake8 + args: ['--config=brewman/.flake8'] + + - repo: https://github.com/timothycrosley/isort + rev: 5.10.1 + hooks: + - id: isort + additional_dependencies: [toml] + exclude: ^.*/?setup\.py$ + + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.3.0 + hooks: + - id: trailing-whitespace + - id: end-of-file-fixer + - id: check-yaml + - id: check-added-large-files + - id: debug-statements diff --git a/brewman/pyproject.toml b/brewman/pyproject.toml index 3261e736..61d33b4e 100644 --- a/brewman/pyproject.toml +++ b/brewman/pyproject.toml @@ -6,15 +6,15 @@ authors = ["tanshu "] [tool.poetry.dependencies] python = "^3.10" -uvicorn = {extras = ["standard"], version = "^0.17.6"} +uvicorn = {extras = ["standard"], version = "^0.18.2"} fastapi = "^0.78.0" python-jose = {extras = ["cryptography"], version = "^3.3.0"} passlib = {extras = ["bcrypt"], version = "^1.7.4"} psycopg2-binary = "^2.9.3" -SQLAlchemy = {extras = ["mypy"], version = "^1.4.36"} +SQLAlchemy = {extras = ["mypy"], version = "^1.4.39"} python-multipart = "^0.0.5" PyJWT = "^2.4.0" -alembic = "^1.7.7" +alembic = "^1.8.0" itsdangerous = "^2.1.2" python-dotenv = "^0.20.0" pydantic = {extras = ["dotenv"], version = "^1.9.1"} @@ -22,9 +22,10 @@ starlette = "^0.19.1" [tool.poetry.dev-dependencies] flake8 = "^4.0.1" -black = "^22.3.0" +black = "^22.6.0" isort = {extras = ["toml"], version = "^5.10.1"} -mypy = "^0.950" +pre-commit = "^2.19.0" +mypy = "^0.961" [build-system] requires = ["poetry-core>=1.0.0"] diff --git a/overlord/angular.json b/overlord/angular.json index e6148924..4c2f0a46 100644 --- a/overlord/angular.json +++ b/overlord/angular.json @@ -116,8 +116,10 @@ } } }, - "defaultProject": "overlord", "cli": { - "defaultCollection": "@angular-eslint/schematics" + "schematicCollections": [ + "@angular-eslint/schematics" + ], + "analytics": "0309c8d2-99a2-4dd3-b63e-9a0a43611460" } } diff --git a/overlord/package.json b/overlord/package.json index e3550221..6b42094e 100644 --- a/overlord/package.json +++ b/overlord/package.json @@ -14,44 +14,44 @@ }, "private": true, "dependencies": { - "@angular/animations": "^13.3.6", - "@angular/cdk": "^13.3.6", - "@angular/common": "^13.3.6", - "@angular/compiler": "^13.3.6", - "@angular/core": "^13.3.6", - "@angular/flex-layout": "^13.0.0-beta.38", - "@angular/forms": "^13.3.6", - "@angular/material": "^13.3.6", - "@angular/material-moment-adapter": "^13.3.6", - "@angular/platform-browser": "^13.3.6", - "@angular/platform-browser-dynamic": "^13.3.6", - "@angular/router": "^13.3.6", + "@angular/animations": "^14.0.4", + "@angular/cdk": "^14.0.4", + "@angular/common": "^14.0.4", + "@angular/compiler": "^14.0.4", + "@angular/core": "^14.0.4", + "@angular/flex-layout": "^14.0.0-beta.40", + "@angular/forms": "^14.0.4", + "@angular/material": "^14.0.4", + "@angular/material-moment-adapter": "^14.0.4", + "@angular/platform-browser": "^14.0.4", + "@angular/platform-browser-dynamic": "^14.0.4", + "@angular/router": "^14.0.4", "@ngx-loading-bar/core": "^6.0.2", "@ngx-loading-bar/http-client": "^6.0.2", "@ngx-loading-bar/router": "^6.0.2", "@types/mousetrap": "1.6.9", "angular2-hotkeys": "^13.1.0", - "mathjs": "^10.5.2", + "mathjs": "^10.6.4", "moment": "^2.29.3", "rxjs": "^6.6.7", "tslib": "^2.1.0", "zone.js": "~0.11.4" }, "devDependencies": { - "@angular-devkit/build-angular": "^13.3.5", - "@angular-eslint/builder": "^13.2.1", - "@angular-eslint/eslint-plugin": "^13.2.1", - "@angular-eslint/eslint-plugin-template": "^13.2.1", - "@angular-eslint/schematics": "^13.2.1", - "@angular-eslint/template-parser": "^13.2.1", - "@angular/cli": "^13.3.5", - "@angular/compiler-cli": "^13.3.6", - "@angular/language-service": "^13.3.6", + "@angular-devkit/build-angular": "^14.0.4", + "@angular-eslint/builder": "^14.0.0", + "@angular-eslint/eslint-plugin": "^14.0.0", + "@angular-eslint/eslint-plugin-template": "^14.0.0", + "@angular-eslint/schematics": "^14.0.0", + "@angular-eslint/template-parser": "^14.0.0", + "@angular/cli": "^14.0.4", + "@angular/compiler-cli": "^14.0.4", + "@angular/language-service": "^14.0.4", "@types/jasmine": "~3.7.4", - "@types/node": "^17.0.31", - "@typescript-eslint/eslint-plugin": "5.23.0", - "@typescript-eslint/parser": "5.23.0", - "eslint": "^8.2.0", + "@types/node": "^18.0.1", + "@typescript-eslint/eslint-plugin": "^5.29.0", + "@typescript-eslint/parser": "^5.29.0", + "eslint": "^8.18.0", "eslint-plugin-import": "2.26.0", "husky": "^8.0.1", "jasmine-core": "~3.8.0", @@ -61,9 +61,9 @@ "karma-coverage": "~2.0.3", "karma-jasmine": "~4.0.1", "karma-jasmine-html-reporter": "^1.6.0", - "lint-staged": "^12.4.1", - "prettier": "^2.6.2", - "standard-version": "^9.3.2", + "lint-staged": "^13.0.3", + "prettier": "^2.7.1", + "standard-version": "^9.5.0", "ts-node": "^9.1.1", "typescript": "~4.6.4" }, diff --git a/overlord/src/app/account/account-detail/account-detail.component.ts b/overlord/src/app/account/account-detail/account-detail.component.ts index 3625d729..c4481ce7 100644 --- a/overlord/src/app/account/account-detail/account-detail.component.ts +++ b/overlord/src/app/account/account-detail/account-detail.component.ts @@ -1,5 +1,5 @@ import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; -import { FormBuilder, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; import { MatDialog } from '@angular/material/dialog'; import { ActivatedRoute, Router } from '@angular/router'; @@ -17,7 +17,7 @@ import { ConfirmDialogComponent } from '../../shared/confirm-dialog/confirm-dial }) export class AccountDetailComponent implements OnInit, AfterViewInit { @ViewChild('nameElement', { static: true }) nameElement?: ElementRef; - form: FormGroup; + form: UntypedFormGroup; accountTypes: AccountType[] = []; costCentres: CostCentre[] = []; item: Account = new Account(); @@ -26,7 +26,7 @@ export class AccountDetailComponent implements OnInit, AfterViewInit { private route: ActivatedRoute, private router: Router, private dialog: MatDialog, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private toaster: ToasterService, private ser: AccountService, ) { diff --git a/overlord/src/app/account/account-list/account-list.component.ts b/overlord/src/app/account/account-list/account-list.component.ts index 5758b4f5..1926b888 100644 --- a/overlord/src/app/account/account-list/account-list.component.ts +++ b/overlord/src/app/account/account-list/account-list.component.ts @@ -1,5 +1,5 @@ import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; -import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort } from '@angular/material/sort'; import { ActivatedRoute } from '@angular/router'; @@ -21,18 +21,18 @@ export class AccountListComponent implements OnInit, AfterViewInit { @ViewChild(MatSort, { static: true }) sort?: MatSort; dataSource: AccountListDataSource; filter: Observable; - form: FormGroup; + form: UntypedFormGroup; list: Account[] = []; /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['name', 'type', 'isActive', 'isReconcilable', 'costCentre']; - constructor(private route: ActivatedRoute, private fb: FormBuilder) { + constructor(private route: ActivatedRoute, private fb: UntypedFormBuilder) { this.form = this.fb.group({ filter: '', }); // Listen to Filter Change - this.filter = (this.form.get('filter') as FormControl).valueChanges.pipe( + this.filter = (this.form.get('filter') as UntypedFormControl).valueChanges.pipe( startWith(''), debounceTime(150), distinctUntilChanged(), diff --git a/overlord/src/app/attendance/attendance.component.ts b/overlord/src/app/attendance/attendance.component.ts index fded5fb9..765ffe2d 100644 --- a/overlord/src/app/attendance/attendance.component.ts +++ b/overlord/src/app/attendance/attendance.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit } from '@angular/core'; -import { FormArray, FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormArray, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { MatDialog } from '@angular/material/dialog'; import { ActivatedRoute, Router } from '@angular/router'; import * as moment from 'moment'; @@ -22,7 +22,7 @@ import { AttendanceService } from './attendance.service'; export class AttendanceComponent implements OnInit { public attendanceObservable = new BehaviorSubject([]); dataSource: AttendanceDataSource = new AttendanceDataSource(this.attendanceObservable); - form: FormGroup; + form: UntypedFormGroup; info: Attendance = new Attendance(); attendanceTypes: AttendanceType[] = []; @@ -32,7 +32,7 @@ export class AttendanceComponent implements OnInit { constructor( private route: ActivatedRoute, private router: Router, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private dialog: MatDialog, private toaster: ToasterService, private auth: AuthService, @@ -50,7 +50,7 @@ export class AttendanceComponent implements OnInit { this.info = data.info; this.attendanceTypes = data.attendanceTypes; - (this.form.get('date') as FormControl).setValue( + (this.form.get('date') as UntypedFormControl).setValue( moment(this.info.date, 'DD-MMM-YYYY').toDate(), ); this.form.setControl( @@ -69,7 +69,7 @@ export class AttendanceComponent implements OnInit { } getClass(index: number) { - const array = this.form.get('attendances') as FormArray; + const array = this.form.get('attendances') as UntypedFormArray; const id = array.controls[index].value.attendanceType; const { name } = this.attendanceTypes.filter((x) => x.id === id)[0]; return name.toLowerCase().replace(/(\s+\+\s+)|(\s+)/g, '-'); @@ -94,14 +94,14 @@ export class AttendanceComponent implements OnInit { getAttendance(): Attendance { const formModel = this.form.value; this.info.date = moment(formModel.date).format('DD-MMM-YYYY'); - const array = this.form.get('attendances') as FormArray; + const array = this.form.get('attendances') as UntypedFormArray; this.info.body.forEach((item, index) => { item.attendanceType.id = array.controls[index].value.attendanceType; }); return this.info; } - get attendancesArray(): FormArray { - return this.form.get('attendances') as FormArray; + get attendancesArray(): UntypedFormArray { + return this.form.get('attendances') as UntypedFormArray; } } diff --git a/overlord/src/app/auth/login/login.component.ts b/overlord/src/app/auth/login/login.component.ts index 3969d281..781c0b54 100644 --- a/overlord/src/app/auth/login/login.component.ts +++ b/overlord/src/app/auth/login/login.component.ts @@ -1,5 +1,5 @@ import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; -import { FormBuilder, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; import { ActivatedRoute, Router } from '@angular/router'; import { ToasterService } from '../../core/toaster.service'; @@ -13,7 +13,7 @@ import { AuthService } from '../auth.service'; }) export class LoginComponent implements OnInit, AfterViewInit { @ViewChild('nameElement', { static: true }) nameElement?: ElementRef; - form: FormGroup; + form: UntypedFormGroup; hide: boolean; showOtp: boolean; clientId = ''; @@ -25,7 +25,7 @@ export class LoginComponent implements OnInit, AfterViewInit { private router: Router, private toaster: ToasterService, private cs: CookieService, - private fb: FormBuilder, + private fb: UntypedFormBuilder, ) { this.hide = true; this.showOtp = false; diff --git a/overlord/src/app/balance-sheet/balance-sheet.component.ts b/overlord/src/app/balance-sheet/balance-sheet.component.ts index 14958e75..830ecbd7 100644 --- a/overlord/src/app/balance-sheet/balance-sheet.component.ts +++ b/overlord/src/app/balance-sheet/balance-sheet.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit, ViewChild } from '@angular/core'; -import { FormBuilder, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort } from '@angular/material/sort'; import { ActivatedRoute, Router } from '@angular/router'; @@ -18,11 +18,11 @@ export class BalanceSheetComponent implements OnInit { @ViewChild(MatSort, { static: true }) sort?: MatSort; info: BalanceSheet = new BalanceSheet(); dataSource: BalanceSheetDataSource = new BalanceSheetDataSource(this.info.body); - form: FormGroup; + form: UntypedFormGroup; /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['group', 'name', 'subAmount', 'total']; - constructor(private route: ActivatedRoute, private router: Router, private fb: FormBuilder) { + constructor(private route: ActivatedRoute, private router: Router, private fb: UntypedFormBuilder) { this.form = this.fb.group({ date: '', }); diff --git a/overlord/src/app/cash-flow/cash-flow.component.ts b/overlord/src/app/cash-flow/cash-flow.component.ts index 4b98c41d..c2fac92a 100644 --- a/overlord/src/app/cash-flow/cash-flow.component.ts +++ b/overlord/src/app/cash-flow/cash-flow.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit } from '@angular/core'; -import { FormBuilder, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; import { ActivatedRoute, Router } from '@angular/router'; import * as moment from 'moment'; @@ -14,11 +14,11 @@ import { CashFlowDataSource } from './cash-flow-datasource'; export class CashFlowComponent implements OnInit { info: CashFlow = new CashFlow(); dataSource: CashFlowDataSource = new CashFlowDataSource(CashFlow.Data(this.info)); - form: FormGroup; + form: UntypedFormGroup; /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['name', 'amount']; - constructor(private route: ActivatedRoute, private router: Router, private fb: FormBuilder) { + constructor(private route: ActivatedRoute, private router: Router, private fb: UntypedFormBuilder) { this.form = this.fb.group({ startDate: '', finishDate: '', diff --git a/overlord/src/app/client/client-detail/client-detail.component.ts b/overlord/src/app/client/client-detail/client-detail.component.ts index 693327ea..eb5c70d1 100644 --- a/overlord/src/app/client/client-detail/client-detail.component.ts +++ b/overlord/src/app/client/client-detail/client-detail.component.ts @@ -1,5 +1,5 @@ import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; -import { FormBuilder, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; import { MatDialog } from '@angular/material/dialog'; import { ActivatedRoute, Router } from '@angular/router'; @@ -15,14 +15,14 @@ import { ClientService } from '../client.service'; }) export class ClientDetailComponent implements OnInit, AfterViewInit { @ViewChild('nameElement', { static: true }) nameElement?: ElementRef; - form: FormGroup; + form: UntypedFormGroup; item: Client = new Client(); constructor( private route: ActivatedRoute, private router: Router, private dialog: MatDialog, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private toaster: ToasterService, private ser: ClientService, ) { diff --git a/overlord/src/app/closing-stock/closing-stock.component.ts b/overlord/src/app/closing-stock/closing-stock.component.ts index 0b130aec..cefc177b 100644 --- a/overlord/src/app/closing-stock/closing-stock.component.ts +++ b/overlord/src/app/closing-stock/closing-stock.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit, ViewChild } from '@angular/core'; -import { FormArray, FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormArray, UntypedFormBuilder, FormControl, UntypedFormGroup } from '@angular/forms'; import { MatDialog } from '@angular/material/dialog'; import { MatPaginator } from '@angular/material/paginator'; import { MatSelectChange } from '@angular/material/select'; @@ -29,7 +29,7 @@ export class ClosingStockComponent implements OnInit { @ViewChild(MatSort, { static: true }) sort?: MatSort; info: ClosingStock = new ClosingStock(); dataSource: ClosingStockDataSource = new ClosingStockDataSource(this.info.items); - form: FormGroup; + form: UntypedFormGroup; /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = [ 'product', @@ -46,7 +46,7 @@ export class ClosingStockComponent implements OnInit { constructor( private route: ActivatedRoute, private router: Router, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private toCsv: ToCsvService, private dialog: MatDialog, private toaster: ToasterService, @@ -108,7 +108,7 @@ export class ClosingStockComponent implements OnInit { getClosingStock(): ClosingStock { const formModel = this.form.value; this.info.date = moment(formModel.date).format('DD-MMM-YYYY'); - const array = this.form.get('stocks') as FormArray; + const array = this.form.get('stocks') as UntypedFormArray; this.info.items.forEach((item, index) => { item.physical = +array.controls[index].value.physical; item.costCentre = diff --git a/overlord/src/app/cost-centre/cost-centre-detail/cost-centre-detail.component.ts b/overlord/src/app/cost-centre/cost-centre-detail/cost-centre-detail.component.ts index 47485721..13e09913 100644 --- a/overlord/src/app/cost-centre/cost-centre-detail/cost-centre-detail.component.ts +++ b/overlord/src/app/cost-centre/cost-centre-detail/cost-centre-detail.component.ts @@ -1,5 +1,5 @@ import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; -import { FormBuilder, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; import { ActivatedRoute, Router } from '@angular/router'; import { CostCentre } from '../../core/cost-centre'; @@ -13,13 +13,13 @@ import { CostCentreService } from '../cost-centre.service'; }) export class CostCentreDetailComponent implements OnInit, AfterViewInit { @ViewChild('nameElement', { static: true }) nameElement?: ElementRef; - form: FormGroup; + form: UntypedFormGroup; item: CostCentre = new CostCentre(); constructor( private route: ActivatedRoute, private router: Router, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private toaster: ToasterService, private ser: CostCentreService, ) { diff --git a/overlord/src/app/daybook/daybook.component.ts b/overlord/src/app/daybook/daybook.component.ts index b0f6ef6c..1cfacd40 100644 --- a/overlord/src/app/daybook/daybook.component.ts +++ b/overlord/src/app/daybook/daybook.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit, ViewChild } from '@angular/core'; -import { FormBuilder, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort } from '@angular/material/sort'; import { ActivatedRoute, Router } from '@angular/router'; @@ -19,7 +19,7 @@ export class DaybookComponent implements OnInit { @ViewChild(MatSort, { static: true }) sort?: MatSort; info: Daybook = new Daybook(); dataSource: DaybookDataSource = new DaybookDataSource(this.info.body); - form: FormGroup; + form: UntypedFormGroup; selectedRowId = ''; /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = [ @@ -35,7 +35,7 @@ export class DaybookComponent implements OnInit { constructor( private route: ActivatedRoute, private router: Router, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private ser: DaybookService, ) { this.form = this.fb.group({ diff --git a/overlord/src/app/employee-attendance/employee-attendance.component.ts b/overlord/src/app/employee-attendance/employee-attendance.component.ts index b8628d08..e153ab64 100644 --- a/overlord/src/app/employee-attendance/employee-attendance.component.ts +++ b/overlord/src/app/employee-attendance/employee-attendance.component.ts @@ -1,5 +1,5 @@ import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; -import { FormArray, FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormArray, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete'; import { MatDialog } from '@angular/material/dialog'; import { ActivatedRoute, Router } from '@angular/router'; @@ -30,7 +30,7 @@ export class EmployeeAttendanceComponent implements OnInit, AfterViewInit { this.employeeAttendanceObservable, ); - form: FormGroup; + form: UntypedFormGroup; info: EmployeeAttendance = new EmployeeAttendance(); attendanceTypes: AttendanceType[] = []; @@ -42,7 +42,7 @@ export class EmployeeAttendanceComponent implements OnInit, AfterViewInit { constructor( private route: ActivatedRoute, private router: Router, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private dialog: MatDialog, private toaster: ToasterService, private auth: AuthService, @@ -56,7 +56,7 @@ export class EmployeeAttendanceComponent implements OnInit, AfterViewInit { attendances: this.fb.array([]), }); // Listen to Employee Value Changes - this.employees = (this.form.get('employee') as FormControl).valueChanges.pipe( + this.employees = (this.form.get('employee') as UntypedFormControl).valueChanges.pipe( startWith(null), map((x) => (x !== null && x.length >= 1 ? x : null)), debounceTime(150), @@ -71,13 +71,13 @@ export class EmployeeAttendanceComponent implements OnInit, AfterViewInit { this.info = data.info; this.attendanceTypes = data.attendanceTypes; - (this.form.get('startDate') as FormControl).setValue( + (this.form.get('startDate') as UntypedFormControl).setValue( moment(this.info.startDate, 'DD-MMM-YYYY').toDate(), ); - (this.form.get('finishDate') as FormControl).setValue( + (this.form.get('finishDate') as UntypedFormControl).setValue( moment(this.info.finishDate, 'DD-MMM-YYYY').toDate(), ); - (this.form.get('employee') as FormControl).setValue(this.info.employee); + (this.form.get('employee') as UntypedFormControl).setValue(this.info.employee); this.form.setControl( 'attendances', this.fb.array( @@ -110,7 +110,7 @@ export class EmployeeAttendanceComponent implements OnInit, AfterViewInit { } getClass(index: number) { - const array = this.form.get('attendances') as FormArray; + const array = this.form.get('attendances') as UntypedFormArray; const id = array.controls[index].value.attendanceType; const { name } = this.attendanceTypes.filter((x) => x.id === id)[0]; return name.toLowerCase().replace(/(\s+\+\s+)|(\s+)/g, '-'); @@ -143,14 +143,14 @@ export class EmployeeAttendanceComponent implements OnInit, AfterViewInit { const formValue = this.form.value; this.info.startDate = moment(formValue.startDate).format('DD-MMM-YYYY'); this.info.finishDate = moment(formValue.finishDate).format('DD-MMM-YYYY'); - const array = this.form.get('attendances') as FormArray; + const array = this.form.get('attendances') as UntypedFormArray; this.info.body.forEach((item, index) => { item.attendanceType.id = array.controls[index].value.attendanceType; }); return this.info; } - get attendancesArray(): FormArray { - return this.form.get('attendances') as FormArray; + get attendancesArray(): UntypedFormArray { + return this.form.get('attendances') as UntypedFormArray; } } diff --git a/overlord/src/app/employee-benefits/employee-benefits.component.ts b/overlord/src/app/employee-benefits/employee-benefits.component.ts index e0f55f6f..6888722f 100644 --- a/overlord/src/app/employee-benefits/employee-benefits.component.ts +++ b/overlord/src/app/employee-benefits/employee-benefits.component.ts @@ -1,5 +1,5 @@ import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; -import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete'; import { MatDialog } from '@angular/material/dialog'; import { ActivatedRoute, Router } from '@angular/router'; @@ -29,7 +29,7 @@ export class EmployeeBenefitsComponent implements OnInit, AfterViewInit { @ViewChild('employeeElement', { static: true }) employeeElement?: ElementRef; public benefitsObservable = new BehaviorSubject([]); dataSource: EmployeeBenefitsDataSource = new EmployeeBenefitsDataSource(this.benefitsObservable); - form: FormGroup; + form: UntypedFormGroup; voucher: Voucher = new Voucher(); employee: Employee | null = null; accBal: AccountBalance | null = null; @@ -51,7 +51,7 @@ export class EmployeeBenefitsComponent implements OnInit, AfterViewInit { constructor( private route: ActivatedRoute, private router: Router, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private dialog: MatDialog, private toaster: ToasterService, public auth: AuthService, @@ -68,7 +68,7 @@ export class EmployeeBenefitsComponent implements OnInit, AfterViewInit { }); // Setup Employee Autocomplete this.employees = ( - (this.form.get('addRow') as FormControl).get('employee') as FormControl + (this.form.get('addRow') as UntypedFormControl).get('employee') as UntypedFormControl ).valueChanges.pipe( startWith(null), map((x) => (x !== null && x.length >= 1 ? x : null)), @@ -147,10 +147,10 @@ export class EmployeeBenefitsComponent implements OnInit, AfterViewInit { return; } - const formValue = (this.form.get('addRow') as FormControl).value; + const formValue = (this.form.get('addRow') as UntypedFormControl).value; const grossSalary = +formValue.grossSalary; const daysWorked = +formValue.daysWorked; - const date = (this.form.get('date') as FormControl).value; + const date = (this.form.get('date') as UntypedFormControl).value; const daysInMonth = moment(date).daysInMonth(); const esi = EmployeeBenefitsComponent.getEsi(grossSalary, daysWorked, daysInMonth); const pf = EmployeeBenefitsComponent.getPf(grossSalary, daysWorked, daysInMonth); @@ -171,7 +171,7 @@ export class EmployeeBenefitsComponent implements OnInit, AfterViewInit { } resetAddRow() { - (this.form.get('addRow') as FormControl).reset({ + (this.form.get('addRow') as UntypedFormControl).reset({ employee: '', grossSalary: null, daysWorked: null, diff --git a/overlord/src/app/employee-functions/employee-functions.component.ts b/overlord/src/app/employee-functions/employee-functions.component.ts index e6415524..dad610b0 100644 --- a/overlord/src/app/employee-functions/employee-functions.component.ts +++ b/overlord/src/app/employee-functions/employee-functions.component.ts @@ -1,5 +1,5 @@ import { Component } from '@angular/core'; -import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { MatDatepicker } from '@angular/material/datepicker'; import { MatDialog } from '@angular/material/dialog'; import { ActivatedRoute, Router } from '@angular/router'; @@ -17,15 +17,15 @@ import { EmployeeFunctionsService } from './employee-functions.service'; styleUrls: ['./employee-functions.component.css'], }) export class EmployeeFunctionsComponent { - creditSalaryForm: FormGroup; - attendanceRecordForm: FormGroup; - fingerprintForm: FormGroup; + creditSalaryForm: UntypedFormGroup; + attendanceRecordForm: UntypedFormGroup; + fingerprintForm: UntypedFormGroup; fingerprintFile: File | null = null; constructor( private route: ActivatedRoute, private router: Router, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private dialog: MatDialog, private toaster: ToasterService, private auth: AuthService, @@ -44,7 +44,7 @@ export class EmployeeFunctionsComponent { } chosenYearHandler(normalizedYear: Moment) { - const dateControl = this.creditSalaryForm.get('date') as FormControl; + const dateControl = this.creditSalaryForm.get('date') as UntypedFormControl; const ctrlValue = dateControl.value; ctrlValue.year(normalizedYear.year()); ctrlValue.date(ctrlValue.daysInMonth()); @@ -52,7 +52,7 @@ export class EmployeeFunctionsComponent { } chosenMonthHandler(normlizedMonth: Moment, datepicker: MatDatepicker) { - const dateControl = this.creditSalaryForm.get('date') as FormControl; + const dateControl = this.creditSalaryForm.get('date') as UntypedFormControl; const ctrlValue = dateControl.value; ctrlValue.month(normlizedMonth.month()); ctrlValue.date(ctrlValue.daysInMonth()); @@ -61,7 +61,7 @@ export class EmployeeFunctionsComponent { } creditSalary() { - const date = moment((this.creditSalaryForm.get('date') as FormControl).value).format( + const date = moment((this.creditSalaryForm.get('date') as UntypedFormControl).value).format( 'DD-MMM-YYYY', ); if (!date) { @@ -80,10 +80,10 @@ export class EmployeeFunctionsComponent { attendanceRecordUrl() { const startDate = moment( - (this.attendanceRecordForm.get('startDate') as FormControl).value, + (this.attendanceRecordForm.get('startDate') as UntypedFormControl).value, ).format('DD-MMM-YYYY'); const finishDate = moment( - (this.attendanceRecordForm.get('finishDate') as FormControl).value, + (this.attendanceRecordForm.get('finishDate') as UntypedFormControl).value, ).format('DD-MMM-YYYY'); if (!startDate || !finishDate) { // this.toaster.show('Danger', 'Please choose a start and finish date.'); @@ -94,10 +94,10 @@ export class EmployeeFunctionsComponent { fingerPrintUrl() { const startDate = moment( - (this.attendanceRecordForm.get('startDate') as FormControl).value, + (this.attendanceRecordForm.get('startDate') as UntypedFormControl).value, ).format('DD-MMM-YYYY'); const finishDate = moment( - (this.attendanceRecordForm.get('finishDate') as FormControl).value, + (this.attendanceRecordForm.get('finishDate') as UntypedFormControl).value, ).format('DD-MMM-YYYY'); if (!startDate || !finishDate) { // this.toaster.show('Danger', 'Please choose a start and finish date.'); diff --git a/overlord/src/app/employee/employee-detail/employee-detail.component.ts b/overlord/src/app/employee/employee-detail/employee-detail.component.ts index 697597e3..ad37e92e 100644 --- a/overlord/src/app/employee/employee-detail/employee-detail.component.ts +++ b/overlord/src/app/employee/employee-detail/employee-detail.component.ts @@ -1,5 +1,5 @@ import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; -import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { MatDialog } from '@angular/material/dialog'; import { ActivatedRoute, Router } from '@angular/router'; import * as moment from 'moment'; @@ -17,7 +17,7 @@ import { EmployeeService } from '../employee.service'; }) export class EmployeeDetailComponent implements OnInit, AfterViewInit { @ViewChild('nameElement', { static: true }) nameElement?: ElementRef; - form: FormGroup; + form: UntypedFormGroup; costCentres: CostCentre[] = []; item: Employee = new Employee(); @@ -25,7 +25,7 @@ export class EmployeeDetailComponent implements OnInit, AfterViewInit { private route: ActivatedRoute, private router: Router, private dialog: MatDialog, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private toaster: ToasterService, private ser: EmployeeService, ) { @@ -41,7 +41,7 @@ export class EmployeeDetailComponent implements OnInit, AfterViewInit { leavingDate: '', }); // Listen to IsActive Changes - (this.form.get('isActive') as FormControl).valueChanges.subscribe((x) => { + (this.form.get('isActive') as UntypedFormControl).valueChanges.subscribe((x) => { this.item.isActive = x; }); } diff --git a/overlord/src/app/employee/employee-list/employee-list.component.ts b/overlord/src/app/employee/employee-list/employee-list.component.ts index 87e8aa8c..4c904436 100644 --- a/overlord/src/app/employee/employee-list/employee-list.component.ts +++ b/overlord/src/app/employee/employee-list/employee-list.component.ts @@ -1,5 +1,5 @@ import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; -import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort } from '@angular/material/sort'; import { ActivatedRoute } from '@angular/router'; @@ -22,7 +22,7 @@ export class EmployeeListComponent implements OnInit, AfterViewInit { @ViewChild(MatSort, { static: true }) sort?: MatSort; dataSource: EmployeeListDataSource; filter: Observable; - form: FormGroup; + form: UntypedFormGroup; list: Employee[] = []; /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ @@ -37,11 +37,11 @@ export class EmployeeListComponent implements OnInit, AfterViewInit { 'leavingDate', ]; - constructor(private route: ActivatedRoute, private fb: FormBuilder, private toCsv: ToCsvService) { + constructor(private route: ActivatedRoute, private fb: UntypedFormBuilder, private toCsv: ToCsvService) { this.form = this.fb.group({ filter: '', }); - this.filter = (this.form.get('filter') as FormControl).valueChanges.pipe( + this.filter = (this.form.get('filter') as UntypedFormControl).valueChanges.pipe( startWith(''), debounceTime(150), distinctUntilChanged(), diff --git a/overlord/src/app/entries/entries-datasource.ts b/overlord/src/app/entries/entries-datasource.ts index e7a5e850..9b3b1bf1 100644 --- a/overlord/src/app/entries/entries-datasource.ts +++ b/overlord/src/app/entries/entries-datasource.ts @@ -1,7 +1,6 @@ import { DataSource } from '@angular/cdk/collections'; import { MatPaginator } from '@angular/material/paginator'; -import { MatSort } from '@angular/material/sort'; -import { SortDirection } from '@angular/material/sort/sort-direction'; +import { MatSort, SortDirection } from '@angular/material/sort'; import { Observable, of as observableOf } from 'rxjs'; import { Entries } from './entries'; diff --git a/overlord/src/app/entries/entries.component.ts b/overlord/src/app/entries/entries.component.ts index ce4a511f..ccaa70ea 100644 --- a/overlord/src/app/entries/entries.component.ts +++ b/overlord/src/app/entries/entries.component.ts @@ -1,9 +1,8 @@ import { Component, OnInit, ViewChild } from '@angular/core'; -import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { MatPaginator } from '@angular/material/paginator'; import { MatRadioChange } from '@angular/material/radio'; -import { MatSort } from '@angular/material/sort'; -import { SortDirection } from '@angular/material/sort/sort-direction'; +import { MatSort, SortDirection } from '@angular/material/sort'; import { ActivatedRoute, Router } from '@angular/router'; import * as moment from 'moment'; @@ -20,7 +19,7 @@ export class EntriesComponent implements OnInit { @ViewChild(MatSort, { static: true }) sort?: MatSort; info: Report = new Report(); dataSource: EntriesDatasource = new EntriesDatasource(this.info.report, 0); - form: FormGroup; + form: UntypedFormGroup; displayedColumns = [ 'date', 'voucherType', @@ -33,7 +32,7 @@ export class EntriesComponent implements OnInit { posted: boolean | null = null; issue: boolean = false; - constructor(private route: ActivatedRoute, private router: Router, private fb: FormBuilder) { + constructor(private route: ActivatedRoute, private router: Router, private fb: UntypedFormBuilder) { this.form = this.fb.group({ startDate: '', finishDate: '', @@ -70,9 +69,9 @@ export class EntriesComponent implements OnInit { issue: this.issue, }); if (this.posted === null || this.posted) { - (this.form.get('issue') as FormControl).enable(); + (this.form.get('issue') as UntypedFormControl).enable(); } else { - (this.form.get('issue') as FormControl).disable(); + (this.form.get('issue') as UntypedFormControl).disable(); } this.dataSource = new EntriesDatasource( this.info.report, diff --git a/overlord/src/app/incentive/incentive.component.ts b/overlord/src/app/incentive/incentive.component.ts index 4517d9b3..56acaba7 100644 --- a/overlord/src/app/incentive/incentive.component.ts +++ b/overlord/src/app/incentive/incentive.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit } from '@angular/core'; -import { FormArray, FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormArray, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { MatDialog } from '@angular/material/dialog'; import { ActivatedRoute, Router } from '@angular/router'; import * as moment from 'moment'; @@ -26,7 +26,7 @@ import { IncentiveDataSource } from './incentive-datasource'; export class IncentiveComponent implements OnInit { public incentiveObservable = new BehaviorSubject([]); dataSource: IncentiveDataSource = new IncentiveDataSource(this.incentiveObservable); - form: FormGroup; + form: UntypedFormGroup; voucher: Voucher = new Voucher(); account: Account = new Account(); accBal: AccountBalance | null = null; @@ -36,7 +36,7 @@ export class IncentiveComponent implements OnInit { constructor( private route: ActivatedRoute, private router: Router, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private dialog: MatDialog, private toaster: ToasterService, public auth: AuthService, @@ -47,7 +47,7 @@ export class IncentiveComponent implements OnInit { incentives: this.fb.array([]), }); // Listen to Date Change - (this.form.get('date') as FormControl).valueChanges + (this.form.get('date') as UntypedFormControl).valueChanges .pipe(map((x) => moment(x).format('DD-MMM-YYYY'))) .subscribe((x) => { if (x !== this.voucher.date && !this.voucher.id) { @@ -69,7 +69,7 @@ export class IncentiveComponent implements OnInit { loadVoucher(voucher: Voucher) { this.voucher = voucher; - (this.form.get('date') as FormControl).setValue( + (this.form.get('date') as UntypedFormControl).setValue( moment(this.voucher.date, 'DD-MMM-YYYY').toDate(), ); this.form.setControl( @@ -99,7 +99,7 @@ export class IncentiveComponent implements OnInit { less(row: Incentive, i: number) { if (row.points >= 1) { row.points -= 1; - ((this.form.get('incentives') as FormArray).get(`${i}`) as FormGroup).setValue({ + ((this.form.get('incentives') as UntypedFormArray).get(`${i}`) as UntypedFormGroup).setValue({ points: `${row.points}`, }); } @@ -107,18 +107,18 @@ export class IncentiveComponent implements OnInit { change(row: Incentive, i: number) { row.points = +( - ((this.form.get('incentives') as FormArray).get(`${i}`) as FormGroup).get( + ((this.form.get('incentives') as UntypedFormArray).get(`${i}`) as UntypedFormGroup).get( 'points', - ) as FormControl + ) as UntypedFormControl ).value; - ((this.form.get('incentives') as FormArray).get(`${i}`) as FormGroup).setValue({ + ((this.form.get('incentives') as UntypedFormArray).get(`${i}`) as UntypedFormGroup).setValue({ points: `${row.points}`, }); } more(row: Incentive, i: number) { row.points += 1; - ((this.form.get('incentives') as FormArray).get(`${i}`) as FormGroup).setValue({ + ((this.form.get('incentives') as UntypedFormArray).get(`${i}`) as UntypedFormGroup).setValue({ points: `${row.points}`, }); } @@ -171,7 +171,7 @@ export class IncentiveComponent implements OnInit { getVoucher(): Voucher { const formModel = this.form.value; this.voucher.date = moment(formModel.date).format('DD-MMM-YYYY'); - const array = this.form.get('incentives') as FormArray; + const array = this.form.get('incentives') as UntypedFormArray; this.voucher.incentives.forEach((item, index) => { item.points = array.controls[index].value.points; }); diff --git a/overlord/src/app/issue/issue-dialog.component.ts b/overlord/src/app/issue/issue-dialog.component.ts index ee5f8a6e..2433006c 100644 --- a/overlord/src/app/issue/issue-dialog.component.ts +++ b/overlord/src/app/issue/issue-dialog.component.ts @@ -1,5 +1,5 @@ import { Component, Inject, OnInit } from '@angular/core'; -import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { Observable } from 'rxjs'; @@ -17,13 +17,13 @@ import { MathService } from '../shared/math.service'; }) export class IssueDialogComponent implements OnInit { batches: Observable; - form: FormGroup; + form: UntypedFormGroup; batch: Batch = new Batch(); constructor( public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: { inventory: Inventory; date: string }, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private math: MathService, private batchSer: BatchService, ) { @@ -32,7 +32,7 @@ export class IssueDialogComponent implements OnInit { quantity: '', }); // Listen to Batch Autocomplete Change - this.batches = (this.form.get('batch') as FormControl).valueChanges.pipe( + this.batches = (this.form.get('batch') as UntypedFormControl).valueChanges.pipe( startWith(''), debounceTime(150), distinctUntilChanged(), diff --git a/overlord/src/app/issue/issue.component.ts b/overlord/src/app/issue/issue.component.ts index 612e9f45..964c06b0 100644 --- a/overlord/src/app/issue/issue.component.ts +++ b/overlord/src/app/issue/issue.component.ts @@ -1,5 +1,5 @@ import { AfterViewInit, Component, ElementRef, OnInit, OnDestroy, ViewChild } from '@angular/core'; -import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete'; import { MatDialog } from '@angular/material/dialog'; import { ActivatedRoute, Router } from '@angular/router'; @@ -39,7 +39,7 @@ export class IssueComponent implements OnInit, AfterViewInit, OnDestroy { public gridObservable = new BehaviorSubject([]); dataSource: IssueDataSource = new IssueDataSource(this.inventoryObservable); gridDataSource: IssueGridDataSource = new IssueGridDataSource(this.gridObservable); - form: FormGroup; + form: UntypedFormGroup; voucher: Voucher = new Voucher(); costCentres: CostCentre[] = []; batch: Batch | null = null; @@ -52,7 +52,7 @@ export class IssueComponent implements OnInit, AfterViewInit, OnDestroy { constructor( private route: ActivatedRoute, private router: Router, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private dialog: MatDialog, private hotkeys: HotkeysService, private toaster: ToasterService, @@ -75,7 +75,7 @@ export class IssueComponent implements OnInit, AfterViewInit, OnDestroy { }); // Listen to Batch Autocomplete Change this.batches = ( - (this.form.get('addRow') as FormControl).get('batch') as FormControl + (this.form.get('addRow') as UntypedFormControl).get('batch') as UntypedFormControl ).valueChanges.pipe( startWith('null'), debounceTime(150), @@ -85,7 +85,7 @@ export class IssueComponent implements OnInit, AfterViewInit, OnDestroy { ), ); // Listen to Date Change - (this.form.get('date') as FormControl).valueChanges + (this.form.get('date') as UntypedFormControl).valueChanges .pipe(map((x) => moment(x).format('DD-MMM-YYYY'))) .subscribe((x) => this.showGrid(x)); } @@ -160,7 +160,7 @@ export class IssueComponent implements OnInit, AfterViewInit, OnDestroy { } addRow() { - const formValue = (this.form.get('addRow') as FormControl).value; + const formValue = (this.form.get('addRow') as UntypedFormControl).value; const quantity = this.math.parseAmount(formValue.quantity, 2); const isConsumption = this.form.value.source === '7b845f95-dfef-fa4a-897c-f0baf15284a3'; if (this.batch === null || quantity <= 0) { @@ -194,7 +194,7 @@ export class IssueComponent implements OnInit, AfterViewInit, OnDestroy { } resetAddRow() { - (this.form.get('addRow') as FormControl).reset({ + (this.form.get('addRow') as UntypedFormControl).reset({ batch: null, quantity: '', }); @@ -212,7 +212,7 @@ export class IssueComponent implements OnInit, AfterViewInit, OnDestroy { Math.abs(this.voucher.inventories.map((x) => x.amount).reduce((p, c) => p + c, 0)), 2, ); - (this.form.get('amount') as FormControl).setValue(amount); + (this.form.get('amount') as UntypedFormControl).setValue(amount); } editRow(row: Inventory) { diff --git a/overlord/src/app/journal/journal-dialog.component.ts b/overlord/src/app/journal/journal-dialog.component.ts index 2865d8e8..62aaef23 100644 --- a/overlord/src/app/journal/journal-dialog.component.ts +++ b/overlord/src/app/journal/journal-dialog.component.ts @@ -1,5 +1,5 @@ import { Component, Inject, OnInit } from '@angular/core'; -import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { Observable, of as observableOf } from 'rxjs'; @@ -18,14 +18,14 @@ import { MathService } from '../shared/math.service'; }) export class JournalDialogComponent implements OnInit { accounts: Observable; - form: FormGroup; + form: UntypedFormGroup; account: Account = new Account(); accBal: AccountBalance | null = null; constructor( public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: { journal: Journal; date: string }, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private math: MathService, private accountSer: AccountService, ) { @@ -36,7 +36,7 @@ export class JournalDialogComponent implements OnInit { }); this.accBal = null; // Setup Account Autocomplete - this.accounts = (this.form.get('account') as FormControl).valueChanges.pipe( + this.accounts = (this.form.get('account') as UntypedFormControl).valueChanges.pipe( startWith(null), map((x) => (x !== null && x.length >= 1 ? x : null)), debounceTime(150), diff --git a/overlord/src/app/journal/journal.component.ts b/overlord/src/app/journal/journal.component.ts index 4b56d46f..155fc365 100644 --- a/overlord/src/app/journal/journal.component.ts +++ b/overlord/src/app/journal/journal.component.ts @@ -1,5 +1,5 @@ import { AfterViewInit, Component, ElementRef, OnInit, OnDestroy, ViewChild } from '@angular/core'; -import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete'; import { MatDialog } from '@angular/material/dialog'; import { ActivatedRoute, Router } from '@angular/router'; @@ -37,7 +37,7 @@ export class JournalComponent implements OnInit, AfterViewInit, OnDestroy { @ViewChild('dateElement', { static: true }) dateElement?: ElementRef; public journalObservable = new BehaviorSubject([]); dataSource: JournalDataSource = new JournalDataSource(this.journalObservable); - form: FormGroup; + form: UntypedFormGroup; voucher: Voucher = new Voucher(); account: Account | null; accBal: AccountBalance | null = null; @@ -49,7 +49,7 @@ export class JournalComponent implements OnInit, AfterViewInit, OnDestroy { constructor( private route: ActivatedRoute, private router: Router, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private dialog: MatDialog, private hotkeys: HotkeysService, private toaster: ToasterService, @@ -72,7 +72,7 @@ export class JournalComponent implements OnInit, AfterViewInit, OnDestroy { this.accBal = null; // Setup Account Autocomplete this.accounts = ( - (this.form.get('addRow') as FormControl).get('account') as FormControl + (this.form.get('addRow') as UntypedFormControl).get('account') as UntypedFormControl ).valueChanges.pipe( startWith(null), map((x) => (x !== null && x.length >= 1 ? x : null)), @@ -160,7 +160,7 @@ export class JournalComponent implements OnInit, AfterViewInit, OnDestroy { } addRow() { - const formValue = (this.form.get('addRow') as FormControl).value; + const formValue = (this.form.get('addRow') as UntypedFormControl).value; const amount = this.math.journalAmount(formValue.amount, +formValue.debit); if (this.account === null || amount.amount === 0) { return; @@ -192,8 +192,8 @@ export class JournalComponent implements OnInit, AfterViewInit, OnDestroy { Math.abs(this.voucher.journals.map((x) => x.debit * x.amount).reduce((p, c) => p + c)), 2, ); - const { debit } = (this.form.get('addRow') as FormControl).value; - (this.form.get('addRow') as FormControl).reset({ + const { debit } = (this.form.get('addRow') as UntypedFormControl).value; + (this.form.get('addRow') as UntypedFormControl).reset({ debit, account: null, amount: `${amount}`, @@ -212,7 +212,7 @@ export class JournalComponent implements OnInit, AfterViewInit, OnDestroy { width: '750px', data: { journal: { ...row }, - date: moment((this.form.get('date') as FormControl).value).format('DD-MMM-YYYY'), + date: moment((this.form.get('date') as UntypedFormControl).value).format('DD-MMM-YYYY'), }, }); @@ -239,7 +239,7 @@ export class JournalComponent implements OnInit, AfterViewInit, OnDestroy { const amount = Math.abs( this.voucher.journals.map((x) => x.debit * x.amount).reduce((p, c) => p + c, 0), ); - (this.form.get('addRow') as FormControl).patchValue({ + (this.form.get('addRow') as UntypedFormControl).patchValue({ amount, }); } @@ -325,7 +325,7 @@ export class JournalComponent implements OnInit, AfterViewInit, OnDestroy { accountSelected(event: MatAutocompleteSelectedEvent): void { const account = event.option.value; this.account = account; - const date = moment((this.form.get('date') as FormControl).value).format('DD-MMM-YYYY'); + const date = moment((this.form.get('date') as UntypedFormControl).value).format('DD-MMM-YYYY'); this.accountSer.balance(account.id as string, date).subscribe((v) => { this.accBal = v; }); diff --git a/overlord/src/app/ledger/ledger.component.ts b/overlord/src/app/ledger/ledger.component.ts index b9437852..5502d92f 100644 --- a/overlord/src/app/ledger/ledger.component.ts +++ b/overlord/src/app/ledger/ledger.component.ts @@ -1,5 +1,5 @@ import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; -import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort } from '@angular/material/sort'; @@ -27,7 +27,7 @@ export class LedgerComponent implements OnInit, AfterViewInit { @ViewChild(MatSort, { static: true }) sort?: MatSort; info: Ledger = new Ledger(); dataSource: LedgerDataSource = new LedgerDataSource(this.info.body); - form: FormGroup; + form: UntypedFormGroup; selectedRowId = ''; debit = 0; credit = 0; @@ -40,7 +40,7 @@ export class LedgerComponent implements OnInit, AfterViewInit { constructor( private route: ActivatedRoute, private router: Router, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private toCsv: ToCsvService, private ser: LedgerService, private accountSer: AccountService, @@ -51,7 +51,7 @@ export class LedgerComponent implements OnInit, AfterViewInit { account: '', }); - this.accounts = (this.form.get('account') as FormControl).valueChanges.pipe( + this.accounts = (this.form.get('account') as UntypedFormControl).valueChanges.pipe( startWith(null), map((x) => (x !== null && x.length >= 1 ? x : null)), debounceTime(150), diff --git a/overlord/src/app/net-transactions/net-transactions.component.ts b/overlord/src/app/net-transactions/net-transactions.component.ts index d776321d..2fbc8578 100644 --- a/overlord/src/app/net-transactions/net-transactions.component.ts +++ b/overlord/src/app/net-transactions/net-transactions.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit, ViewChild } from '@angular/core'; -import { FormBuilder, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort } from '@angular/material/sort'; import { ActivatedRoute, Router } from '@angular/router'; @@ -18,12 +18,12 @@ export class NetTransactionsComponent implements OnInit { @ViewChild(MatSort, { static: true }) sort?: MatSort; info: NetTransactions = new NetTransactions(); dataSource: NetTransactionsDataSource = new NetTransactionsDataSource(this.info.body); - form: FormGroup; + form: UntypedFormGroup; selectedRowId = ''; /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['type', 'name', 'debit', 'credit']; - constructor(private route: ActivatedRoute, private router: Router, private fb: FormBuilder) { + constructor(private route: ActivatedRoute, private router: Router, private fb: UntypedFormBuilder) { this.form = this.fb.group({ startDate: '', finishDate: '', diff --git a/overlord/src/app/payment/payment-dialog.component.ts b/overlord/src/app/payment/payment-dialog.component.ts index b057753a..5e38fb80 100644 --- a/overlord/src/app/payment/payment-dialog.component.ts +++ b/overlord/src/app/payment/payment-dialog.component.ts @@ -1,5 +1,5 @@ import { Component, Inject, OnInit } from '@angular/core'; -import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { Observable, of as observableOf } from 'rxjs'; @@ -18,14 +18,14 @@ import { MathService } from '../shared/math.service'; }) export class PaymentDialogComponent implements OnInit { accounts: Observable; - form: FormGroup; + form: UntypedFormGroup; account: Account = new Account(); accBal: AccountBalance | null = null; constructor( public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: { journal: Journal; date: string }, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private math: MathService, private accountSer: AccountService, ) { @@ -35,7 +35,7 @@ export class PaymentDialogComponent implements OnInit { }); this.accBal = null; // Setup Account Autocomplete - this.accounts = (this.form.get('account') as FormControl).valueChanges.pipe( + this.accounts = (this.form.get('account') as UntypedFormControl).valueChanges.pipe( startWith(null), map((x) => (x !== null && x.length >= 1 ? x : null)), debounceTime(150), diff --git a/overlord/src/app/payment/payment.component.ts b/overlord/src/app/payment/payment.component.ts index 547ed800..593de468 100644 --- a/overlord/src/app/payment/payment.component.ts +++ b/overlord/src/app/payment/payment.component.ts @@ -1,5 +1,5 @@ import { AfterViewInit, Component, ElementRef, OnInit, OnDestroy, ViewChild } from '@angular/core'; -import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete'; import { MatDialog } from '@angular/material/dialog'; import { ActivatedRoute, Router } from '@angular/router'; @@ -37,7 +37,7 @@ export class PaymentComponent implements OnInit, AfterViewInit, OnDestroy { @ViewChild('dateElement', { static: true }) dateElement?: ElementRef; public journalObservable = new BehaviorSubject([]); dataSource: PaymentDataSource = new PaymentDataSource(this.journalObservable); - form: FormGroup; + form: UntypedFormGroup; paymentAccounts: Account[] = []; paymentJournal: Journal = new Journal(); voucher: Voucher = new Voucher(); @@ -51,7 +51,7 @@ export class PaymentComponent implements OnInit, AfterViewInit, OnDestroy { constructor( private route: ActivatedRoute, private router: Router, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private dialog: MatDialog, private hotkeys: HotkeysService, private toaster: ToasterService, @@ -75,7 +75,7 @@ export class PaymentComponent implements OnInit, AfterViewInit, OnDestroy { this.accBal = null; // Listen to Account Autocomplete Change this.accounts = ( - (this.form.get('addRow') as FormControl).get('account') as FormControl + (this.form.get('addRow') as UntypedFormControl).get('account') as UntypedFormControl ).valueChanges.pipe( startWith(null), map((x) => (x !== null && x.length >= 1 ? x : null)), @@ -84,7 +84,7 @@ export class PaymentComponent implements OnInit, AfterViewInit, OnDestroy { switchMap((x) => (x === null ? observableOf([]) : this.accountSer.autocomplete(x))), ); // Listen to Payment Account Change - (this.form.get('paymentAccount') as FormControl).valueChanges.subscribe((x) => + (this.form.get('paymentAccount') as UntypedFormControl).valueChanges.subscribe((x) => this.router.navigate([], { relativeTo: this.route, queryParams: { a: x }, @@ -174,7 +174,7 @@ export class PaymentComponent implements OnInit, AfterViewInit, OnDestroy { } addRow() { - const amount = this.math.parseAmount((this.form.get('addRow') as FormControl).value.amount, 2); + const amount = this.math.parseAmount((this.form.get('addRow') as UntypedFormControl).value.amount, 2); const debit = 1; if (this.account === null || amount <= 0) { return; @@ -203,7 +203,7 @@ export class PaymentComponent implements OnInit, AfterViewInit, OnDestroy { } resetAddRow() { - (this.form.get('addRow') as FormControl).reset({ + (this.form.get('addRow') as UntypedFormControl).reset({ account: null, amount: null, }); @@ -223,7 +223,7 @@ export class PaymentComponent implements OnInit, AfterViewInit, OnDestroy { Math.abs(journals.map((x) => x.amount).reduce((p, c) => p + c, 0)), 2, ); - (this.form.get('paymentAmount') as FormControl).setValue(this.paymentJournal.amount); + (this.form.get('paymentAmount') as UntypedFormControl).setValue(this.paymentJournal.amount); } editRow(row: Journal) { @@ -231,7 +231,7 @@ export class PaymentComponent implements OnInit, AfterViewInit, OnDestroy { width: '750px', data: { journal: { ...row }, - date: moment((this.form.get('date') as FormControl).value).format('DD-MMM-YYYY'), + date: moment((this.form.get('date') as UntypedFormControl).value).format('DD-MMM-YYYY'), }, }); @@ -338,7 +338,7 @@ export class PaymentComponent implements OnInit, AfterViewInit, OnDestroy { accountSelected(event: MatAutocompleteSelectedEvent): void { const account = event.option.value; this.account = account; - const date = moment((this.form.get('date') as FormControl).value).format('DD-MMM-YYYY'); + const date = moment((this.form.get('date') as UntypedFormControl).value).format('DD-MMM-YYYY'); this.accountSer.balance(account.id as string, date).subscribe((v) => { this.accBal = v; }); diff --git a/overlord/src/app/product-group/product-group-detail/product-group-detail.component.ts b/overlord/src/app/product-group/product-group-detail/product-group-detail.component.ts index 639f56f2..28c06f40 100644 --- a/overlord/src/app/product-group/product-group-detail/product-group-detail.component.ts +++ b/overlord/src/app/product-group/product-group-detail/product-group-detail.component.ts @@ -1,5 +1,5 @@ import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; -import { FormBuilder, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; import { ActivatedRoute, Router } from '@angular/router'; import { ProductGroup } from '../../core/product-group'; @@ -13,13 +13,13 @@ import { ProductGroupService } from '../product-group.service'; }) export class ProductGroupDetailComponent implements OnInit, AfterViewInit { @ViewChild('nameElement', { static: true }) nameElement?: ElementRef; - form: FormGroup; + form: UntypedFormGroup; item: ProductGroup = new ProductGroup(); constructor( private route: ActivatedRoute, private router: Router, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private toaster: ToasterService, private ser: ProductGroupService, ) { diff --git a/overlord/src/app/product-ledger/product-ledger.component.ts b/overlord/src/app/product-ledger/product-ledger.component.ts index 816ae6a6..89818745 100644 --- a/overlord/src/app/product-ledger/product-ledger.component.ts +++ b/overlord/src/app/product-ledger/product-ledger.component.ts @@ -1,5 +1,5 @@ import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; -import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort } from '@angular/material/sort'; @@ -28,7 +28,7 @@ export class ProductLedgerComponent implements OnInit, AfterViewInit { @ViewChild(MatSort, { static: true }) sort?: MatSort; info: ProductLedger = new ProductLedger(); dataSource: ProductLedgerDataSource = new ProductLedgerDataSource(this.info.body); - form: FormGroup; + form: UntypedFormGroup; selectedRowId = ''; debitQuantity = 0; debitAmount = 0; @@ -55,7 +55,7 @@ export class ProductLedgerComponent implements OnInit, AfterViewInit { constructor( private route: ActivatedRoute, private router: Router, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private toCsv: ToCsvService, private ser: ProductLedgerService, private productSer: ProductService, @@ -66,7 +66,7 @@ export class ProductLedgerComponent implements OnInit, AfterViewInit { product: '', }); - this.products = (this.form.get('product') as FormControl).valueChanges.pipe( + this.products = (this.form.get('product') as UntypedFormControl).valueChanges.pipe( startWith(null), map((x) => (x !== null && x.length >= 1 ? x : null)), debounceTime(150), diff --git a/overlord/src/app/product/product-detail/product-detail-dialog.component.ts b/overlord/src/app/product/product-detail/product-detail-dialog.component.ts index 2bb82fc4..9e24b620 100644 --- a/overlord/src/app/product/product-detail/product-detail-dialog.component.ts +++ b/overlord/src/app/product/product-detail/product-detail-dialog.component.ts @@ -1,5 +1,5 @@ import { Component, Inject, OnInit } from '@angular/core'; -import { FormBuilder, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { StockKeepingUnit } from '../../core/product'; @@ -10,13 +10,13 @@ import { StockKeepingUnit } from '../../core/product'; styleUrls: ['./product-detail-dialog.component.css'], }) export class ProductDetailDialogComponent implements OnInit { - form: FormGroup; + form: UntypedFormGroup; constructor( public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: { item: StockKeepingUnit; isSold: boolean; isPurchased: boolean }, - private fb: FormBuilder, + private fb: UntypedFormBuilder, ) { this.form = this.fb.group({ units: '', diff --git a/overlord/src/app/product/product-detail/product-detail.component.ts b/overlord/src/app/product/product-detail/product-detail.component.ts index b23516ea..d8a553c9 100644 --- a/overlord/src/app/product/product-detail/product-detail.component.ts +++ b/overlord/src/app/product/product-detail/product-detail.component.ts @@ -1,5 +1,5 @@ import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; -import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { MatDialog } from '@angular/material/dialog'; import { ActivatedRoute, Router } from '@angular/router'; import { BehaviorSubject } from 'rxjs'; @@ -20,7 +20,7 @@ import { ProductDetailDialogComponent } from './product-detail-dialog.component' }) export class ProductDetailComponent implements OnInit, AfterViewInit { @ViewChild('nameElement', { static: true }) nameElement?: ElementRef; - form: FormGroup; + form: UntypedFormGroup; productGroups: ProductGroup[] = []; public skus = new BehaviorSubject([]); dataSource: ProductDetailDatasource = new ProductDetailDatasource(this.skus); @@ -32,7 +32,7 @@ export class ProductDetailComponent implements OnInit, AfterViewInit { private route: ActivatedRoute, private router: Router, private dialog: MatDialog, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private toaster: ToasterService, private ser: ProductService, ) { @@ -94,7 +94,7 @@ export class ProductDetailComponent implements OnInit, AfterViewInit { } addRow() { - const formValue = (this.form.get('addRow') as FormControl).value; + const formValue = (this.form.get('addRow') as UntypedFormControl).value; const fraction = +formValue.fraction; if (fraction < 1) { this.toaster.show('Danger', 'Fraction has to be >= 1'); @@ -129,7 +129,7 @@ export class ProductDetailComponent implements OnInit, AfterViewInit { } resetAddRow() { - (this.form.get('addRow') as FormControl).reset({ + (this.form.get('addRow') as UntypedFormControl).reset({ units: '', fraction: '', productYield: '', diff --git a/overlord/src/app/product/product-list/product-list.component.ts b/overlord/src/app/product/product-list/product-list.component.ts index 0fb091e7..77420eb8 100644 --- a/overlord/src/app/product/product-list/product-list.component.ts +++ b/overlord/src/app/product/product-list/product-list.component.ts @@ -1,5 +1,5 @@ import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; -import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort } from '@angular/material/sort'; import { ActivatedRoute } from '@angular/router'; @@ -23,18 +23,18 @@ export class ProductListComponent implements OnInit, AfterViewInit { list: Product[] = []; filter: Observable; dataSource: ProductListDataSource; - form: FormGroup; + form: UntypedFormGroup; /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns: string[] = []; private _showExtended = true; - constructor(private route: ActivatedRoute, private fb: FormBuilder, private toCsv: ToCsvService) { + constructor(private route: ActivatedRoute, private fb: UntypedFormBuilder, private toCsv: ToCsvService) { this.showExtended = true; this.form = this.fb.group({ filter: '', }); - this.filter = (this.form.get('filter') as FormControl).valueChanges.pipe( + this.filter = (this.form.get('filter') as UntypedFormControl).valueChanges.pipe( startWith(''), debounceTime(150), distinctUntilChanged(), diff --git a/overlord/src/app/profit-loss/profit-loss.component.ts b/overlord/src/app/profit-loss/profit-loss.component.ts index f093baa5..c1c68dfb 100644 --- a/overlord/src/app/profit-loss/profit-loss.component.ts +++ b/overlord/src/app/profit-loss/profit-loss.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit, ViewChild } from '@angular/core'; -import { FormBuilder, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort } from '@angular/material/sort'; import { ActivatedRoute, Router } from '@angular/router'; @@ -18,12 +18,12 @@ export class ProfitLossComponent implements OnInit { @ViewChild(MatSort, { static: true }) sort?: MatSort; info: ProfitLoss = new ProfitLoss(); dataSource: ProfitLossDataSource = new ProfitLossDataSource(this.info.body); - form: FormGroup; + form: UntypedFormGroup; selectedRowId = ''; /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['group', 'name', 'amount', 'total']; - constructor(private route: ActivatedRoute, private router: Router, private fb: FormBuilder) { + constructor(private route: ActivatedRoute, private router: Router, private fb: UntypedFormBuilder) { this.form = this.fb.group({ startDate: '', finishDate: '', diff --git a/overlord/src/app/purchase-entries/purchase-entries.component.ts b/overlord/src/app/purchase-entries/purchase-entries.component.ts index 114e6c12..37e55d6a 100644 --- a/overlord/src/app/purchase-entries/purchase-entries.component.ts +++ b/overlord/src/app/purchase-entries/purchase-entries.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit, ViewChild } from '@angular/core'; -import { FormBuilder, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort } from '@angular/material/sort'; import { ActivatedRoute, Router } from '@angular/router'; @@ -18,7 +18,7 @@ export class PurchaseEntriesComponent implements OnInit { @ViewChild(MatSort, { static: true }) sort?: MatSort; info: PurchaseEntries = new PurchaseEntries(); dataSource: PurchaseEntriesDataSource = new PurchaseEntriesDataSource(this.info.body); - form: FormGroup; + form: UntypedFormGroup; selectedRowId = ''; /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = [ @@ -32,7 +32,7 @@ export class PurchaseEntriesComponent implements OnInit { 'amount', ]; - constructor(private route: ActivatedRoute, private router: Router, private fb: FormBuilder) { + constructor(private route: ActivatedRoute, private router: Router, private fb: UntypedFormBuilder) { this.form = this.fb.group({ startDate: '', finishDate: '', diff --git a/overlord/src/app/purchase-return/purchase-return-dialog.component.ts b/overlord/src/app/purchase-return/purchase-return-dialog.component.ts index e4b971b3..e9355fb9 100644 --- a/overlord/src/app/purchase-return/purchase-return-dialog.component.ts +++ b/overlord/src/app/purchase-return/purchase-return-dialog.component.ts @@ -1,5 +1,5 @@ import { Component, Inject, OnInit } from '@angular/core'; -import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { Observable } from 'rxjs'; @@ -17,13 +17,13 @@ import { MathService } from '../shared/math.service'; }) export class PurchaseReturnDialogComponent implements OnInit { batches: Observable; - form: FormGroup; + form: UntypedFormGroup; batch: Batch = new Batch(); constructor( public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: { inventory: Inventory; date: string }, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private math: MathService, private batchSer: BatchService, ) { @@ -32,7 +32,7 @@ export class PurchaseReturnDialogComponent implements OnInit { quantity: '', }); // Listen to Batch Autocomplete Change - this.batches = (this.form.get('batch') as FormControl).valueChanges.pipe( + this.batches = (this.form.get('batch') as UntypedFormControl).valueChanges.pipe( startWith('null'), debounceTime(150), distinctUntilChanged(), diff --git a/overlord/src/app/purchase-return/purchase-return.component.ts b/overlord/src/app/purchase-return/purchase-return.component.ts index f7cd4fe4..11b616e4 100644 --- a/overlord/src/app/purchase-return/purchase-return.component.ts +++ b/overlord/src/app/purchase-return/purchase-return.component.ts @@ -1,5 +1,5 @@ import { AfterViewInit, Component, ElementRef, OnInit, OnDestroy, ViewChild } from '@angular/core'; -import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete'; import { MatDialog } from '@angular/material/dialog'; import { ActivatedRoute, Router } from '@angular/router'; @@ -40,7 +40,7 @@ export class PurchaseReturnComponent implements OnInit, AfterViewInit, OnDestroy @ViewChild('dateElement', { static: true }) dateElement?: ElementRef; public inventoryObservable = new BehaviorSubject([]); dataSource: PurchaseReturnDataSource = new PurchaseReturnDataSource(this.inventoryObservable); - form: FormGroup; + form: UntypedFormGroup; voucher: Voucher = new Voucher(); batch: Batch | null = null; accBal: AccountBalance | null = null; @@ -53,7 +53,7 @@ export class PurchaseReturnComponent implements OnInit, AfterViewInit, OnDestroy constructor( private route: ActivatedRoute, private router: Router, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private dialog: MatDialog, private hotkeys: HotkeysService, private toaster: ToasterService, @@ -75,7 +75,7 @@ export class PurchaseReturnComponent implements OnInit, AfterViewInit, OnDestroy narration: '', }); // Listen to Account Autocomplete Change - this.accounts = (this.form.get('account') as FormControl).valueChanges.pipe( + this.accounts = (this.form.get('account') as UntypedFormControl).valueChanges.pipe( startWith(null), map((x) => (x !== null && x.length >= 1 ? x : null)), debounceTime(150), @@ -84,7 +84,7 @@ export class PurchaseReturnComponent implements OnInit, AfterViewInit, OnDestroy ); // Listen to Batch Autocomplete Change this.batches = ( - (this.form.get('addRow') as FormControl).get('batch') as FormControl + (this.form.get('addRow') as UntypedFormControl).get('batch') as UntypedFormControl ).valueChanges.pipe( startWith(''), debounceTime(150), @@ -174,7 +174,7 @@ export class PurchaseReturnComponent implements OnInit, AfterViewInit, OnDestroy } addRow() { - const formValue = (this.form.get('addRow') as FormControl).value; + const formValue = (this.form.get('addRow') as UntypedFormControl).value; const quantity = this.math.parseAmount(formValue.quantity, 2); if (this.batch === null || quantity <= 0 || this.batch.quantityRemaining < quantity) { return; @@ -199,7 +199,7 @@ export class PurchaseReturnComponent implements OnInit, AfterViewInit, OnDestroy } resetAddRow() { - (this.form.get('addRow') as FormControl).reset({ + (this.form.get('addRow') as UntypedFormControl).reset({ batch: null, quantity: '', }); @@ -213,7 +213,7 @@ export class PurchaseReturnComponent implements OnInit, AfterViewInit, OnDestroy updateView() { this.inventoryObservable.next(this.voucher.inventories); - (this.form.get('amount') as FormControl).setValue( + (this.form.get('amount') as UntypedFormControl).setValue( round(Math.abs(this.voucher.inventories.map((x) => x.amount).reduce((p, c) => p + c, 0)), 2), ); } @@ -328,7 +328,7 @@ export class PurchaseReturnComponent implements OnInit, AfterViewInit, OnDestroy } accountSelected(event: MatAutocompleteSelectedEvent): void { - (this.form.get('account') as FormControl).setValue(event.option.value); + (this.form.get('account') as UntypedFormControl).setValue(event.option.value); } batchSelected(event: MatAutocompleteSelectedEvent): void { diff --git a/overlord/src/app/purchase/purchase-dialog.component.ts b/overlord/src/app/purchase/purchase-dialog.component.ts index afa5ecdd..8634e2b1 100644 --- a/overlord/src/app/purchase/purchase-dialog.component.ts +++ b/overlord/src/app/purchase/purchase-dialog.component.ts @@ -1,5 +1,5 @@ import { Component, Inject, OnInit } from '@angular/core'; -import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { round } from 'mathjs'; @@ -20,13 +20,13 @@ import { MathService } from '../shared/math.service'; }) export class PurchaseDialogComponent implements OnInit { products: Observable; - form: FormGroup; + form: UntypedFormGroup; product: ProductSku = new ProductSku(); constructor( public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: { inventory: Inventory }, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private math: MathService, private productSer: ProductService, ) { @@ -38,7 +38,7 @@ export class PurchaseDialogComponent implements OnInit { discount: '', }); // Listen to Product Autocomplete Change - this.products = (this.form.get('product') as FormControl).valueChanges.pipe( + this.products = (this.form.get('product') as UntypedFormControl).valueChanges.pipe( startWith(null), map((x) => (x !== null && x.length >= 1 ? x : null)), debounceTime(150), @@ -64,7 +64,7 @@ export class PurchaseDialogComponent implements OnInit { productSelected(event: MatAutocompleteSelectedEvent): void { this.product = event.option.value; - (this.form.get('price') as FormControl).setValue(this.product.costPrice); + (this.form.get('price') as UntypedFormControl).setValue(this.product.costPrice); } accept(): void { diff --git a/overlord/src/app/purchase/purchase.component.ts b/overlord/src/app/purchase/purchase.component.ts index 65e97ccc..917770fc 100644 --- a/overlord/src/app/purchase/purchase.component.ts +++ b/overlord/src/app/purchase/purchase.component.ts @@ -1,5 +1,5 @@ import { AfterViewInit, Component, ElementRef, OnInit, OnDestroy, ViewChild } from '@angular/core'; -import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete'; import { MatDialog } from '@angular/material/dialog'; import { ActivatedRoute, Router } from '@angular/router'; @@ -42,7 +42,7 @@ export class PurchaseComponent implements OnInit, AfterViewInit, OnDestroy { @ViewChild('dateElement', { static: true }) dateElement?: ElementRef; public inventoryObservable = new BehaviorSubject([]); dataSource: PurchaseDataSource = new PurchaseDataSource(this.inventoryObservable); - form: FormGroup; + form: UntypedFormGroup; voucher: Voucher = new Voucher(); product: ProductSku | null = null; accBal: AccountBalance | null = null; @@ -55,7 +55,7 @@ export class PurchaseComponent implements OnInit, AfterViewInit, OnDestroy { constructor( private route: ActivatedRoute, private router: Router, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private dialog: MatDialog, private hotkeys: HotkeysService, private toaster: ToasterService, @@ -81,7 +81,7 @@ export class PurchaseComponent implements OnInit, AfterViewInit, OnDestroy { }); this.accBal = null; // Listen to Account Autocomplete Change - this.accounts = (this.form.get('account') as FormControl).valueChanges.pipe( + this.accounts = (this.form.get('account') as UntypedFormControl).valueChanges.pipe( startWith(null), map((x) => (x !== null && x.length >= 1 ? x : null)), debounceTime(150), @@ -90,7 +90,7 @@ export class PurchaseComponent implements OnInit, AfterViewInit, OnDestroy { ); // Listen to Product Autocomplete Change this.products = ( - (this.form.get('addRow') as FormControl).get('product') as FormControl + (this.form.get('addRow') as UntypedFormControl).get('product') as UntypedFormControl ).valueChanges.pipe( startWith(null), map((x) => (x !== null && x.length >= 1 ? x : null)), @@ -191,7 +191,7 @@ export class PurchaseComponent implements OnInit, AfterViewInit, OnDestroy { } addRow() { - const formValue = (this.form.get('addRow') as FormControl).value; + const formValue = (this.form.get('addRow') as UntypedFormControl).value; const quantity = this.math.parseAmount(formValue.quantity, 2); if (this.product === null || quantity <= 0) { return; @@ -228,7 +228,7 @@ export class PurchaseComponent implements OnInit, AfterViewInit, OnDestroy { } resetAddRow() { - (this.form.get('addRow') as FormControl).reset({ + (this.form.get('addRow') as UntypedFormControl).reset({ product: null, quantity: '', price: '', @@ -236,9 +236,9 @@ export class PurchaseComponent implements OnInit, AfterViewInit, OnDestroy { discount: '', }); this.product = null; - ((this.form.get('addRow') as FormControl).get('price') as FormControl).enable(); - ((this.form.get('addRow') as FormControl).get('tax') as FormControl).enable(); - ((this.form.get('addRow') as FormControl).get('discount') as FormControl).enable(); + ((this.form.get('addRow') as UntypedFormControl).get('price') as UntypedFormControl).enable(); + ((this.form.get('addRow') as UntypedFormControl).get('tax') as UntypedFormControl).enable(); + ((this.form.get('addRow') as UntypedFormControl).get('discount') as UntypedFormControl).enable(); setTimeout(() => { if (this.productElement) { this.productElement.nativeElement.focus(); @@ -248,7 +248,7 @@ export class PurchaseComponent implements OnInit, AfterViewInit, OnDestroy { updateView() { this.inventoryObservable.next(this.voucher.inventories); - (this.form.get('amount') as FormControl).setValue( + (this.form.get('amount') as UntypedFormControl).setValue( round(Math.abs(this.voucher.inventories.map((x) => x.amount).reduce((p, c) => p + c, 0)), 2), ); } @@ -360,26 +360,26 @@ export class PurchaseComponent implements OnInit, AfterViewInit, OnDestroy { } accountSelected(event: MatAutocompleteSelectedEvent): void { - (this.form.get('account') as FormControl).setValue(event.option.value); + (this.form.get('account') as UntypedFormControl).setValue(event.option.value); } productSelected(event: MatAutocompleteSelectedEvent): void { const product: ProductSku = event.option.value; - const addRowForm: FormControl = this.form.get('addRow') as FormControl; + const addRowForm: UntypedFormControl = this.form.get('addRow') as UntypedFormControl; this.product = product; - (addRowForm.get('price') as FormControl).setValue(product.costPrice); + (addRowForm.get('price') as UntypedFormControl).setValue(product.costPrice); if (product.isRateContracted) { - (addRowForm.get('price') as FormControl).disable(); - (addRowForm.get('tax') as FormControl).disable(); - (addRowForm.get('discount') as FormControl).disable(); - (addRowForm.get('tax') as FormControl).setValue('RC'); - (addRowForm.get('discount') as FormControl).setValue('RC'); + (addRowForm.get('price') as UntypedFormControl).disable(); + (addRowForm.get('tax') as UntypedFormControl).disable(); + (addRowForm.get('discount') as UntypedFormControl).disable(); + (addRowForm.get('tax') as UntypedFormControl).setValue('RC'); + (addRowForm.get('discount') as UntypedFormControl).setValue('RC'); } else { - (addRowForm.get('price') as FormControl).enable(); - (addRowForm.get('tax') as FormControl).enable(); - (addRowForm.get('discount') as FormControl).enable(); - (addRowForm.get('tax') as FormControl).setValue(''); - (addRowForm.get('discount') as FormControl).setValue(''); + (addRowForm.get('price') as UntypedFormControl).enable(); + (addRowForm.get('tax') as UntypedFormControl).enable(); + (addRowForm.get('discount') as UntypedFormControl).enable(); + (addRowForm.get('tax') as UntypedFormControl).setValue(''); + (addRowForm.get('discount') as UntypedFormControl).setValue(''); } } diff --git a/overlord/src/app/purchases/purchases.component.ts b/overlord/src/app/purchases/purchases.component.ts index fbe1715d..695a6f92 100644 --- a/overlord/src/app/purchases/purchases.component.ts +++ b/overlord/src/app/purchases/purchases.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit, ViewChild } from '@angular/core'; -import { FormBuilder, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort } from '@angular/material/sort'; import { ActivatedRoute, Router } from '@angular/router'; @@ -19,12 +19,12 @@ export class PurchasesComponent implements OnInit { @ViewChild(MatSort, { static: true }) sort?: MatSort; info: Purchases = new Purchases(); dataSource: PurchasesDataSource = new PurchasesDataSource(this.info.body); - form: FormGroup; + form: UntypedFormGroup; selectedRowId = ''; /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['product', 'quantity', 'rate', 'amount']; - constructor(private route: ActivatedRoute, private router: Router, private fb: FormBuilder) { + constructor(private route: ActivatedRoute, private router: Router, private fb: UntypedFormBuilder) { this.form = this.fb.group({ startDate: '', finishDate: '', diff --git a/overlord/src/app/rate-contract/rate-contract-detail/rate-contract-detail.component.ts b/overlord/src/app/rate-contract/rate-contract-detail/rate-contract-detail.component.ts index a9ff97ad..94e6d467 100644 --- a/overlord/src/app/rate-contract/rate-contract-detail/rate-contract-detail.component.ts +++ b/overlord/src/app/rate-contract/rate-contract-detail/rate-contract-detail.component.ts @@ -1,5 +1,5 @@ import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; -import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete'; import { MatDialog } from '@angular/material/dialog'; import { ActivatedRoute, Router } from '@angular/router'; @@ -31,7 +31,7 @@ export class RateContractDetailComponent implements OnInit, AfterViewInit { @ViewChild('productElement', { static: true }) productElement?: ElementRef; public itemsObservable = new BehaviorSubject([]); dataSource: RateContractDetailDatasource = new RateContractDetailDatasource(this.itemsObservable); - form: FormGroup; + form: UntypedFormGroup; item: RateContract = new RateContract(); product: Product | null = null; @@ -44,7 +44,7 @@ export class RateContractDetailComponent implements OnInit, AfterViewInit { constructor( private route: ActivatedRoute, private router: Router, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private toaster: ToasterService, private dialog: MatDialog, private math: MathService, @@ -63,7 +63,7 @@ export class RateContractDetailComponent implements OnInit, AfterViewInit { }), narration: '', }); - this.accounts = (this.form.get('account') as FormControl).valueChanges.pipe( + this.accounts = (this.form.get('account') as UntypedFormControl).valueChanges.pipe( startWith(null), map((x) => (x !== null && x.length >= 1 ? x : null)), debounceTime(150), @@ -72,7 +72,7 @@ export class RateContractDetailComponent implements OnInit, AfterViewInit { ); // Listen to Product Autocomplete Change this.products = ( - (this.form.get('addRow') as FormControl).get('product') as FormControl + (this.form.get('addRow') as UntypedFormControl).get('product') as UntypedFormControl ).valueChanges.pipe( startWith(null), map((x) => (x !== null && x.length >= 1 ? x : null)), @@ -115,7 +115,7 @@ export class RateContractDetailComponent implements OnInit, AfterViewInit { } addRow() { - const formValue = (this.form.get('addRow') as FormControl).value; + const formValue = (this.form.get('addRow') as UntypedFormControl).value; const price = this.math.parseAmount(formValue.price, 2); if (this.product === null || price <= 0) { return; @@ -136,7 +136,7 @@ export class RateContractDetailComponent implements OnInit, AfterViewInit { } resetAddRow() { - (this.form.get('addRow') as FormControl).reset({ + (this.form.get('addRow') as UntypedFormControl).reset({ product: null, price: '', }); @@ -157,7 +157,7 @@ export class RateContractDetailComponent implements OnInit, AfterViewInit { } accountSelected(event: MatAutocompleteSelectedEvent): void { - (this.form.get('account') as FormControl).setValue(event.option.value); + (this.form.get('account') as UntypedFormControl).setValue(event.option.value); } productSelected(event: MatAutocompleteSelectedEvent): void { diff --git a/overlord/src/app/raw-material-cost/raw-material-cost.component.ts b/overlord/src/app/raw-material-cost/raw-material-cost.component.ts index 5b59e8aa..aed94593 100644 --- a/overlord/src/app/raw-material-cost/raw-material-cost.component.ts +++ b/overlord/src/app/raw-material-cost/raw-material-cost.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit, ViewChild } from '@angular/core'; -import { FormBuilder, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort } from '@angular/material/sort'; import { ActivatedRoute, Router } from '@angular/router'; @@ -20,7 +20,7 @@ export class RawMaterialCostComponent implements OnInit { @ViewChild(MatSort, { static: true }) sort?: MatSort; info: RawMaterialCost = new RawMaterialCost(); dataSource: RawMaterialCostDataSource = new RawMaterialCostDataSource(this.info.body); - form: FormGroup; + form: UntypedFormGroup; debitQuantity = 0; debitAmount = 0; creditQuantity = 0; @@ -35,7 +35,7 @@ export class RawMaterialCostComponent implements OnInit { constructor( private route: ActivatedRoute, private router: Router, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private toCsv: ToCsvService, ) { this.form = this.fb.group({ diff --git a/overlord/src/app/receipt/receipt-dialog.component.ts b/overlord/src/app/receipt/receipt-dialog.component.ts index 1d2ed069..8ea25f80 100644 --- a/overlord/src/app/receipt/receipt-dialog.component.ts +++ b/overlord/src/app/receipt/receipt-dialog.component.ts @@ -1,5 +1,5 @@ import { Component, Inject, OnInit } from '@angular/core'; -import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { Observable, of as observableOf } from 'rxjs'; @@ -18,14 +18,14 @@ import { MathService } from '../shared/math.service'; }) export class ReceiptDialogComponent implements OnInit { accounts: Observable; - form: FormGroup; + form: UntypedFormGroup; account: Account = new Account(); accBal: AccountBalance | null = null; constructor( public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: { journal: Journal; date: string }, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private math: MathService, private accountSer: AccountService, ) { @@ -35,7 +35,7 @@ export class ReceiptDialogComponent implements OnInit { }); this.accBal = null; // Setup Account Autocomplete - this.accounts = (this.form.get('account') as FormControl).valueChanges.pipe( + this.accounts = (this.form.get('account') as UntypedFormControl).valueChanges.pipe( startWith(null), map((x) => (x !== null && x.length >= 1 ? x : null)), debounceTime(150), diff --git a/overlord/src/app/receipt/receipt.component.ts b/overlord/src/app/receipt/receipt.component.ts index b4090078..aaf047a8 100644 --- a/overlord/src/app/receipt/receipt.component.ts +++ b/overlord/src/app/receipt/receipt.component.ts @@ -1,5 +1,5 @@ import { AfterViewInit, Component, ElementRef, OnInit, OnDestroy, ViewChild } from '@angular/core'; -import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete'; import { MatDialog } from '@angular/material/dialog'; import { ActivatedRoute, Router } from '@angular/router'; @@ -37,7 +37,7 @@ export class ReceiptComponent implements OnInit, AfterViewInit, OnDestroy { @ViewChild('dateElement', { static: true }) dateElement?: ElementRef; public journalObservable = new BehaviorSubject([]); dataSource: ReceiptDataSource = new ReceiptDataSource(this.journalObservable); - form: FormGroup; + form: UntypedFormGroup; receiptAccounts: Account[] = []; receiptJournal: Journal = new Journal(); voucher: Voucher = new Voucher(); @@ -51,7 +51,7 @@ export class ReceiptComponent implements OnInit, AfterViewInit, OnDestroy { constructor( private route: ActivatedRoute, private router: Router, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private dialog: MatDialog, private hotkeys: HotkeysService, private toaster: ToasterService, @@ -74,7 +74,7 @@ export class ReceiptComponent implements OnInit, AfterViewInit, OnDestroy { this.accBal = null; // Listen to Account Autocomplete Change this.accounts = ( - (this.form.get('addRow') as FormControl).get('account') as FormControl + (this.form.get('addRow') as UntypedFormControl).get('account') as UntypedFormControl ).valueChanges.pipe( startWith(null), map((x) => (x !== null && x.length >= 1 ? x : null)), @@ -83,7 +83,7 @@ export class ReceiptComponent implements OnInit, AfterViewInit, OnDestroy { switchMap((x) => (x === null ? observableOf([]) : this.accountSer.autocomplete(x))), ); // Listen to Receipt Account Change - (this.form.get('receiptAccount') as FormControl).valueChanges.subscribe((x) => + (this.form.get('receiptAccount') as UntypedFormControl).valueChanges.subscribe((x) => this.router.navigate([], { relativeTo: this.route, queryParams: { a: x }, @@ -173,7 +173,7 @@ export class ReceiptComponent implements OnInit, AfterViewInit, OnDestroy { } addRow() { - const amount = this.math.parseAmount((this.form.get('addRow') as FormControl).value.amount, 2); + const amount = this.math.parseAmount((this.form.get('addRow') as UntypedFormControl).value.amount, 2); const debit = -1; if (this.account === null || amount <= 0) { return; @@ -202,7 +202,7 @@ export class ReceiptComponent implements OnInit, AfterViewInit, OnDestroy { } resetAddRow() { - (this.form.get('addRow') as FormControl).reset({ + (this.form.get('addRow') as UntypedFormControl).reset({ account: null, amount: null, }); @@ -222,7 +222,7 @@ export class ReceiptComponent implements OnInit, AfterViewInit, OnDestroy { Math.abs(journals.map((x) => x.amount).reduce((p, c) => p + c, 0)), 2, ); - (this.form.get('receiptAmount') as FormControl).setValue(this.receiptJournal.amount); + (this.form.get('receiptAmount') as UntypedFormControl).setValue(this.receiptJournal.amount); } editRow(row: Journal) { @@ -230,7 +230,7 @@ export class ReceiptComponent implements OnInit, AfterViewInit, OnDestroy { width: '750px', data: { journal: { ...row }, - date: moment((this.form.get('date') as FormControl).value).format('DD-MMM-YYYY'), + date: moment((this.form.get('date') as UntypedFormControl).value).format('DD-MMM-YYYY'), }, }); @@ -337,7 +337,7 @@ export class ReceiptComponent implements OnInit, AfterViewInit, OnDestroy { accountSelected(event: MatAutocompleteSelectedEvent): void { const account = event.option.value; this.account = account; - const date = moment((this.form.get('date') as FormControl).value).format('DD-MMM-YYYY'); + const date = moment((this.form.get('date') as UntypedFormControl).value).format('DD-MMM-YYYY'); this.accountSer.balance(account.id as string, date).subscribe((v) => { this.accBal = v; }); diff --git a/overlord/src/app/recipe/recipe-detail/recipe-detail.component.ts b/overlord/src/app/recipe/recipe-detail/recipe-detail.component.ts index 9c7a0eec..3bd43039 100644 --- a/overlord/src/app/recipe/recipe-detail/recipe-detail.component.ts +++ b/overlord/src/app/recipe/recipe-detail/recipe-detail.component.ts @@ -1,5 +1,5 @@ import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; -import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete'; import { MatDialog } from '@angular/material/dialog'; import { ActivatedRoute, Router } from '@angular/router'; @@ -30,7 +30,7 @@ export class RecipeDetailComponent implements OnInit, AfterViewInit { @ViewChild('ingredientElement', { static: true }) ingredientElement?: ElementRef; public itemsObservable = new BehaviorSubject([]); dataSource: RecipeDetailDatasource = new RecipeDetailDatasource(this.itemsObservable); - form: FormGroup; + form: UntypedFormGroup; product: ProductSku | null; products: Observable; ingredient: ProductSku | null; @@ -42,7 +42,7 @@ export class RecipeDetailComponent implements OnInit, AfterViewInit { constructor( private route: ActivatedRoute, private router: Router, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private dialog: MatDialog, private toaster: ToasterService, private math: MathService, @@ -66,7 +66,7 @@ export class RecipeDetailComponent implements OnInit, AfterViewInit { }), }); // Setup Product Autocomplete - this.products = (this.form.get('product') as FormControl).valueChanges.pipe( + this.products = (this.form.get('product') as UntypedFormControl).valueChanges.pipe( startWith(null), map((x) => (x !== null && x.length >= 1 ? x : null)), debounceTime(150), @@ -75,7 +75,7 @@ export class RecipeDetailComponent implements OnInit, AfterViewInit { ); // Setup Product Autocomplete this.ingredients = ( - (this.form.get('addRow') as FormControl).get('ingredient') as FormControl + (this.form.get('addRow') as UntypedFormControl).get('ingredient') as UntypedFormControl ).valueChanges.pipe( startWith(null), map((x) => (x !== null && x.length >= 1 ? x : null)), @@ -133,8 +133,8 @@ export class RecipeDetailComponent implements OnInit, AfterViewInit { productSelected(event: MatAutocompleteSelectedEvent): void { const product: ProductSku = event.option.value; this.item.sku = product; - (this.form.get('product') as FormControl).setValue(product); - (this.form.get('salePrice') as FormControl).setValue('' + (product.salePrice ?? 0)); + (this.form.get('product') as UntypedFormControl).setValue(product); + (this.form.get('salePrice') as UntypedFormControl).setValue('' + (product.salePrice ?? 0)); } ingredientSelected(event: MatAutocompleteSelectedEvent): void { @@ -144,14 +144,14 @@ export class RecipeDetailComponent implements OnInit, AfterViewInit { this.ser .getIngredientDetails(ingredient.id, item.validFrom, item.validTill) .subscribe((x) => - ((this.form.get('addRow') as FormControl).get('rate') as FormControl).setValue( + ((this.form.get('addRow') as UntypedFormControl).get('rate') as UntypedFormControl).setValue( '' + x.costPrice, ), ); } addRow() { - const formValue = (this.form.get('addRow') as FormControl).value; + const formValue = (this.form.get('addRow') as UntypedFormControl).value; const quantity = this.math.parseAmount(formValue.quantity, 2); const rate = this.math.parseAmount(formValue.rate, 2); if (this.ingredient === null || quantity <= 0 || rate <= 0) { @@ -176,7 +176,7 @@ export class RecipeDetailComponent implements OnInit, AfterViewInit { } resetAddRow() { - (this.form.get('addRow') as FormControl).reset({ + (this.form.get('addRow') as UntypedFormControl).reset({ ingredient: null, quantity: '', rate: '', @@ -195,13 +195,13 @@ export class RecipeDetailComponent implements OnInit, AfterViewInit { this.item.items.map((x) => x.quantity * x.price).reduce((p, c) => p + c, 0), 2, ); - (this.form.get('costPrice') as FormControl).setValue(costPrice); + (this.form.get('costPrice') as UntypedFormControl).setValue(costPrice); const salePrice = this.math.parseAmount(this.form.value.salePrice, 2); if (salePrice < 0) { return; } const costPercentage = round((100 * costPrice) / salePrice, 2); - (this.form.get('costPercentage') as FormControl).setValue(costPercentage); + (this.form.get('costPercentage') as UntypedFormControl).setValue(costPercentage); } deleteRow(row: RecipeItem) { diff --git a/overlord/src/app/recipe/recipe-list/recipe-list.component.ts b/overlord/src/app/recipe/recipe-list/recipe-list.component.ts index 0704c7c2..28da3494 100644 --- a/overlord/src/app/recipe/recipe-list/recipe-list.component.ts +++ b/overlord/src/app/recipe/recipe-list/recipe-list.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit, ViewChild } from '@angular/core'; -import { FormBuilder, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort } from '@angular/material/sort'; import { ActivatedRoute } from '@angular/router'; @@ -19,7 +19,7 @@ import { RecipeListDatasource } from './recipe-list-datasource'; export class RecipeListComponent implements OnInit { @ViewChild(MatPaginator, { static: true }) paginator?: MatPaginator; @ViewChild(MatSort, { static: true }) sort?: MatSort; - form: FormGroup; + form: UntypedFormGroup; productGroups: ProductGroup[] = []; validFromFilter: BehaviorSubject = new BehaviorSubject(null); validTillFilter: BehaviorSubject = new BehaviorSubject(null); @@ -36,7 +36,7 @@ export class RecipeListComponent implements OnInit { /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['name', 'validity', 'salePrice', 'costPrice', 'costPercentage']; - constructor(private route: ActivatedRoute, private fb: FormBuilder) { + constructor(private route: ActivatedRoute, private fb: UntypedFormBuilder) { this.form = this.fb.group({ validFrom: '', validTill: '', diff --git a/overlord/src/app/role/role-detail/role-detail.component.ts b/overlord/src/app/role/role-detail/role-detail.component.ts index a4bdd94d..f6c87611 100644 --- a/overlord/src/app/role/role-detail/role-detail.component.ts +++ b/overlord/src/app/role/role-detail/role-detail.component.ts @@ -1,5 +1,5 @@ import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; -import { FormArray, FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormArray, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { MatDialog } from '@angular/material/dialog'; import { ActivatedRoute, Router } from '@angular/router'; @@ -15,13 +15,13 @@ import { RoleService } from '../role.service'; }) export class RoleDetailComponent implements OnInit, AfterViewInit { @ViewChild('nameElement', { static: true }) nameElement?: ElementRef; - form: FormGroup; + form: UntypedFormGroup; item: Role = new Role(); constructor( private route: ActivatedRoute, private router: Router, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private toaster: ToasterService, private dialog: MatDialog, private ser: RoleService, @@ -37,7 +37,7 @@ export class RoleDetailComponent implements OnInit, AfterViewInit { const data = value as { item: Role }; this.item = data.item; - (this.form.get('name') as FormControl).setValue(this.item.name); + (this.form.get('name') as UntypedFormControl).setValue(this.item.name); this.form.setControl( 'permissions', this.fb.array( @@ -99,7 +99,7 @@ export class RoleDetailComponent implements OnInit, AfterViewInit { getItem(): Role { const formModel = this.form.value; this.item.name = formModel.name; - const array = this.form.get('permissions') as FormArray; + const array = this.form.get('permissions') as UntypedFormArray; this.item.permissions.forEach((item, index) => { item.enabled = array.controls[index].value.permission; }); diff --git a/overlord/src/app/settings/settings.component.ts b/overlord/src/app/settings/settings.component.ts index 0b091a34..9aaf8b2c 100644 --- a/overlord/src/app/settings/settings.component.ts +++ b/overlord/src/app/settings/settings.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit } from '@angular/core'; -import { FormArray, FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormArray, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { MatDialog } from '@angular/material/dialog'; import { ActivatedRoute, Router } from '@angular/router'; import * as moment from 'moment'; @@ -27,14 +27,14 @@ export class SettingsComponent implements OnInit { accountTypes: AccountType[] = []; voucherTypes: AccountType[] = []; - lockInfoForm: FormGroup; + lockInfoForm: UntypedFormGroup; lockInformation: LockInfo[]; lockOlder: boolean = false; olderRolling: boolean = false; lockNewer: boolean = false; newerRolling: boolean = false; - rebaseDataForm: FormGroup; + rebaseDataForm: UntypedFormGroup; maintenance: { enabled: boolean; user: string }; @@ -45,7 +45,7 @@ export class SettingsComponent implements OnInit { constructor( private route: ActivatedRoute, private router: Router, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private dialog: MatDialog, private toaster: ToasterService, public auth: AuthService, @@ -120,16 +120,16 @@ export class SettingsComponent implements OnInit { } listenToLockForm() { - (this.lockInfoForm.get('lockOlder') as FormControl).valueChanges.subscribe((x) => { + (this.lockInfoForm.get('lockOlder') as UntypedFormControl).valueChanges.subscribe((x) => { this.lockOlder = x; }); - (this.lockInfoForm.get('lockNewer') as FormControl).valueChanges.subscribe((x) => { + (this.lockInfoForm.get('lockNewer') as UntypedFormControl).valueChanges.subscribe((x) => { this.lockNewer = x; }); - (this.lockInfoForm.get('olderRolling') as FormControl).valueChanges.subscribe((x) => { + (this.lockInfoForm.get('olderRolling') as UntypedFormControl).valueChanges.subscribe((x) => { this.olderRolling = x; }); - (this.lockInfoForm.get('newerRolling') as FormControl).valueChanges.subscribe((x) => { + (this.lockInfoForm.get('newerRolling') as UntypedFormControl).valueChanges.subscribe((x) => { this.newerRolling = x; }); } @@ -137,44 +137,44 @@ export class SettingsComponent implements OnInit { saveLock() { const item = new LockInfo(); if (this.lockOlder && this.olderRolling) { - item.start.days = +(this.lockInfoForm.get('olderDays') as FormControl).value; + item.start.days = +(this.lockInfoForm.get('olderDays') as UntypedFormControl).value; } else if (this.lockOlder && !this.olderRolling) { - item.start.date = moment((this.lockInfoForm.get('olderDate') as FormControl).value).format( + item.start.date = moment((this.lockInfoForm.get('olderDate') as UntypedFormControl).value).format( 'DD-MMM-YYYY', ); } if (this.lockNewer && this.newerRolling) { - item.finish.days = +(this.lockInfoForm.get('newerDays') as FormControl).value; + item.finish.days = +(this.lockInfoForm.get('newerDays') as UntypedFormControl).value; } if (this.lockNewer && !this.newerRolling) { - item.finish.date = moment((this.lockInfoForm.get('newerDate') as FormControl).value).format( + item.finish.date = moment((this.lockInfoForm.get('newerDate') as UntypedFormControl).value).format( 'DD-MMM-YYYY', ); } - const atArray = this.lockInfoForm.get('accountTypes') as FormArray; + const atArray = this.lockInfoForm.get('accountTypes') as UntypedFormArray; this.accountTypes.forEach((at, index) => { if (atArray.controls[index].value.accountType) { item.accountTypes.push({ id: at.id, name: at.name }); } }); - const vtArray = this.lockInfoForm.get('voucherTypes') as FormArray; + const vtArray = this.lockInfoForm.get('voucherTypes') as UntypedFormArray; this.voucherTypes.forEach((vt, index) => { if (vtArray.controls[index].value.voucherType) { item.voucherTypes.push({ id: vt.id, name: vt.name }); } }); - const validFrom = (this.lockInfoForm.get('validFrom') as FormControl).value; + const validFrom = (this.lockInfoForm.get('validFrom') as UntypedFormControl).value; if (validFrom) { item.validFrom = moment(validFrom).format('DD-MMM-YYYY'); } - const validTill = (this.lockInfoForm.get('validTill') as FormControl).value; + const validTill = (this.lockInfoForm.get('validTill') as UntypedFormControl).value; if (validTill) { item.validTill = moment(validTill).format('DD-MMM-YYYY'); } - item.index = +(this.lockInfoForm.get('index') as FormControl).value; + item.index = +(this.lockInfoForm.get('index') as UntypedFormControl).value; this.ser.setLockInformation(item).subscribe( (result) => { @@ -194,7 +194,7 @@ export class SettingsComponent implements OnInit { } confirmRebase(): void { - const rebaseDate = moment((this.rebaseDataForm.get('date') as FormControl).value).format( + const rebaseDate = moment((this.rebaseDataForm.get('date') as UntypedFormControl).value).format( 'DD-MMM-YYYY', ); const dialogRef = this.dialog.open(ConfirmDialogComponent, { diff --git a/overlord/src/app/stock-movement/stock-movement.component.ts b/overlord/src/app/stock-movement/stock-movement.component.ts index c3e43e82..ec58af85 100644 --- a/overlord/src/app/stock-movement/stock-movement.component.ts +++ b/overlord/src/app/stock-movement/stock-movement.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit, ViewChild } from '@angular/core'; -import { FormBuilder, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort } from '@angular/material/sort'; import { ActivatedRoute, Router } from '@angular/router'; @@ -18,12 +18,12 @@ export class StockMovementComponent implements OnInit { @ViewChild(MatSort, { static: true }) sort?: MatSort; info: StockMovement = new StockMovement(); dataSource: StockMovementDataSource = new StockMovementDataSource(this.info.body); - form: FormGroup; + form: UntypedFormGroup; selectedRowId = ''; /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['group', 'name', 'opening', 'purchase', 'issue', 'closing']; - constructor(private route: ActivatedRoute, private router: Router, private fb: FormBuilder) { + constructor(private route: ActivatedRoute, private router: Router, private fb: UntypedFormBuilder) { this.form = this.fb.group({ startDate: '', finishDate: '', diff --git a/overlord/src/app/trial-balance/trial-balance.component.ts b/overlord/src/app/trial-balance/trial-balance.component.ts index 12756a3d..8e3d1c3d 100644 --- a/overlord/src/app/trial-balance/trial-balance.component.ts +++ b/overlord/src/app/trial-balance/trial-balance.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit, ViewChild } from '@angular/core'; -import { FormBuilder, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort } from '@angular/material/sort'; import { ActivatedRoute, Router } from '@angular/router'; @@ -18,11 +18,11 @@ export class TrialBalanceComponent implements OnInit { @ViewChild(MatSort, { static: true }) sort?: MatSort; info: TrialBalance = new TrialBalance(); dataSource: TrialBalanceDataSource = new TrialBalanceDataSource(this.info.body); - form: FormGroup; + form: UntypedFormGroup; /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['type', 'name', 'debit', 'credit']; - constructor(private route: ActivatedRoute, private router: Router, private fb: FormBuilder) { + constructor(private route: ActivatedRoute, private router: Router, private fb: UntypedFormBuilder) { this.form = this.fb.group({ date: '', }); diff --git a/overlord/src/app/user/user-detail/user-detail.component.ts b/overlord/src/app/user/user-detail/user-detail.component.ts index 7acf316d..45ba13c8 100644 --- a/overlord/src/app/user/user-detail/user-detail.component.ts +++ b/overlord/src/app/user/user-detail/user-detail.component.ts @@ -1,5 +1,5 @@ import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; -import { FormArray, FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormArray, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { MatDialog } from '@angular/material/dialog'; import { ActivatedRoute, Router } from '@angular/router'; @@ -15,14 +15,14 @@ import { UserService } from '../user.service'; }) export class UserDetailComponent implements OnInit, AfterViewInit { @ViewChild('nameElement', { static: true }) nameElement?: ElementRef; - form: FormGroup; + form: UntypedFormGroup; item: User = new User(); hide: boolean; constructor( private route: ActivatedRoute, private router: Router, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private toaster: ToasterService, private dialog: MatDialog, private ser: UserService, @@ -46,9 +46,9 @@ export class UserDetailComponent implements OnInit, AfterViewInit { showItem(item: User) { this.item = item; - (this.form.get('name') as FormControl).setValue(item.name); - (this.form.get('password') as FormControl).setValue(''); - (this.form.get('lockedOut') as FormControl).setValue(item.lockedOut); + (this.form.get('name') as UntypedFormControl).setValue(item.name); + (this.form.get('password') as UntypedFormControl).setValue(''); + (this.form.get('lockedOut') as UntypedFormControl).setValue(item.lockedOut); this.form.setControl( 'roles', this.fb.array( @@ -123,7 +123,7 @@ export class UserDetailComponent implements OnInit, AfterViewInit { this.item.name = formModel.name; this.item.password = formModel.password; this.item.lockedOut = formModel.lockedOut; - const array = this.form.get('roles') as FormArray; + const array = this.form.get('roles') as UntypedFormArray; this.item.roles.forEach((item, index) => { item.enabled = array.controls[index].value.role; }); diff --git a/overlord/tsconfig.json b/overlord/tsconfig.json index c3ebc8f9..f7e542ee 100644 --- a/overlord/tsconfig.json +++ b/overlord/tsconfig.json @@ -14,7 +14,7 @@ "experimentalDecorators": true, "moduleResolution": "node", "importHelpers": true, - "target": "es2017", + "target": "es2020", "module": "es2020", "lib": [ "es2018",