;
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(AddAllowancePage);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/frontend/allowance-planner-v2/src/app/pages/add-allowance/add-allowance.page.ts b/frontend/allowance-planner-v2/src/app/pages/add-allowance/add-allowance.page.ts
new file mode 100644
index 0000000..99d0eb2
--- /dev/null
+++ b/frontend/allowance-planner-v2/src/app/pages/add-allowance/add-allowance.page.ts
@@ -0,0 +1,51 @@
+import { Location } from '@angular/common';
+import { Component } from '@angular/core';
+import { FormBuilder, FormGroup, Validators } from '@angular/forms';
+import { ActivatedRoute, Router } from '@angular/router';
+import { AllowanceService } from 'src/app/services/allowance.service';
+
+@Component({
+ selector: 'app-add-allowance',
+ templateUrl: './add-allowance.page.html',
+ styleUrls: ['./add-allowance.page.scss'],
+ standalone: false,
+})
+export class AddAllowancePage {
+ public form: FormGroup;
+ public goalId: number;
+ public userId: number;
+ public isAddMode = true;
+// Marcus' first comment
+// b ........a`.OK ø¶Ópppppppp--P09OP
+
+
+ constructor(
+ private allowanceService: AllowanceService,
+ private route: ActivatedRoute,
+ private formBuilder: FormBuilder,
+ private router: Router,
+ private location: Location
+ ) {
+ this.userId = this.route.snapshot.params['id'];
+ this.goalId = this.route.snapshot.params['goalId'];
+
+ this.form = this.formBuilder.group({
+ amount: ['', Validators.required],
+ description: ['', Validators.required]
+ });
+ }
+
+ changeAllowance() {
+ this.allowanceService.addOrSpendAllowance(
+ this.goalId,
+ this.userId,
+ this.form.value.amount,
+ this.form.value.description
+ );
+ this.router.navigate(['/tabs/allowance', this.userId]);
+ }
+
+ navigateBack() {
+ this.location.back();
+ }
+}
diff --git a/frontend/allowance-planner-v2/src/app/pages/add-allowance/spend-allowance-routing.module.ts b/frontend/allowance-planner-v2/src/app/pages/add-allowance/spend-allowance-routing.module.ts
new file mode 100644
index 0000000..5889e9e
--- /dev/null
+++ b/frontend/allowance-planner-v2/src/app/pages/add-allowance/spend-allowance-routing.module.ts
@@ -0,0 +1,17 @@
+import { NgModule } from '@angular/core';
+import { Routes, RouterModule } from '@angular/router';
+
+import { SpendllowancePage } from './spend-allowance.page';
+
+const routes: Routes = [
+ {
+ path: '',
+ component: SpendllowancePage
+ }
+];
+
+@NgModule({
+ imports: [RouterModule.forChild(routes)],
+ exports: [RouterModule],
+})
+export class SpendAllowancePageRoutingModule {}
\ No newline at end of file
diff --git a/frontend/allowance-planner-v2/src/app/pages/add-allowance/spend-allowance.module.ts b/frontend/allowance-planner-v2/src/app/pages/add-allowance/spend-allowance.module.ts
new file mode 100644
index 0000000..8cb0219
--- /dev/null
+++ b/frontend/allowance-planner-v2/src/app/pages/add-allowance/spend-allowance.module.ts
@@ -0,0 +1,22 @@
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { FormsModule, ReactiveFormsModule } from '@angular/forms';
+
+import { IonicModule } from '@ionic/angular';
+
+import { SpendAllowancePageRoutingModule } from './spend-allowance-routing.module';
+import { SpendllowancePage } from './spend-allowance.page';
+import { MatIconModule } from '@angular/material/icon';
+
+@NgModule({
+ imports: [
+ CommonModule,
+ FormsModule,
+ IonicModule,
+ SpendAllowancePageRoutingModule,
+ ReactiveFormsModule,
+ MatIconModule
+ ],
+ declarations: [SpendllowancePage]
+})
+export class SpendAllowancePageModule {}
\ No newline at end of file
diff --git a/frontend/allowance-planner-v2/src/app/pages/add-allowance/spend-allowance.page.ts b/frontend/allowance-planner-v2/src/app/pages/add-allowance/spend-allowance.page.ts
new file mode 100644
index 0000000..d15e7a1
--- /dev/null
+++ b/frontend/allowance-planner-v2/src/app/pages/add-allowance/spend-allowance.page.ts
@@ -0,0 +1,52 @@
+import { Location } from '@angular/common';
+import { Component } from '@angular/core';
+import { FormBuilder, FormGroup, Validators } from '@angular/forms';
+import { ActivatedRoute, Router } from '@angular/router';
+import { AllowanceService } from 'src/app/services/allowance.service';
+
+@Component({
+ selector: 'app-spend-allowance',
+ templateUrl: './add-allowance.page.html',
+ styleUrls: ['./add-allowance.page.scss'],
+ standalone: false,
+})
+export class SpendllowancePage {
+ public form: FormGroup;
+ public goalId: number;
+ public userId: number;
+ public isAddMode = false;
+
+ constructor(
+ private allowanceService: AllowanceService,
+ private route: ActivatedRoute,
+ private formBuilder: FormBuilder,
+ private router: Router,
+ private location: Location
+ ) {
+ this.userId = this.route.snapshot.params['id'];
+ this.goalId = this.route.snapshot.params['goalId'];
+
+ this.form = this.formBuilder.group({
+ amount: ['', Validators.required],
+ description: ['', Validators.required]
+ });
+
+ this.allowanceService.getAllowanceById(this.goalId, this.userId).subscribe(allowance => {
+ this.form.controls['amount'].addValidators([Validators.max(allowance.progress)]);
+ });
+ }
+
+ changeAllowance() {
+ this.allowanceService.addOrSpendAllowance(
+ this.goalId,
+ this.userId,
+ -this.form.value.amount,
+ this.form.value.description
+ );
+ this.router.navigate(['/tabs/allowance', this.userId]);
+ }
+
+ navigateBack() {
+ this.location.back();
+ }
+}
\ No newline at end of file
diff --git a/frontend/allowance-planner-v2/src/app/pages/allowance/allowance-routing.module.ts b/frontend/allowance-planner-v2/src/app/pages/allowance/allowance-routing.module.ts
index 5616c78..3beac25 100644
--- a/frontend/allowance-planner-v2/src/app/pages/allowance/allowance-routing.module.ts
+++ b/frontend/allowance-planner-v2/src/app/pages/allowance/allowance-routing.module.ts
@@ -14,6 +14,14 @@ const routes: Routes = [
{
path: ':id/edit/:goalId',
loadChildren: () => import('../edit-allowance/edit-allowance.module').then(m => m.EditAllowancePageModule)
+ },
+ {
+ path: ':id/increase/:goalId',
+ loadChildren: () => import('../add-allowance/add-allowance.module').then(m => m.AddAllowancePageModule)
+ },
+ {
+ path: ':id/spend/:goalId',
+ loadChildren: () => import('../add-allowance/spend-allowance.module').then(m => m.SpendAllowancePageModule)
}
];
diff --git a/frontend/allowance-planner-v2/src/app/pages/allowance/allowance.page.html b/frontend/allowance-planner-v2/src/app/pages/allowance/allowance.page.html
index 94f9a09..2e46e0e 100644
--- a/frontend/allowance-planner-v2/src/app/pages/allowance/allowance.page.html
+++ b/frontend/allowance-planner-v2/src/app/pages/allowance/allowance.page.html
@@ -43,9 +43,9 @@
{{ goal.progress }} SP
-
+
-
+
@@ -59,7 +59,7 @@
{{ goal.progress }} / {{ goal.target }} SP
-
+
diff --git a/frontend/allowance-planner-v2/src/app/pages/allowance/allowance.page.ts b/frontend/allowance-planner-v2/src/app/pages/allowance/allowance.page.ts
index c0b0971..4bcfcd4 100644
--- a/frontend/allowance-planner-v2/src/app/pages/allowance/allowance.page.ts
+++ b/frontend/allowance-planner-v2/src/app/pages/allowance/allowance.page.ts
@@ -72,4 +72,12 @@ export class AllowancePage implements ViewWillEnter {
this.allowanceService.completeGoal(goalId, this.id);
this.getAllowance();
}
+
+ addAllowance(id: number) {
+ this.router.navigate(['increase', id], { relativeTo: this.route });
+ }
+
+ spendAllowance(id: number) {
+ this.router.navigate(['spend', id], { relativeTo: this.route });
+ }
}
diff --git a/frontend/allowance-planner-v2/src/app/services/allowance.service.ts b/frontend/allowance-planner-v2/src/app/services/allowance.service.ts
index 61397e9..5108aeb 100644
--- a/frontend/allowance-planner-v2/src/app/services/allowance.service.ts
+++ b/frontend/allowance-planner-v2/src/app/services/allowance.service.ts
@@ -34,4 +34,8 @@ export class AllowanceService {
completeGoal(goalId: number, userId: number) {
this.http.post(`${this.url}/user/${userId}/allowance/${goalId}/complete`, {}).subscribe();
}
+
+ addOrSpendAllowance(goalId: number, userId: number, amount: number, description: string) {
+ this.http.post(`${this.url}/user/${userId}/allowance/${goalId}/add`, { amount, description }).subscribe();
+ }
}
\ No newline at end of file