diff --git a/src/app/home/home.page.ts b/src/app/home/home.page.ts index 3f2b921b2..67674d637 100644 --- a/src/app/home/home.page.ts +++ b/src/app/home/home.page.ts @@ -23,7 +23,7 @@ import { Network } from '@ionic-native/network/ngx'; import { BackgroundService } from 'src/app/services/background.service'; import { OfflineManagerService } from 'src/app/services/offline-manager.service'; import { Storage } from '@ionic/storage'; -import { EventsService} from 'src/app/services/events.service'; +import { EventsService } from 'src/app/services/events.service'; @Component({ @@ -81,11 +81,10 @@ export class HomePage implements OnInit { private inativityService: InativityService, private storageService: StorageService, private webNotificationPopupService: WebNotificationPopupService, - private network: Network, private backgroundservice: BackgroundService, private offlinemanager: OfflineManagerService, private storage: Storage, - private eventservice: EventsService ) { + private eventservice: EventsService) { this.webNotificationPopupService.askNotificationPermission() @@ -118,37 +117,20 @@ export class HomePage implements OnInit { window.addEventListener('online', () => { console.log('Became online') this.backgroundservice.online() + if (this.platform.is('desktop') || this.platform.is('mobileweb')) { + this.webnotification.webconnection(); + this.webnotification.register(); + } else { + this.mobilefirstConnect(); + this.notificationsService.onReceviNotification(); + this.offlinemanager.synchnize() + } }); window.addEventListener('offline', () => { console.log('Became offline') this.backgroundservice.offline() }); - if (this.platform.is('desktop') || this.platform.is('mobileweb')) { - this.webnotification.webconnection(); - this.webnotification.register(); - } else { - window.addEventListener('online', (on) => { - console.log('Became online',on) - this.storage.get('storedreq').then((req) =>{ - console.log('STORED REQUEST', req) - req.forEach(element => { - this.eventservice.editEvent(element,2,3).subscribe((res) =>{ - console.log('REQUEST RESULT', res) - }) - }); - - }) - this.backgroundservice.online() - }); - window.addEventListener('offline', (off) => { - console.log('Became offline',off) - this.backgroundservice.offline() - }); - this.mobilefirstConnect(); - this.notificationsService.onReceviNotification(); - } - this.updateList() var myWorker = new Worker(new URL('./nice.worker.js', import.meta.url)); @@ -197,6 +179,8 @@ export class HomePage implements OnInit { } } + + updateList() { this.notificationsService.registerCallback( diff --git a/src/app/pages/agenda/edit-event/edit-event.page.ts b/src/app/pages/agenda/edit-event/edit-event.page.ts index f395efb24..37ee65584 100644 --- a/src/app/pages/agenda/edit-event/edit-event.page.ts +++ b/src/app/pages/agenda/edit-event/edit-event.page.ts @@ -209,6 +209,7 @@ export class EditEventPage implements OnInit { this.toastService.successMessage(); }, error => { + if(error.status != 0) this.toastService.badRequest() }); diff --git a/src/app/pages/agenda/view-event/view-event.page.ts b/src/app/pages/agenda/view-event/view-event.page.ts index 1a1b16934..21eb924f8 100644 --- a/src/app/pages/agenda/view-event/view-event.page.ts +++ b/src/app/pages/agenda/view-event/view-event.page.ts @@ -18,6 +18,7 @@ import { DocumentSetUpMeetingPage } from 'src/app/modals/document-set-up-meeting import { ExpedientTaskModalPage } from '../../gabinete-digital/expediente/expedient-task-modal/expedient-task-modal.page'; import { ViewDocumentPage } from 'src/app/modals/view-document/view-document.page'; import { BackgroundService } from 'src/app/services/background.service'; +import { StorageService } from 'src/app/services/storage.service'; @Component({ selector: 'app-view-event', @@ -66,7 +67,8 @@ export class ViewEventPage implements OnInit { private location: Location, public platform: Platform, private sqliteservice: SqliteService, - private backgroundservice: BackgroundService + private backgroundservice: BackgroundService, + private storage: StorageService ) { this.isEventEdited = false; this.loadedEvent = new Event(); @@ -100,6 +102,22 @@ export class ViewEventPage implements OnInit { this.loadEvent(); this.backgroundservice.registerBackService('Online', () => { + this.storage.get('eventEdit').then((req) => { + JSON.parse(req).forEach(element => { + this.eventsService.editEvent(element, 2, 3).subscribe((res) => { + this.storage.remove('eventEdit') + console.log('eventEdit synchnize', res) + }) + }); + }) + this.storage.get('eventDelete').then((req) => { + JSON.parse(req).forEach(element => { + this.eventsService.editEvent(element, 2, 3).subscribe((res) => { + this.storage.remove('eventDelete') + console.log('eventEdit synchnize', res) + }) + }); + }) this.loadEvent(); }); diff --git a/src/app/pages/events/events.page.ts b/src/app/pages/events/events.page.ts index 360f71d8c..80f075a36 100644 --- a/src/app/pages/events/events.page.ts +++ b/src/app/pages/events/events.page.ts @@ -19,6 +19,7 @@ import { ExpedienteGdStore } from 'src/app/store/expedientegd-store.service'; import { SqliteService } from 'src/app/services/sqlite.service'; import { NetworkConnectionService } from 'src/app/services/network-connection.service' import { BackgroundService } from 'src/app/services/background.service'; +import { momentG } from 'src/plugin/momentG'; @Component({ selector: 'app-events', @@ -107,14 +108,10 @@ export class EventsPage implements OnInit { // console.log('Resize event detected'); }); - - if (this.platform.is('desktop') || this.platform.is('mobileweb')) { - } else { - try { - this.sqliteservice.databaseConn(); - } catch (error) { - console.log("Error creating local database: ", error) - } + try { + this.sqliteservice.databaseConn(); + } catch (error) { + console.log("Error creating local database: ", error) } } @@ -208,18 +205,9 @@ export class EventsPage implements OnInit { const list = mdOficialEvents.concat(mdPessoalEvents); console.log("getAllMdOficialPessoalEvents", list) - if (this.platform.is('desktop') || this.platform.is('mobileweb')) { - } else { - if (list.length > 0) { - list.forEach(element => { - this.sqliteservice.addEvent(element) - }); - } - } + this.addEventToDb(list); this.listToPresent = list - - if (list.length > 0) { this.currentEvent = list[0].Subject; this.currentHoursMinutes = list[0].StartDate; @@ -236,14 +224,7 @@ export class EventsPage implements OnInit { const list = prOficialEvents.concat(prPessoalEvents); console.log("getAllPrOficialPessoalEvents", list) - if (this.platform.is('desktop') || this.platform.is('mobileweb')) { - } else { - if (list.length > 0) { - list.forEach(element => { - this.sqliteservice.addEvent(element) - }); - } - } + this.addEventToDb(list); if (list.length > 0) { this.currentEvent = list[0].Subject; this.currentHoursMinutes = list[0].StartDate; @@ -326,38 +307,65 @@ export class EventsPage implements OnInit { } */ } + addEventToDb(list) { + + if (this.platform.is('desktop') || this.platform.is('mobileweb')) { + } else { + if (list.length > 0) { + list.forEach(element => { + this.sqliteservice.addEvent(element) + }); + } + } + } + getEventsFromLocalDb() { - /* window.addEventListener('online', (on) => { - this.showGreeting(); - - this.router.events.forEach((event) => { - if (event instanceof NavigationEnd && event.url == '/home/events') { - this.RefreshEvents(); - setTimeout(() => { - this.LoadList(); - - }, 1500) - } - }); - this.hideSearch(); - }); */ - - // window.addEventListener('offline', (off) => { + let date = new Date(); + date.setMonth(date.getMonth() + 1); + let dateToday = date.getFullYear() + "-" + date.getMonth() + "-" + date.getDate(); + console.log('dateeeeee', dateToday) if (this.platform.is('desktop') || this.platform.is('mobileweb')) { } else { this.sqliteservice.getAllEvents().then((event: any[]) => { - this.listToPresent = event + let todayEvents = new Array() + event.forEach((element) => { + let eventObject = { + AppointmentState: element.AppointmentState, + Attachments: element.Attachments, + Attendees: element.Attendees, + CalendarId: element.CalendarId, + CalendarName: element.CalendarName, + Category: element.Category, + EndDate: element.EndDate, + EventId: element.EventId, + EventRecurrence: element.EventRecurrence, + EventType: element.EventType, + HasAttachments: element.HasAttachments, + HumanDate: element.HumanDate, + IsAllDayEvent: element.IsAllDayEvent, + IsMeeting: element.IsMeeting, + IsRecurring: element.IsRecurring, + Location: element.Location, + Organizer: element.Organizer, + Profile: element.Profile, + StartDate: element.StartDate, + Subject: element.Subject + } + let starteDate = momentG(new Date(element.StartDate), 'yyyy-MM-dd'); + console.log('startTOdayyy', starteDate) + if (dateToday == starteDate) { + todayEvents.push(eventObject); + } + }) + this.listToPresent = todayEvents this.totalEvent = this.listToPresent.length this.currentEvent = this.listToPresent[0].Subject this.currentHoursMinutes = this.listToPresent[0].StartDate console.log("All events from local,", event) }) - this.sqliteservice.getAllProcess().then((res) => { - console.log('INICION ALL EVENTs', res) - }) this.sqliteservice.getprocessByworkflow("Expediente").then((process: any[]) => { console.log('OFOFOFOOF', process) diff --git a/src/app/services/events.service.ts b/src/app/services/events.service.ts index 2c7b591f1..ed264d7ba 100644 --- a/src/app/services/events.service.ts +++ b/src/app/services/events.service.ts @@ -346,7 +346,7 @@ export class EventsService { return this.http.put(`${puturl}`, event, options).pipe( catchError(err => { - this.offlinemanager.storeRequest(puturl, 'PUT', arrayReq); + this.offlinemanager.storeRequestData('eventEdit', arrayReq); throw new Error(err); }) ) @@ -432,6 +432,13 @@ export class EventsService { } deleteEvent(eventid: string, eventDeleteType: number, calendarName: string) { + let arrayReq = []; + let Object = { + eventid: eventid, + eventDeleteType: eventDeleteType, + calendarName: calendarName + } + arrayReq.push(Object) const puturl = environment.apiURL + 'calendar/DeleteEvent'; let params = new HttpParams(); @@ -472,7 +479,12 @@ export class EventsService { break; } - return this.http.delete(`${puturl}`, options) + return this.http.delete(`${puturl}`, options).pipe( + catchError(err => { + this.offlinemanager.storeRequestData('eventDelete', arrayReq); + throw new Error(err); + }) + ) } postExpedientEvent(docId: any, body: any, sharedagenda: string, serialNumber: any, applicationID: any) { const geturl = environment.apiURL + 'calendar/' + ((sharedagenda != '') ? sharedagenda : 'CreateEventExpediente') + '/event'; diff --git a/src/app/services/offline-manager.service.ts b/src/app/services/offline-manager.service.ts index 2e44f1624..391753c69 100644 --- a/src/app/services/offline-manager.service.ts +++ b/src/app/services/offline-manager.service.ts @@ -4,91 +4,40 @@ import { Observable, from, of, forkJoin } from 'rxjs'; import { switchMap, finalize } from 'rxjs/operators'; import { HttpClient } from '@angular/common/http'; import { ToastController } from '@ionic/angular'; -const STORAGE_REQ_KEY = 'storedreq'; - -interface StoredRequest { - url: string, - type: string, - data: any, - time: number, - id: string -} - +import { BackgroundService } from 'src/app/services/background.service'; +import { EventsService } from 'src/app/services/events.service'; + + @Injectable({ providedIn: 'root' }) export class OfflineManagerService { - + /* eventservice: EventsService */ + + constructor( - private storage: Storage, - private http: HttpClient, - private toastController: ToastController) { } - - checkForEvents(): Observable { - return from(this.storage.get(STORAGE_REQ_KEY)).pipe( - switchMap(storedOperations => { - let storedObj = JSON.parse(storedOperations); - if (storedObj && storedObj.length > 0) { - return this.sendRequests(storedObj).pipe( - finalize(() => { - let toast = this.toastController.create({ - message: `Local data succesfully synced to API!`, - duration: 3000, - position: 'bottom' - }); - toast.then(toast => toast.present()); - - this.storage.remove(STORAGE_REQ_KEY); - }) - ); - } else { - console.log('no local events to sync'); - return of(false); - } + private storage: Storage, + /* private backgroundservice: BackgroundService */) { } + + synchnize() { + /* this.backgroundservice.registerBackService('Online', () => { + this.storage.get('eventEdit').then((req) => { + JSON.parse(req).forEach(element => { + this.eventservice.editEvent(element, 2, 3).subscribe((res) => { + this.storage.remove('eventEdit') + console.log('eventEdit synchnize', res) + }) + }); }) - ) + }) */ } - - storeRequest(url, type, data) { - let toast = this.toastController.create({ - message: `Your data is stored locally because you seem to be offline.`, - duration: 3000, - position: 'bottom' - }); - toast.then(toast => toast.present()); - - let action: StoredRequest = { - url: url, - type: type, - data: data, - time: new Date().getTime(), - id: Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 5) - }; - - return this.storage.get(STORAGE_REQ_KEY).then(storedOperations => { - let storedObj = JSON.parse(storedOperations); - - if (storedObj) { - storedObj.push(action); - } else { - storedObj = [action]; - } - // Save old & new local transactions back to Storage - return this.storage.set(STORAGE_REQ_KEY, JSON.stringify(storedObj)); - }); + + storeRequestData(key, data) { + return this.storage.set(key, JSON.stringify(data)); } - - sendRequests(operations: StoredRequest[]) { - let obs = []; - - for (let op of operations) { - console.log('Make one request: ', op); - let oneObs = this.http.request(op.type, op.url, op.data); - - obs.push(oneObs); - } - - // Send out all local events and return once they are finished - return forkJoin(obs); + + sendRequestData(key) { + return this.storage.get(key) } + } \ No newline at end of file diff --git a/src/app/services/sqlite.service.ts b/src/app/services/sqlite.service.ts index 18f451a31..c1f13cde1 100644 --- a/src/app/services/sqlite.service.ts +++ b/src/app/services/sqlite.service.ts @@ -26,13 +26,15 @@ export class SqliteService { } databaseConn() { - this.platform.ready().then(async () => { - await this.sqlite.create({ - name: this.db_name, - location: 'default' - }).then(async (sqLite: SQLiteObject) => { - this.dbInstance = sqLite; - await sqLite.executeSql(` + if (this.platform.is('desktop') || this.platform.is('mobileweb')) { + } else { + this.platform.ready().then(async () => { + await this.sqlite.create({ + name: this.db_name, + location: 'default' + }).then(async (sqLite: SQLiteObject) => { + this.dbInstance = sqLite; + await sqLite.executeSql(` CREATE TABLE IF NOT EXISTS ${this.events} ( EventId varchar(255) PRIMARY KEY, Subject varchar(255), @@ -57,12 +59,12 @@ export class SqliteService { Profile varchar(255), HumanDate varchar(255) )`, []) - .then((res) => { - console.log("Sucess Events Table created: ", res) - }) - .catch((error) => console.log(JSON.stringify(error))); + .then((res) => { + console.log("Sucess Events Table created: ", res) + }) + .catch((error) => console.log(JSON.stringify(error))); - await sqLite.executeSql(` + await sqLite.executeSql(` CREATE TABLE IF NOT EXISTS ${this.expedientes} ( serialNumber varchar(255) PRIMARY KEY, workflowInstanceFolio varchar(255), @@ -79,12 +81,12 @@ export class SqliteService { workflowInstanceID INTERGER, workflowName varchar(255) )`, []) - .then((res) => { - console.log("Sucess Espedientes Table created: ", res) - }) - .catch((error) => console.log(JSON.stringify(error))); + .then((res) => { + console.log("Sucess Espedientes Table created: ", res) + }) + .catch((error) => console.log(JSON.stringify(error))); - await sqLite.executeSql(` + await sqLite.executeSql(` CREATE TABLE IF NOT EXISTS ${this.allprocess} ( serialNumber varchar(255) PRIMARY KEY, workflowInstanceFolio varchar(255), @@ -102,12 +104,12 @@ export class SqliteService { workflowName varchar(255), interveners Text )`, []) - .then((res) => { - console.log("Sucess AllProcess Table created: ", res) - }) - .catch((error) => console.log(JSON.stringify(error))); + .then((res) => { + console.log("Sucess AllProcess Table created: ", res) + }) + .catch((error) => console.log(JSON.stringify(error))); - await sqLite.executeSql(` + await sqLite.executeSql(` CREATE TABLE IF NOT EXISTS ${this.actions} ( ProcessId INTERGER PRIMARY KEY, ActionType varchar(255), @@ -117,13 +119,14 @@ export class SqliteService { Description varchar(255), publications Text )`, []) - .then((res) => { - console.log("Sucess action Table created: ", res) - }) + .then((res) => { + console.log("Sucess action Table created: ", res) + }) + .catch((error) => console.log(JSON.stringify(error))); + }) .catch((error) => console.log(JSON.stringify(error))); - }) - .catch((error) => console.log(JSON.stringify(error))); - }); + }); + } } //addactions @@ -182,8 +185,8 @@ export class SqliteService { }); } - //updateevent - public updateEvent(data) { + //updateevent + public updateEvent(data) { this.dbInstance.executeSql(` INSERT OR REPLACE INTO ${this.events} (EventId,Subject,HasAttachments,Location,CalendarId,CalendarName,StartDate,EndDate,EventType,Attendees,IsMeeting,IsRecurring,IsAllDayEvent,AppointmentState,TimeZone,Organizer,Category,EventRecurrence,Attachments,Body,Profile,HumanDate ) VALUES ('${data.EventId}','${data.Subject}','${data.HasAttachments}','${data.Location}','${data.CalendarId}','${data.CalendarName}','${data.StartDate}','${data.EndDate}','${data.EventType}','${data.Attendees}','${data.IsMeeting}','${data.IsRecurring}', @@ -197,10 +200,10 @@ export class SqliteService { } //updateActions - public updateactions(id,data) { - console.log("update action data", data ) + public updateactions(id, data) { + console.log("update action data", data) this.dbInstance.executeSql(` - UPDATE ${this.actions} SET publications = ? WHERE ProcessId = ${id}`,[data]) + UPDATE ${this.actions} SET publications = ? WHERE ProcessId = ${id}`, [data]) .then(() => { console.log("action update with Success");