Skip to content
This repository was archived by the owner on Jun 25, 2022. It is now read-only.

Commit

Permalink
feat: Load and display the activities of a specific day
Browse files Browse the repository at this point in the history
The activities of a specific day are loaded, some components are also simplified
  • Loading branch information
CarlosPavajeau committed Jun 3, 2021
1 parent 1313d2d commit eeb1a86
Show file tree
Hide file tree
Showing 8 changed files with 58 additions and 47 deletions.
1 change: 1 addition & 0 deletions Domain/Repositories/IActivitiesRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ public interface IActivitiesRepository : IRepositoryBase<Activity, int>

Task<IEnumerable<Activity>> GetPendingActivitiesToConfirmed();
Task<IEnumerable<Activity>> GetActivitiesByYearAndMonth(int year, int month);
Task<IEnumerable<Activity>> GetActivitiesByYearMonthAndDay(int year, int month, int day);

void UpdateLimitDate();
}
Expand Down
8 changes: 8 additions & 0 deletions Infrastructure/Repositories/ActivitiesRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,14 @@ public async Task<IEnumerable<Activity>> GetActivitiesByYearAndMonth(int year, i
.ToListAsync();
}

public async Task<IEnumerable<Activity>> GetActivitiesByYearMonthAndDay(int year, int month, int day)
{
return await GetAll()
.Include(a => a.Client)
.Where(a => a.Date.Year == year && a.Date.Month == month && a.Date.Day == day)
.ToListAsync();
}

public void UpdateLimitDate()
{
int currentYear = DateTime.Now.Year;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
import { Activity } from '@modules/activity-schedule/models/activity';
import { Hour } from '@modules/activity-schedule/models/hour';
import { Moment } from 'moment';
import { ActivityScheduleService } from '@modules/activity-schedule/services/activity-schedule.service';

@Component({
selector: 'app-activity-schedule-day',
Expand All @@ -10,13 +11,14 @@ import { Moment } from 'moment';
})
export class ActivityScheduleDayComponent implements OnInit {
@Input() selectedDate: Moment;
@Input() allActivities: Activity[] = [];
activities: Activity[] = [];

hours: Hour[] = [];
start: Moment;

constructor() {
@Output() onLoadActivities = new EventEmitter();

constructor(private activityScheduleService: ActivityScheduleService) {
}

ngOnInit(): void {
Expand All @@ -37,14 +39,22 @@ export class ActivityScheduleDayComponent implements OnInit {
this.start = this.start.clone();
this.start.add(1, 'h');
}

this.hours.forEach((hour) => {
hour.activities = this.loadActivitiesForHour(hour.date);
});
this.activityScheduleService.getActivitiesByYearMonthAndDay(
this.selectedDate.year(),
this.selectedDate.month() + 1,
this.selectedDate.date())
.subscribe((activities: Activity[]) => {
this.activities = activities;
this.activities.forEach((activity) => (activity.date = new Date(activity.date)));
this.hours.forEach((hour) => {
hour.activities = this.loadActivitiesForHour(hour.date);
});
this.onLoadActivities.emit();
});
}

private loadActivitiesForHour(date: Moment) {
return this.allActivities.filter((activity) => {
return this.activities.filter((activity) => {
return (
activity.date.getMonth() === date.month() &&
activity.date.getDate() === date.date() &&
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,10 @@ import { ActivityScheduleService } from '@modules/activity-schedule/services/act
})
export class ActivityScheduleMonthComponent implements OnInit {
@Input() selectedDate: Moment;
@Input() allActivities: Activity[] = [];
activities: Activity[] = [];

@Output() selectDay = new EventEmitter<Moment>();
@Output() onLoadActivities = new EventEmitter<Activity[]>();
@Output() onLoadActivities = new EventEmitter();

start: Moment;
weeks: Week[] = [];
Expand Down Expand Up @@ -49,16 +48,13 @@ export class ActivityScheduleMonthComponent implements OnInit {
monthIndex = date.month();
}

const activitiesInMonth = this.allActivities.some((a) => a.date.getMonth() == this.selectedDate.month());
if (!activitiesInMonth) {
this.activityScheduleService.getActivitiesByYearAndMonth(this.selectedDate.year(), this.selectedDate.month())
.subscribe((activities: Activity[]) => {
this.activities = activities;
this.loadActivitiesForDay();
this.activities.forEach((activity) => (activity.date = new Date(activity.date)));
this.onLoadActivities.emit(activities);
});
}
this.activityScheduleService.getActivitiesByYearAndMonth(this.selectedDate.year(), this.selectedDate.month() + 1)
.subscribe((activities: Activity[]) => {
this.activities = activities;
this.activities.forEach((activity) => (activity.date = new Date(activity.date)));
this.loadActivitiesForDay();
this.onLoadActivities.emit();
});
}

private loadActivitiesForDay(): void {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,14 +49,14 @@
*ngIf="view == 0"
#scheduleMonth
[selectedDate]="selectedDate"
[allActivities]="activities"
(selectDay)="onSelectDay($event)"
(onLoadActivities)="onLoadActivities()"
></app-activity-schedule-month>
<app-activity-schedule-day
*ngIf="view == 2"
#scheduleDay
[selectedDate]="selectedDate"
[allActivities]="activities"
(onLoadActivities)="onLoadActivities()"
></app-activity-schedule-day>
</div>
</div>
Original file line number Diff line number Diff line change
@@ -1,27 +1,20 @@
import { AfterViewInit, Component, OnInit, ViewChild } from '@angular/core';
import { Component, ViewChild } from '@angular/core';
import { ActivityScheduleDayComponent } from '@modules/activity-schedule/components/activity-schedule-day/activity-schedule-day.component';
import { ActivityScheduleMonthComponent } from '@modules/activity-schedule/components/activity-schedule-month/activity-schedule-month.component';
import { Activity } from '@modules/activity-schedule/models/activity';
import { ActivityScheduleView } from '@modules/activity-schedule/models/activity-schedule-view';
import { ActivityScheduleService } from '@modules/activity-schedule/services/activity-schedule.service';
import { ObservableStatus } from '@shared/models/observable-with-status';
import * as moment from 'moment';
import { Observable } from 'rxjs';
import { delay } from 'rxjs/operators';

@Component({
selector: 'app-activity-schedule',
templateUrl: './activity-schedule.component.html',
})
export class ActivityScheduleComponent implements OnInit, AfterViewInit {
export class ActivityScheduleComponent {
public ScheduleView: typeof ActivityScheduleView = ActivityScheduleView;

readonly activityScheduleViewNames: string[] = [ 'Mes', 'Semana', 'Día' ];
readonly previousMessages: string[] = [ 'Mes anterior', 'Semana anterior', 'Día anterior' ];
readonly nextMessages: string[] = [ 'Mes siguiente', 'Semana siguiente', 'Día siguiente' ];

activities: Activity[] = [];
activities$: Observable<Activity[]>;
currentDate = moment();
selectedDate: moment.Moment = this.currentDate.clone();
view: ActivityScheduleView = ActivityScheduleView.Month;
Expand All @@ -31,23 +24,6 @@ export class ActivityScheduleComponent implements OnInit, AfterViewInit {

loadingActivities = true;

constructor(private activityScheduleService: ActivityScheduleService) {
}

ngOnInit(): void {

}

ngAfterViewInit(): void {
this.showCurrentDate();
if (this.scheduleMonth) {
this.scheduleMonth.onLoadActivities.subscribe((activities: Activity[]) => {
activities.push(...activities);
this.loadingActivities = false;
});
}
}

nextDate(): void {
this.loadingActivities = true;
switch (this.view) {
Expand Down Expand Up @@ -108,4 +84,8 @@ export class ActivityScheduleComponent implements OnInit, AfterViewInit {
this.selectedDate = date;
this.setView(ActivityScheduleView.Day);
}

onLoadActivities(): void {
this.loadingActivities = false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ export class ActivityScheduleService {
return this.http.get<Activity[]>(`${ ACTIVITIES_API_URL }/${ year }/${ month }`);
}

getActivitiesByYearMonthAndDay(year: number, month: number, day: number): Observable<Activity[]> {
return this.http.get<Activity[]>(`${ ACTIVITIES_API_URL }/${ year }/${ month }/${ day }`);
}

getActivity(code: number): Observable<Activity> {
return this.http.get<Activity>(`${ ACTIVITIES_API_URL }/${ code }`);
}
Expand Down
12 changes: 12 additions & 0 deletions Kaizen/Controllers/ActivitiesController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,18 @@ public async Task<ActionResult<IEnumerable<ActivityViewModel>>> GetActivities(in
return Ok(_mapper.Map<IEnumerable<ActivityViewModel>>(activities));
}

[HttpGet("{year:int}/{month:int}/{day:int}")]
public async Task<ActionResult<IEnumerable<ActivityViewModel>>> GetActivities(int year, int month, int day)
{
if (month > 12)
{
return BadRequest($"El mes no puede ser mayor a 12, valor recibido {month}.");
}

var activities = await _activitiesRepository.GetActivitiesByYearMonthAndDay(year, month, day);
return Ok(_mapper.Map<IEnumerable<ActivityViewModel>>(activities));
}

[HttpGet("{id}")]
public async Task<ActionResult<ActivityViewModel>> GetActivity(int id)
{
Expand Down

0 comments on commit eeb1a86

Please sign in to comment.