diff --git a/src/app/organization/holidays/holiday.resolver.ts b/src/app/organization/holidays/holiday.resolver.ts new file mode 100644 index 000000000..fb7205943 --- /dev/null +++ b/src/app/organization/holidays/holiday.resolver.ts @@ -0,0 +1,31 @@ +/** Angular Imports */ +import { Injectable } from '@angular/core'; +import { Resolve, ActivatedRouteSnapshot } from '@angular/router'; + +/** rxjs Imports */ +import { Observable } from 'rxjs'; + +/** Custom Services */ +import { OrganizationService } from 'app/organization/organization.service'; + +/** + * Holiday data resolver. + */ +@Injectable() +export class HolidayResolver implements Resolve { + + /** + * @param {OrganizationService} organizationService Organization service. + */ + constructor(private organizationService: OrganizationService) {} + + /** + * Returns the holiday data. + * @returns {Observable} + */ + resolve(route: ActivatedRouteSnapshot): Observable { + const holidayId = route.paramMap.get('id'); + return this.organizationService.getHoliday(holidayId); + } + +} diff --git a/src/app/organization/holidays/holidays.component.html b/src/app/organization/holidays/holidays.component.html index 1123f9342..decd3daae 100644 --- a/src/app/organization/holidays/holidays.component.html +++ b/src/app/organization/holidays/holidays.component.html @@ -56,7 +56,7 @@ - + diff --git a/src/app/organization/holidays/view-holidays/view-holidays.component.html b/src/app/organization/holidays/view-holidays/view-holidays.component.html new file mode 100644 index 000000000..cc69ea576 --- /dev/null +++ b/src/app/organization/holidays/view-holidays/view-holidays.component.html @@ -0,0 +1,66 @@ +
+ + + +
+ +
+ + + + + +
+ +
+ Name +
+ +
+ {{ holidayData.name }} +
+ +
+ From Date +
+ +
+ {{ holidayData.fromDate | date }} +
+ +
+ To Date +
+ +
+ {{ holidayData.toDate | date }} +
+ +
+ Repayments Scheduled To +
+ +
+ {{ holidayData.repaymentsRescheduledTo | date }} +
+ +
+ Next Repayment Date +
+ +
+ +
+ +
+ +
diff --git a/src/app/organization/holidays/view-holidays/view-holidays.component.scss b/src/app/organization/holidays/view-holidays/view-holidays.component.scss new file mode 100644 index 000000000..d80b0c483 --- /dev/null +++ b/src/app/organization/holidays/view-holidays/view-holidays.component.scss @@ -0,0 +1,14 @@ +.container { + max-width: 37rem; + + .content { + div { + margin: 1rem 0; + word-wrap: break-word; + + &.header { + font-weight: 500; + } + } + } +} diff --git a/src/app/organization/holidays/view-holidays/view-holidays.component.spec.ts b/src/app/organization/holidays/view-holidays/view-holidays.component.spec.ts new file mode 100644 index 000000000..c0f916916 --- /dev/null +++ b/src/app/organization/holidays/view-holidays/view-holidays.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ViewHolidaysComponent } from './view-holidays.component'; + +describe('ViewHolidaysComponent', () => { + let component: ViewHolidaysComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ ViewHolidaysComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ViewHolidaysComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/organization/holidays/view-holidays/view-holidays.component.ts b/src/app/organization/holidays/view-holidays/view-holidays.component.ts new file mode 100644 index 000000000..ca8a130b6 --- /dev/null +++ b/src/app/organization/holidays/view-holidays/view-holidays.component.ts @@ -0,0 +1,55 @@ +/** Angular Imports. */ +import { Component } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { MatDialog } from '@angular/material'; + +/** Custom Services. */ +import { OrganizationService } from 'app/organization/organization.service'; + +/** Custom Components. */ +import { DeleteDialogComponent } from '../../../shared/delete-dialog/delete-dialog.component'; + +/** + * View Holidays component. + */ +@Component({ + selector: 'mifosx-view-holidays', + templateUrl: './view-holidays.component.html', + styleUrls: ['./view-holidays.component.scss'] +}) +export class ViewHolidaysComponent { + + /** Holiday data. */ + holidayData: any; + + /** + * Retrieves hioliday data from `resolve`. + * @param {ActivatedRoute} route Activated Route. + */ + constructor(private route: ActivatedRoute, + private router: Router, + private dialog: MatDialog, + private organizationService: OrganizationService ) { + this.route.data.subscribe((data: { holidays: any}) => { + this.holidayData = data.holidays; + }); + } + + /** + * Deletes the holiday. + */ + deleteHoliday() { + const deleteHolidayDialogRef = this.dialog.open(DeleteDialogComponent, { + data: { deleteContext: `holiday ${this.holidayData.id}` } + }); + deleteHolidayDialogRef.afterClosed().subscribe((response: any) => { + if (response.delete) { + this.organizationService.deleteHoliday(this.holidayData.id) + .subscribe(() => { + this.router.navigate(['../'], { relativeTo: this.route }); + }); + } + }); + } + +} diff --git a/src/app/organization/organization-routing.module.ts b/src/app/organization/organization-routing.module.ts index 67160112f..f6c3e2962 100644 --- a/src/app/organization/organization-routing.module.ts +++ b/src/app/organization/organization-routing.module.ts @@ -34,6 +34,7 @@ import { EditEmployeeComponent } from './employees/edit-employee/edit-employee.c import { CreateTellerComponent } from './tellers/create-teller/create-teller.component'; import { EditTellerComponent } from './tellers/edit-teller/edit-teller.component'; import { ViewCashierComponent } from './tellers/view-cashier/view-cashier.component'; +import { ViewHolidaysComponent } from './holidays/view-holidays/view-holidays.component'; /** Custom Resolvers */ import { LoanProvisioningCriteriaResolver } from './loan-provisioning-criteria/loan-provisioning-criteria.resolver'; @@ -58,6 +59,7 @@ import { AdhocQueryTemplateResolver } from './adhoc-query/adhoc-query-template.r import { ViewLoanProvisioningCriteriaComponent } from './loan-provisioning-criteria/view-loan-provisioning-criteria/view-loan-provisioning-criteria.component'; import { LoanProvisioningCriteriasResolver } from './loan-provisioning-criteria/loan-provisioning-criterias.resolver'; import { CashierResolver } from './tellers/cashier.resolver'; +import { HolidayResolver } from './holidays/holiday.resolver'; /** Organization Routes */ const routes: Routes = [ @@ -338,11 +340,29 @@ const routes: Routes = [ }, { path: 'holidays', - component: HolidaysComponent, data: { title: extract('Manage Holidays'), breadcrumb: 'Manage Holidays' }, - resolve: { - offices: OfficesResolver - } + children: [ + { + path: '', + component: HolidaysComponent, + resolve: { + offices: OfficesResolver + } + }, + { + path: ':id', + data: { title: extract('View Holidays'), routeParamBreadcrumb: 'id' }, + children: [ + { + path: '', + component: ViewHolidaysComponent, + resolve: { + holidays: HolidayResolver + } + } + ] + } + ] } ] } @@ -377,7 +397,8 @@ const routes: Routes = [ EditOfficeResolver, AdhocQueryTemplateResolver, LoanProvisioningCriteriasResolver, - CashierResolver + CashierResolver, + HolidayResolver ] }) export class OrganizationRoutingModule { } diff --git a/src/app/organization/organization.module.ts b/src/app/organization/organization.module.ts index 0a0e51850..77c8647ab 100644 --- a/src/app/organization/organization.module.ts +++ b/src/app/organization/organization.module.ts @@ -34,6 +34,7 @@ import { CreateTellerComponent } from './tellers/create-teller/create-teller.com import { EditTellerComponent } from './tellers/edit-teller/edit-teller.component'; import { ViewLoanProvisioningCriteriaComponent } from './loan-provisioning-criteria/view-loan-provisioning-criteria/view-loan-provisioning-criteria.component'; import { ViewCashierComponent } from './tellers/view-cashier/view-cashier.component'; +import { ViewHolidaysComponent } from './holidays/view-holidays/view-holidays.component'; /** * Organization Module @@ -74,6 +75,7 @@ import { ViewCashierComponent } from './tellers/view-cashier/view-cashier.compon EditTellerComponent, ViewLoanProvisioningCriteriaComponent, ViewCashierComponent, + ViewHolidaysComponent ] }) export class OrganizationModule { } diff --git a/src/app/organization/organization.service.ts b/src/app/organization/organization.service.ts index bb1d1c89f..cbda67e77 100644 --- a/src/app/organization/organization.service.ts +++ b/src/app/organization/organization.service.ts @@ -301,6 +301,24 @@ export class OrganizationService { return this.http.get('/holidays', { params: httpParams }); } + /** + * Get Holiday data. + * @param holidayId Holiday Id of holidays. + * @returns {Observable} Holiday data. + */ + getHoliday(holidayId: string): Observable { + return this.http.get(`/holidays/${holidayId}`); + } + + /** + * Delete Holiday. + * @param holidayId Holiday Id to be deleted. + * @returns {Observable} Resource Id. + */ + deleteHoliday(holidayId: string) { + return this.http.delete(`/holidays/${holidayId}`); + } + /** * @param {any} employeeId Employee ID of Employee to be edited. * @returns {Observable}