ITOTEAM-530 Inform the user how many days are left until the end of the wind for each selected day

This commit is contained in:
Peter Maquiran
2024-06-26 10:11:02 +01:00
parent fbaf0afcf1
commit 02891dbb9a
18 changed files with 246 additions and 118 deletions
+3 -1
View File
@@ -17,6 +17,7 @@ import { RoleIdService } from 'src/app/services/role-id.service';
import { ActiveTabService } from 'src/app/services/active-tab.service';
import { Device } from '@capacitor/device';
import { RouteService } from 'src/app/services/route.service';
// import { LoggingService } from 'src/app/services/logger/log4js/logging.service';
import { CaptureLogService } from 'src/app/services/monitoring/capture-log/capture-log.service';
import { NetworkServiceService, ConnectionStatus } from 'src/app/services/network-service.service';
import { UserSession } from '../models/user.model';
@@ -104,7 +105,8 @@ export class HomePage implements OnInit {
private RoleIdService: RoleIdService,
private zone: NgZone,
public alertController: AlertController,
public CaptureLogService: CaptureLogService
public CaptureLogService: CaptureLogService,
// private LoggingService: LoggingService
// private ChunkService: ChunkService,
// private StreamService: StreamService
+4 -6
View File
@@ -236,13 +236,10 @@
<div *ngFor="let year of TimelineMDList " >
<!-- {{year.yearInfo.yearName}} -->
<div *ngFor="let month of year.months " class="header-day" >
<!-- {{ month.monthInfo.monthName | json }} -->
<!-- <hr> -->
<div *ngFor="let day of month.days; let i = index " class="EventListBox-container" >
<div class="day" *ngIf="!(i == 0 && isSelectedDayHasEvent)" >
{{ day.daysInfo.dayName }} <div style="text-transform: capitalize; display: inline;">{{month.monthInfo.monthName}}</div>
</div>
@@ -250,7 +247,8 @@
<div class="d-flex content-{{event.profile}}-{{event.event.CalendarName}} mt-10 cursor-pointer width-100 " (click)="eventClicked(event)">
<div class="schedule-time" *ngIf="!event.event.IsAllDayEvent">
<div class="schedule-time" *ngIf="event.event.IsAllDayEvent != true">
<div *ngIf="event.startMany && !event.middle" class="time-start labelb">Início</div>
<div *ngIf="event.endMany && !event.middle " class="time-end labelb">Fim</div>
@@ -261,7 +259,7 @@
<div *ngIf="event.middle" class="time-end text-center"> o dia </div>
</div>
<div class="schedule-time" *ngIf="event.event.IsAllDayEvent">
<div class="schedule-time" *ngIf="event.event.IsAllDayEvent == true">
<div *ngIf="event.middle" class="time-start">Todo </div>
<div *ngIf="event.middle" class="time-end text-center">o dia</div>
@@ -278,7 +276,7 @@
<p class="m-0">{{event.event.Subject}}</p>
</div>
<div class="location">{{event.event.Location}}</div>
<div class="location">{{event.event.Location}} <span style="color:red;" *ngIf="event.daysLeft >= 2">{{ event.daysLeft }}</span> <span style="color:red;" *ngIf="event.event.IsAllDayEvent != true && event.endMany && !event.middle">24h</span> </div>
<div class="font-13 calendar-owner"*ngIf="eventService.getCalendarOwnNameByCalendarId(event.event.CalendarId) == 'Meu calendario'">{{SessionStore.user.FullName}} </div>
<ng-template #other_content>{{eventService.getCalendarOwnNameByCalendarId(event.event.CalendarId)}}</ng-template>
</div>
+1 -1
View File
@@ -310,7 +310,7 @@
</span>
</div>
<div class="d-flex ion-justify-content-between ">
<span class="organic-entity"></span>
<span class="organic-entity">{{ searchDocument.entity }}</span>
<span class="documente-date">{{ formateIsoDate(searchDocument.dateEntry || searchDocument.Data) }}</span>
</div>
+1 -1
View File
@@ -185,7 +185,7 @@ ion-slide {
margin-left: 10px;
.result-name {
margin: 0px;
width: 100%;
// width: 100%;
font-family: Roboto;
font-size: rem(15);
color: var(--title-text-color);
+27 -1
View File
@@ -37,6 +37,7 @@ export class ListBoxService {
daysBetween(){ }
list(eventSource: EventListStore[], profile: 'md' | 'pr' | 'all', rangeStartDate, randEndDate, {segment = 'Combinado', selectedDate= null}): Year[] {
// // filter range
@@ -306,6 +307,9 @@ export class ListBoxService {
}
transForm(event: CustomCalendarEvent, {startMany, endMany, middle}) {
let daysLeft = this.daysToEndWithJS(event.start, event.end);
return Object.assign({}, {
start: event.start,
end: event.end,
@@ -318,8 +322,10 @@ export class ListBoxService {
Location: event.event.Location,
EventId: event.event.EventId,
CalendarName: event.event.CalendarName,
CalendarId: event.event.CalendarId
CalendarId: event.event.CalendarId,
daysLeft
},
daysLeft,
Subject: event.event.Subject,
startMany: startMany,
endMany: endMany,
@@ -329,6 +335,26 @@ export class ListBoxService {
daysToEndWithJS(startDateStr: any, endDateStr: any) {
// Define the start and end dates
const startDate: any = new Date(startDateStr);
const endDate: any = new Date(endDateStr);
// Calculate the difference in milliseconds between the two dates
const differenceMs = Math.abs(endDate - startDate);
// Convert milliseconds to days
const millisecondsPerDay = 1000 * 60 * 60 * 24;
const differenceDays = Math.ceil(differenceMs / millisecondsPerDay);
// console.log(`Number of days between the dates: ${differenceDays}`);
return differenceDays
}
transformObjectKeyOrder(originalObject, keyOrder) {
const transformedObject = {};
@@ -0,0 +1,46 @@
// import { Injectable } from '@angular/core';
// import * as log4js from 'log4js';
// @Injectable({
// providedIn: 'root'
// })
// export class LoggingService {
// private logger;
// constructor() {
// log4js.configure({
// appenders: {
// graylog: {
// type: '@log4js-node/gelf',
// host: 'localhost', // Replace with your Graylog server hostname or IP
// port: 1514, // GELF TCP port configured in Graylog Docker Compose
// hostname: 'angular-app', // Optional: Name of your application or hostname
// facility: 'angular-app', // Optional: Facility for categorizing logs
// customFields: { // Optional: Additional fields you want to include
// app: 'AngularApp',
// env: 'development'
// }
// }
// },
// categories: {
// default: { appenders: ['graylog'], level: 'debug' }
// }
// });
// this.logger = log4js.getLogger();
// this.log("teste-123s")
// }
// log(message: string) {
// this.logger.info(message);
// }
// error(message: string) {
// this.logger.error(message);
// }
// debug(message: string) {
// this.logger.debug(message);
// }
// }
@@ -1,6 +1,6 @@
import { Injectable } from '@angular/core';
import { Device } from '@capacitor/device';
import { SocketLog } from './worker.worker';
// import { SocketLog } from './worker.worker';
import { FCM } from '@capacitor-community/fcm';
import { ActionPerformed, PushNotificationSchema, PushNotifications, Token, } from '@capacitor/push-notifications';
import { AlertController, Platform } from '@ionic/angular';
@@ -14,7 +14,7 @@ export class CaptureLogService {
deviceName = ''
constructor(
public socket: SocketLog,
// public socket: SocketLog,
private platform: Platform,
private afMessaging: AngularFireMessaging,
) {
@@ -25,6 +25,13 @@ export class CaptureLogService {
this.deviceName = e.name
});
// Create a new
const worker = new Worker(new URL('./worker.worker', import.meta.url));
worker.onmessage = ({ data }) => {
console.log(`page got message: ${data}`);
};
worker.postMessage('hello');
}
setToken() {
@@ -1,13 +1,4 @@
// src/app/worker.worker.ts
// addEventListener('message', ({ data }) => {
// const response = `Worker response to ${data}`;
// postMessage(response);
// });
import { Injectable } from '@angular/core';
/// <reference lib="webworker" />
import { Observable, Subject, BehaviorSubject } from 'rxjs';
import { webSocket, WebSocketSubject } from 'rxjs/webSocket';
import { catchError, retryWhen, tap, delay } from 'rxjs/operators';
@@ -17,15 +8,7 @@ interface WebSocketMessage {
payload: any;
}
interface WebSocketError {
type: string;
error: any;
}
@Injectable({
providedIn: 'root'
})
export class SocketLog {
class SocketLog {
private socket$: WebSocketSubject<WebSocketMessage>;
private messageSubject$: Subject<WebSocketMessage>;
private connectionStatus$: BehaviorSubject<boolean>;
@@ -36,6 +19,8 @@ export class SocketLog {
this.messageSubject$ = new Subject<WebSocketMessage>();
this.connectionStatus$ = new BehaviorSubject<boolean>(false);
this.setupVisibilityChangeHandler();
// this.connect('https://5-180-182-151.cloud-xip.com:85/ws/')
//console.log('connect1')
}
public connect(url: string) {
@@ -61,12 +46,14 @@ export class SocketLog {
this.messageSubject$.next(message);
this.connectionStatus$.next(true);
this.reconnectAttempts = 0;
// console.log({message})
},
(err) => {
console.error('WebSocket connection error:', err);
// console.error('WebSocket connection error:', err);
},
() => {
console.log('WebSocket connection closed');
// console.log('WebSocket connection closed');
this.connectionStatus$.next(false);
}
);
@@ -150,3 +137,6 @@ export class SocketLog {
);
}
}
let _ = new SocketLog()
@@ -7,7 +7,7 @@ import { environment } from 'src/environments/environment';
const meterProvider = new MeterProvider();
metrics.setGlobalMeterProvider(meterProvider);
if (window.location.protocol !== 'https:' && environment.presidential == false) {
if (window.location.protocol !== 'https:' && environment.apiURL != 'https://gdqas-api.oapr.gov.ao/api/') {
const metricReader = new PeriodicExportingMetricReader({
exporter: new OTLPMetricExporter({
url: 'http://5-180-182-151.cloud-xip.com:4318/v1/metrics',
@@ -20,7 +20,6 @@ if (window.location.protocol !== 'https:' && environment.presidential == false)
meterProvider.addMetricReader(metricReader);
}
export const meter = meterProvider.getMeter('example-exporter-collector');
export const RequestCounter = meter.createCounter('post_requests', {
description: 'Example of a Counter',
@@ -64,7 +64,7 @@ const createTracingInstance = ({bugPrint, name, module, autoFinish}): TracingTyp
return data.tags[key]
},
finish: () => {
if(environment.presidential == false) {
if(environment.apiURL != 'https://gdqas-api.oapr.gov.ao/api/') {
span.end();
UseCaseCounter.add(1, {user: SessionStore?.user?.FullName, outcome:data.tags['outcome'], usecase: name})
}
@@ -97,13 +97,13 @@ export class EditEventPage implements OnInit {
SessionStore= SessionStore
CalendarNameOwnerName = ''
CalendarNamesOptions = []
allDayCheck: boolean = false;
addedAttachmentsList = [];
sharedCalendar: Observable<TableSharedCalendar[]>
hasChangeCalendar = false
selectedUserCalendar:any;
CalendarNamesOptions = ['Oficial', 'Pessoal']
constructor(
private modalController: ModalController,
@@ -133,10 +133,10 @@ export class EditEventPage implements OnInit {
}
ngOnInit() {
console.log('this.postEvent', this.postEvent)
this.selectedUserCalendar = this.postEvent.owner.wxUserId
this.loadedEventAttachments = this.postEvent.Attachments
console.log(this.postEvent.Category)
this._postEvent = this.postEvent
this._postEvent.Category = this.setEventType(this._postEvent.Category)
if (!this._postEvent.IsRecurring) {
@@ -90,6 +90,9 @@
<span *ngIf="!loadedEvent.IsRecurring">(Não se repete)</span>
</p>
<!-- <p >
{{ daysToEnd }} dias para terminar o evento
</p> -->
</ion-label>
</div>
</div>
@@ -57,6 +57,7 @@ export class ViewEventPage implements OnInit {
sesseionStora = SessionStore
TimeZoneString = ''
daysToEnd = 0
constructor(
public eventsService: EventsService,
@@ -79,9 +80,35 @@ export class ViewEventPage implements OnInit {
this.eventBody = { BodyType : "1", Text : ""};
this.loadedEvent.Body = this.eventBody;
console.log()
}
daysToEndWithJS(startDateStr: any, endDateStr: any) {
// Define the start and end dates
const startDate: any = new Date(startDateStr);
const endDate: any = new Date(endDateStr);
// Calculate the difference in milliseconds between the two dates
const differenceMs = Math.abs(endDate - startDate);
// Convert milliseconds to days
const millisecondsPerDay = 1000 * 60 * 60 * 24;
const differenceDays = Math.ceil(differenceMs / millisecondsPerDay);
console.log(`Number of days between the dates: ${differenceDays}`);
return differenceDays
}
deferenceBetweenDays(start: any, end: any) {
start.setHours(0, 0, 0, 0);
end.setHours(0, 0, 0, 0);
const diffTime = Math.abs(end - start);
return Math.ceil(diffTime / (1000 * 60 * 60 * 24));
}
ngOnInit() {
this.loadEvent();
@@ -137,11 +164,23 @@ export class ViewEventPage implements OnInit {
if(res.isOk()) {
tracing.setAttribute('outcome', 'success')
/* let changeDate = this.dateService.fixDate(res.value as any) as any */
this.loadedEvent = res.value as any;
console.log('this.loadedEvent', this.loadedEvent)
if(new Date().getTime() <= new Date(this.loadedEvent.EndDate).getTime()) {
if(this.deferenceBetweenDays(new Date(), new Date(this.loadedEvent.EndDate))) {
this.daysToEnd = this.daysToEndWithJS(new Date(this.loadedEvent.StartDate), new Date(this.loadedEvent.EndDate))
} else {
this.daysToEnd = 0
}
} else {
this.daysToEnd = 0
}
this.setTimeZone()
} else {
+3 -3
View File
@@ -53,9 +53,9 @@ export class CalendarService {
removeRangeForCalendar(rangeStartDate, rangeEndDate, profile, calendarId) {
this._eventSource = this._eventSource.filter((e)=> {
if(new Date(rangeStartDate).getTime() <= new Date(e.startTime).getTime() &&
new Date(rangeEndDate).getTime() >= new Date(e.endTime).getTime() && e.CalendarId == calendarId) {
this._eventSource = this._eventSource.filter((e) => {
if( new Date(e.endTime).getTime() >= new Date(rangeStartDate).getTime() &&
new Date(rangeEndDate).getTime() >= new Date(e.startTime).getTime() && e.CalendarId == calendarId) {
return false
}
return true