mirror of
https://code.equilibrium.co.ao/ITO/doneit-web.git
synced 2026-04-18 20:47:54 +00:00
Merge branch 'developer-c' into mobilefirst
This commit is contained in:
@@ -21,8 +21,11 @@
|
|||||||
<ion-row class="ion-align-items-center">
|
<ion-row class="ion-align-items-center">
|
||||||
<!-- Move back one screen of the slides -->
|
<!-- Move back one screen of the slides -->
|
||||||
|
|
||||||
<div (click)="back()" class="arrow">
|
<div class="arrow">
|
||||||
<ion-icon slot="icon-only" src="assets/images/icons-calendar-arrow-left.svg"></ion-icon>
|
<button (click)="back()" class="btn-no-color" >
|
||||||
|
<ion-icon slot="icon-only" src="assets/images/icons-calendar-arrow-left.svg"></ion-icon>
|
||||||
|
</button>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Move forward one screen of the slides -->
|
<!-- Move forward one screen of the slides -->
|
||||||
@@ -42,10 +45,23 @@
|
|||||||
|
|
||||||
</ion-row>
|
</ion-row>
|
||||||
<ion-row class="ion-align-items-center">
|
<ion-row class="ion-align-items-center">
|
||||||
<ion-icon *ngIf="profile == 'mdgpr' " (click)="changeProfile()" class="right-icons d-md-none" src="assets/images/icons-profile-calendar-md.svg">ddddddd</ion-icon>
|
|
||||||
<ion-icon *ngIf="profile == 'pr' " (click)="changeProfile()" class="right-icons d-md-none" src="assets/images/icons-profile-calendar-pr.svg">dddddddd</ion-icon>
|
<button *ngIf="profile == 'mdgpr' " (click)="changeProfile()" class="right-icons d-md-none">
|
||||||
<ion-icon (click)="viewEventsToApprove()" class="right-icons" src="assets/images/icons-received-event.svg"></ion-icon>
|
<ion-icon src="assets/images/icons-profile-calendar-md.svg">ddddddd</ion-icon>
|
||||||
<ion-icon (click)="clearContact();openAddEvent()" class="right-icons" src="assets/images/icons-add-new-event.svg" ></ion-icon>
|
</button>
|
||||||
|
|
||||||
|
<button *ngIf="profile == 'pr' " (click)="changeProfile()" class="btn-no-color">
|
||||||
|
<ion-icon class="right-icons d-md-none" src="assets/images/icons-profile-calendar-pr.svg">dddddddd</ion-icon>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<button class="btn-no-color" (click)="viewEventsToApprove()">
|
||||||
|
<ion-icon class="right-icons" src="assets/images/icons-received-event.svg"></ion-icon>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<button class="btn-no-color" (click)="clearContact();openAddEvent()">
|
||||||
|
<ion-icon class="right-icons" src="assets/images/icons-add-new-event.svg" ></ion-icon>
|
||||||
|
</button>
|
||||||
|
|
||||||
</ion-row>
|
</ion-row>
|
||||||
</ion-row>
|
</ion-row>
|
||||||
|
|
||||||
@@ -317,13 +333,13 @@
|
|||||||
<div class="event-details bg-blue ">
|
<div class="event-details bg-blue ">
|
||||||
|
|
||||||
<div *ngIf="(
|
<div *ngIf="(
|
||||||
mobileComponent.showAddNewEvent == false &&
|
mobileComponent.showAddNewEvent == false &&
|
||||||
mobileComponent.showEditEvent == false &&
|
mobileComponent.showEditEvent == false &&
|
||||||
mobileComponent.showEventDetails == false &&
|
mobileComponent.showEventDetails == false &&
|
||||||
mobileComponent.showEventList == false &&
|
mobileComponent.showEventList == false &&
|
||||||
mobileComponent.showEventToApprove == false &&
|
mobileComponent.showEventToApprove == false &&
|
||||||
mobileComponent.showAttendees == false &&
|
mobileComponent.showAttendees == false &&
|
||||||
mobileComponent.showAttendeeModal == false
|
mobileComponent.showAttendeeModal == false
|
||||||
)
|
)
|
||||||
"
|
"
|
||||||
class="text-black nothing-to-show">
|
class="text-black nothing-to-show">
|
||||||
@@ -349,9 +365,12 @@
|
|||||||
></app-new-event>
|
></app-new-event>
|
||||||
<!-- Edit -->
|
<!-- Edit -->
|
||||||
<app-edit-event *ngIf="mobileComponent.showEditEvent"
|
<app-edit-event *ngIf="mobileComponent.showEditEvent"
|
||||||
|
[taskParticipants]="taskParticipants"
|
||||||
|
[taskParticipantsCc]="taskParticipantsCc"
|
||||||
[profile]="profile"
|
[profile]="profile"
|
||||||
[selectedSegment]="segment"
|
[selectedSegment]="segment"
|
||||||
[postEvent]="postEvent"
|
[postEvent]="postEvent"
|
||||||
|
(clearPostEvent)="clearPostEvent"
|
||||||
(clearContact)="clearContact()"
|
(clearContact)="clearContact()"
|
||||||
(openAttendeesComponent)="openAttendeesComponent($event)"
|
(openAttendeesComponent)="openAttendeesComponent($event)"
|
||||||
(setContact)="setContact($event)"
|
(setContact)="setContact($event)"
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import { AlertService } from 'src/app/services/alert.service';
|
|||||||
import { momentG } from 'src/plugin/momentG';
|
import { momentG } from 'src/plugin/momentG';
|
||||||
import { DomSanitizer } from "@angular/platform-browser";
|
import { DomSanitizer } from "@angular/platform-browser";
|
||||||
import { EventPerson } from 'src/app/models/eventperson.model';
|
import { EventPerson } from 'src/app/models/eventperson.model';
|
||||||
|
import { removeDuplicate } from 'src/plugin/removeDuplicate.js'
|
||||||
|
|
||||||
// showTimeline
|
// showTimeline
|
||||||
import { setHours, setMinutes } from 'date-fns';
|
import { setHours, setMinutes } from 'date-fns';
|
||||||
@@ -94,11 +94,11 @@ export class AgendaPage implements OnInit {
|
|||||||
selectedEventId: string | number;
|
selectedEventId: string | number;
|
||||||
postEvent: any;
|
postEvent: any;
|
||||||
|
|
||||||
|
// temporary data
|
||||||
taskParticipants: any = [];
|
taskParticipants: any = [];
|
||||||
taskParticipantsCc: any = [];
|
taskParticipantsCc: any = [];
|
||||||
adding: "intervenient" | "CC" = "intervenient";
|
adding: "intervenient" | "CC" = "intervenient";
|
||||||
|
|
||||||
@ViewChild(CalendarComponent) myCal: CalendarComponent;
|
@ViewChild(CalendarComponent) myCal: CalendarComponent;
|
||||||
|
|
||||||
segment: "Combinado" | "Pessoal" | "Oficial";
|
segment: "Combinado" | "Pessoal" | "Oficial";
|
||||||
@@ -152,7 +152,7 @@ export class AgendaPage implements OnInit {
|
|||||||
private router: Router,
|
private router: Router,
|
||||||
private alertController: AlertService,
|
private alertController: AlertService,
|
||||||
private sanitizer: DomSanitizer
|
private sanitizer: DomSanitizer
|
||||||
) {
|
) {
|
||||||
|
|
||||||
this.calendarHeight = "333px";
|
this.calendarHeight = "333px";
|
||||||
this.showCalendar = true;
|
this.showCalendar = true;
|
||||||
@@ -161,13 +161,12 @@ export class AgendaPage implements OnInit {
|
|||||||
this.showLoader = false;
|
this.showLoader = false;
|
||||||
this.showTimelineFilterState = false;
|
this.showTimelineFilterState = false;
|
||||||
this.showTimeline = false;
|
this.showTimeline = false;
|
||||||
|
this.mobileComponent.showEventList = true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.profile = "mdgpr";
|
this.profile = "mdgpr";
|
||||||
//Inicializar segment
|
|
||||||
/* localStorage.setItem('test', this.eventSelectedDate.toString()); */
|
|
||||||
|
|
||||||
this.router.events.forEach((event) => {
|
this.router.events.forEach((event) => {
|
||||||
if(event instanceof NavigationEnd && event.url == "/home/agenda") {
|
if(event instanceof NavigationEnd && event.url == "/home/agenda") {
|
||||||
@@ -180,7 +179,6 @@ export class AgendaPage implements OnInit {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
window.onresize = (event) => {
|
window.onresize = (event) => {
|
||||||
// if not table remove all component
|
// if not table remove all component
|
||||||
if( window.innerWidth <= 1024){
|
if( window.innerWidth <= 1024){
|
||||||
@@ -209,6 +207,11 @@ export class AgendaPage implements OnInit {
|
|||||||
// show information about the clicked event in timeline
|
// show information about the clicked event in timeline
|
||||||
eventClicked({ event }: { event: CalendarEvent }): void {
|
eventClicked({ event }: { event: CalendarEvent }): void {
|
||||||
/* console.log('Event clicked', event); */
|
/* console.log('Event clicked', event); */
|
||||||
|
//clear
|
||||||
|
|
||||||
|
this.setIntervenient([]);
|
||||||
|
this.setIntervenientCC([]);
|
||||||
|
this.clearPostEvent();
|
||||||
|
|
||||||
this.IsEvent= "view";
|
this.IsEvent= "view";
|
||||||
|
|
||||||
@@ -995,12 +998,7 @@ export class AgendaPage implements OnInit {
|
|||||||
// open component
|
// open component
|
||||||
async openAttendeesComponent(data) {
|
async openAttendeesComponent(data) {
|
||||||
|
|
||||||
if(Array.isArray(data)){
|
this.adding = data.type
|
||||||
if(data.length >= 1){
|
|
||||||
|
|
||||||
this.contacts = data ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.cloneAllmobileComponent();
|
this.cloneAllmobileComponent();
|
||||||
this.mobileComponent.showAttendees = true;
|
this.mobileComponent.showAttendees = true;
|
||||||
@@ -1047,12 +1045,12 @@ export class AgendaPage implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async setIntervenient(data) {
|
async setIntervenient(data) {
|
||||||
this.taskParticipants = data;
|
this.taskParticipants = removeDuplicate(data)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async setIntervenientCC(data) {
|
async setIntervenientCC(data) {
|
||||||
this.taskParticipantsCc = data;
|
this.taskParticipantsCc = removeDuplicate(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Emitters
|
// Emitters
|
||||||
@@ -1061,4 +1059,9 @@ export class AgendaPage implements OnInit {
|
|||||||
this.adding = adding;
|
this.adding = adding;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
async clearPostEvent(){
|
||||||
|
this.postEvent = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
<ion-content>
|
<ion-content>
|
||||||
|
<!-- Edit event for Inicio -->
|
||||||
<div class="main-content height-100">
|
<div class="main-content height-100">
|
||||||
|
|
||||||
<div class="content d-flex flex-column width-md-100 height-100">
|
<div class="content d-flex flex-column width-md-100 height-100">
|
||||||
@@ -224,7 +225,7 @@
|
|||||||
[taskParticipants]="taskParticipants"
|
[taskParticipants]="taskParticipants"
|
||||||
[taskParticipantsCc]="taskParticipantsCc"
|
[taskParticipantsCc]="taskParticipantsCc"
|
||||||
[adding]="adding"
|
[adding]="adding"
|
||||||
|
(dynamicSetIntervenient)="dynamicSetIntervenient($event)"
|
||||||
></app-attendee-modal>
|
></app-attendee-modal>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -44,17 +44,20 @@ export class EditEventPage implements OnInit {
|
|||||||
this.postEvent.Body.Text = this.postEvent.Body.Text.replace(/<[^>]+>/g, '');
|
this.postEvent.Body.Text = this.postEvent.Body.Text.replace(/<[^>]+>/g, '');
|
||||||
}
|
}
|
||||||
|
|
||||||
this.taskParticipants = [];
|
|
||||||
this.taskParticipantsCc = [];
|
|
||||||
|
|
||||||
if(this.postEvent.Attendees == null){
|
if(this.postEvent.Attendees == null){
|
||||||
this.taskParticipants = []
|
this.taskParticipants = []
|
||||||
} else {
|
} else {
|
||||||
this.taskParticipants = this.postEvent.Attendees;
|
|
||||||
|
this.postEvent.Attendees.forEach(e =>{
|
||||||
|
if(e.IsRequired){
|
||||||
|
this.taskParticipants.push(e);
|
||||||
|
} else {
|
||||||
|
this.taskParticipantsCc.push(e);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.taskParticipantsCc = [];
|
|
||||||
|
|
||||||
if(this.postEvent.IsRecurring == false){
|
if(this.postEvent.IsRecurring == false){
|
||||||
this.isRecurring = "Não se repete";
|
this.isRecurring = "Não se repete";
|
||||||
}
|
}
|
||||||
@@ -80,7 +83,9 @@ export class EditEventPage implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
save(){
|
save(){
|
||||||
|
|
||||||
|
this.postEvent.Attendees = this.taskParticipants.concat(this.taskParticipantsCc)
|
||||||
|
|
||||||
this.eventsService.editEvent(this.postEvent, 2, 3).subscribe(async () => {
|
this.eventsService.editEvent(this.postEvent, 2, 3).subscribe(async () => {
|
||||||
const alert = await this.alertController.create({
|
const alert = await this.alertController.create({
|
||||||
cssClass: 'my-custom-class',
|
cssClass: 'my-custom-class',
|
||||||
@@ -122,7 +127,6 @@ export class EditEventPage implements OnInit {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setIntervenient(data){
|
setIntervenient(data){
|
||||||
@@ -145,4 +149,10 @@ export class EditEventPage implements OnInit {
|
|||||||
this.openAttendees();
|
this.openAttendees();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
dynamicSetIntervenient({taskParticipants, taskParticipantsCc}){
|
||||||
|
this.taskParticipants = taskParticipants;
|
||||||
|
this.taskParticipantsCc = taskParticipantsCc;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -90,13 +90,9 @@
|
|||||||
<ion-icon class="icon" slot="end" src="assets/images/icons-correspondencias.svg"></ion-icon>
|
<ion-icon class="icon" slot="end" src="assets/images/icons-correspondencias.svg"></ion-icon>
|
||||||
<div class="text">Correspondência por ler</div>
|
<div class="text">Correspondência por ler</div>
|
||||||
</div>
|
</div>
|
||||||
<ion-icon
|
<button class="btn-no-color" (click)="viewExpedientListPage()">
|
||||||
class="icon-next"
|
<ion-icon class="icon-next" slot="end" src="assets/images/icons-arrow-circle-arrow-right.svg"></ion-icon>
|
||||||
slot="end"
|
</button>
|
||||||
src="assets/images/icons-arrow-circle-arrow-right.svg"
|
|
||||||
(click)="viewExpedientListPage()"
|
|
||||||
></ion-icon>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<ion-list>
|
<ion-list>
|
||||||
|
|||||||
+6
-7
@@ -61,8 +61,8 @@
|
|||||||
</ion-list>
|
</ion-list>
|
||||||
</ion-item>
|
</ion-item>
|
||||||
</div>
|
</div>
|
||||||
<div class="add-people">
|
<div class="add-people" (click)="addParticipants(); showAttendees='true'">
|
||||||
<ion-icon (click)="addParticipants(); showAttendees='true'" slot="start" src="assets/images/icons-arrow-forward.svg"></ion-icon>
|
<ion-icon slot="start" src="assets/images/icons-arrow-forward.svg"></ion-icon>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -82,8 +82,8 @@
|
|||||||
</ion-list>
|
</ion-list>
|
||||||
</ion-item>
|
</ion-item>
|
||||||
</div>
|
</div>
|
||||||
<div class="add-people">
|
<div class="add-people" (click)="addParticipantsCc(); showAttendees='true'">
|
||||||
<ion-icon (click)="addParticipantsCc(); showAttendees='true'" slot="start" src="assets/images/icons-arrow-forward.svg"></ion-icon>
|
<ion-icon slot="start" src="assets/images/icons-arrow-forward.svg"></ion-icon>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -114,6 +114,7 @@
|
|||||||
</ion-list>
|
</ion-list>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="aside-right flex-column height-100">
|
<div class="aside-right flex-column height-100">
|
||||||
<app-empty-container
|
<app-empty-container
|
||||||
@@ -132,9 +133,7 @@
|
|||||||
(setIntervenientCC)="setIntervenientCC($event)"
|
(setIntervenientCC)="setIntervenientCC($event)"
|
||||||
(setContact)="setContact($event)"
|
(setContact)="setContact($event)"
|
||||||
></app-attendee-modal>
|
></app-attendee-modal>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</ion-content>
|
</ion-content>
|
||||||
|
|||||||
+57
-44
@@ -13,6 +13,7 @@ import { environment } from 'src/environments/environment';
|
|||||||
import { DiscartExpedientModalPage } from '../../discart-expedient-modal/discart-expedient-modal.page';
|
import { DiscartExpedientModalPage } from '../../discart-expedient-modal/discart-expedient-modal.page';
|
||||||
import { AttachmentsService } from 'src/app/services/attachments.service';
|
import { AttachmentsService } from 'src/app/services/attachments.service';
|
||||||
import { ExpedienteDetailPage } from '../expediente-detail/expediente-detail.page';
|
import { ExpedienteDetailPage } from '../expediente-detail/expediente-detail.page';
|
||||||
|
import { AlertService } from 'src/app/services/alert.service';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-expedient-task-modal',
|
selector: 'app-expedient-task-modal',
|
||||||
@@ -58,6 +59,7 @@ export class ExpedientTaskModalPage implements OnInit {
|
|||||||
private processes:ProcessesService,
|
private processes:ProcessesService,
|
||||||
private attachmentsService: AttachmentsService,
|
private attachmentsService: AttachmentsService,
|
||||||
private navParams: NavParams,
|
private navParams: NavParams,
|
||||||
|
private alertController: AlertService,
|
||||||
private authService: AuthService) {
|
private authService: AuthService) {
|
||||||
this.user = environment.defaultuser +'@'+ environment.domain;
|
this.user = environment.defaultuser +'@'+ environment.domain;
|
||||||
this.task = this.navParams.get('task');
|
this.task = this.navParams.get('task');
|
||||||
@@ -108,55 +110,65 @@ export class ExpedientTaskModalPage implements OnInit {
|
|||||||
}
|
}
|
||||||
cancelTask(){
|
cancelTask(){
|
||||||
this.modalController.dismiss(null);
|
this.modalController.dismiss(null);
|
||||||
//this.viewExpedientDetail();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
saveTask(){
|
saveTask(){
|
||||||
/* console.log(this.taskType); */
|
let attendees = this.taskParticipants.concat(this.taskParticipantsCc);
|
||||||
|
attendees = attendees.map(function(val) {
|
||||||
switch (this.taskType)
|
return {
|
||||||
{
|
UserEmail: val.EmailAddress,
|
||||||
case '0':
|
UserType: val.IsRequired?"I": "CC"
|
||||||
this.postData = {
|
};
|
||||||
DistributionType: "Paralelo",
|
})
|
||||||
CountryCode: 'AO',
|
if(this.taskParticipants.length > 0){
|
||||||
Priority: this.postData.Priority,
|
switch (this.taskType){
|
||||||
UserEmail: this.user,
|
case '0':
|
||||||
SubjectTypeId: this.postData.SubjectTypeId,
|
this.postData = {
|
||||||
UsersSelected: this.participants,
|
DistributionType: "Paralelo",
|
||||||
DispatchFolder: this.dispatchFolder,
|
CountryCode: 'AO',
|
||||||
}
|
Priority: this.postData.Priority,
|
||||||
console.log(this.postData);
|
UserEmail: this.user,
|
||||||
this.processes.postDespatcho(this.postData);
|
SubjectTypeId: this.postData.SubjectTypeId,
|
||||||
break;
|
UsersSelected: attendees,
|
||||||
case '1':
|
DispatchFolder: this.dispatchFolder,
|
||||||
this.postData = {
|
}
|
||||||
DistributionType: "Paralelo",
|
console.log(this.postData);
|
||||||
CountryCode: 'AO',
|
this.processes.postDespatcho(this.postData);
|
||||||
Priority: this.postData.Priority,
|
break;
|
||||||
UserEmail: this.user,
|
case '1':
|
||||||
SubjectTypeId: this.postData.SubjectTypeId,
|
this.postData = {
|
||||||
UsersSelected: this.participants,
|
DistributionType: "Paralelo",
|
||||||
DispatchFolder: this.dispatchFolder,
|
CountryCode: 'AO',
|
||||||
}
|
Priority: this.postData.Priority,
|
||||||
this.processes.postParecer(this.postData);
|
UserEmail: this.user,
|
||||||
break;
|
SubjectTypeId: this.postData.SubjectTypeId,
|
||||||
case '2':
|
UsersSelected: attendees,
|
||||||
this.postData = {
|
DispatchFolder: this.dispatchFolder,
|
||||||
DistributionType: "Paralelo",
|
}
|
||||||
CountryCode: 'AO',
|
console.log(this.postData);
|
||||||
Priority: this.postData.Priority,
|
this.processes.postParecer(this.postData);
|
||||||
UserEmail: this.user,
|
break;
|
||||||
SubjectTypeId: this.postData.SubjectTypeId,
|
case '2':
|
||||||
UsersSelected: this.participants,
|
this.postData = {
|
||||||
DispatchFolder: this.dispatchFolder,
|
DistributionType: "Paralelo",
|
||||||
}
|
CountryCode: 'AO',
|
||||||
this.processes.postDeferimento(this.postData);
|
Priority: this.postData.Priority,
|
||||||
break;
|
UserEmail: this.user,
|
||||||
}
|
SubjectTypeId: this.postData.SubjectTypeId,
|
||||||
|
UsersSelected: attendees,
|
||||||
|
DispatchFolder: this.dispatchFolder,
|
||||||
|
}
|
||||||
|
console.log(this.postData);
|
||||||
|
this.processes.postDeferimento(this.postData);
|
||||||
|
break;
|
||||||
|
}
|
||||||
this.modalController.dismiss('openDiscart');
|
this.modalController.dismiss('openDiscart');
|
||||||
/* this.distartExpedientModal();
|
/* this.distartExpedientModal();
|
||||||
this.close(); */
|
this.close(); */
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
this.alertController.presentAlert("Lista de intervenientes vazia. Por favor, adicione 1 ou mais intervenientes.");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
getAttachments(){
|
getAttachments(){
|
||||||
@@ -167,6 +179,8 @@ export class ExpedientTaskModalPage implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async addParticipants(){
|
async addParticipants(){
|
||||||
|
console.log('HERES');
|
||||||
|
|
||||||
|
|
||||||
this.adding = "intervenient";
|
this.adding = "intervenient";
|
||||||
this.contacts = this.taskParticipants;
|
this.contacts = this.taskParticipants;
|
||||||
@@ -242,7 +256,6 @@ export class ExpedientTaskModalPage implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async distartExpedientModal(){
|
async distartExpedientModal(){
|
||||||
console.log(this.task.serialNumber);
|
|
||||||
const modal = await this.modalController.create({
|
const modal = await this.modalController.create({
|
||||||
component: DiscartExpedientModalPage,
|
component: DiscartExpedientModalPage,
|
||||||
componentProps: {
|
componentProps: {
|
||||||
|
|||||||
@@ -14,7 +14,9 @@
|
|||||||
<div class="aside-wrapper d-flex flex-column pt-25 justify-center width-md-40 ">
|
<div class="aside-wrapper d-flex flex-column pt-25 justify-center width-md-40 ">
|
||||||
<div class="title-container">
|
<div class="title-container">
|
||||||
<span class="text-center mt-0 aside-title px-20">Gabinete Digital</span>
|
<span class="text-center mt-0 aside-title px-20">Gabinete Digital</span>
|
||||||
<ion-icon (click)="doRefresh($event)" class="title-icon" name="reload-circle"></ion-icon>
|
<button class="btn-no-color" (click)="doRefresh($event)">
|
||||||
|
<ion-icon class="title-icon" name="reload-circle"></ion-icon>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="aside overflow-y-auto d-flex d-md-block flex-wrap justify-center width-100 px-20">
|
<div class="aside overflow-y-auto d-flex d-md-block flex-wrap justify-center width-100 px-20">
|
||||||
|
|||||||
@@ -13,11 +13,15 @@ ion-content{
|
|||||||
}
|
}
|
||||||
.title-container{
|
.title-container{
|
||||||
margin-bottom: 15px;
|
margin-bottom: 15px;
|
||||||
|
.btn-no-color{
|
||||||
|
display: flex;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
.title-icon{
|
.title-icon{
|
||||||
float: right;
|
float: right;
|
||||||
margin-right: 20px;
|
margin-right: 20px;
|
||||||
font-size: 30px;
|
font-size: 30px;
|
||||||
color: #0782c9;
|
color: #42b9fe;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -33,8 +33,8 @@ export class GabineteDigitalPage implements OnInit {
|
|||||||
showExpediente : false
|
showExpediente : false
|
||||||
}
|
}
|
||||||
showEventsToApprove = false;
|
showEventsToApprove = false;
|
||||||
showEmptyContainer = true;
|
showEmptyContainer = false;
|
||||||
showExpedients = false;
|
showExpedients = true;
|
||||||
showExpedientDetail = false;
|
showExpedientDetail = false;
|
||||||
emptyTextDescription = 'Sem opção selecionada';
|
emptyTextDescription = 'Sem opção selecionada';
|
||||||
|
|
||||||
@@ -58,23 +58,13 @@ export class GabineteDigitalPage implements OnInit {
|
|||||||
|
|
||||||
this.adjastModalHeight();
|
this.adjastModalHeight();
|
||||||
|
|
||||||
/* this.activatedRoute.queryParams.subscribe(params => {
|
this.activatedRoute.queryParams.subscribe(params => {
|
||||||
if(params["show"]){
|
if(params["show"]){
|
||||||
this.openExpedientListPage();
|
this.openExpedientListPage();
|
||||||
}
|
}
|
||||||
else if(params["events-to-approve"]){
|
else if(params["events"]){
|
||||||
this.openEventsToApprovePage("MDGPR");
|
this.openEventsToApprovePage("MDGPR");
|
||||||
}
|
}
|
||||||
}); */
|
|
||||||
|
|
||||||
this.activatedRoute.paramMap.subscribe(paramMap =>{
|
|
||||||
if (paramMap.has("show")){
|
|
||||||
this.openExpedientListPage();
|
|
||||||
}
|
|
||||||
else if(paramMap.has("events")){
|
|
||||||
this.openEventsToApprovePage("MDGPR");
|
|
||||||
this.LoadCounts();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -161,7 +151,7 @@ this.processesbackend.GetActionsList().subscribe(res=>{
|
|||||||
|
|
||||||
doRefresh(event) {
|
doRefresh(event) {
|
||||||
this.closeAllDesktopComponents();
|
this.closeAllDesktopComponents();
|
||||||
this.showEmptyContainer = true;
|
this.showExpedients = true;
|
||||||
this.LoadCounts();
|
this.LoadCounts();
|
||||||
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<ion-toolbar class="ion-no-border bg-blue">
|
<ion-toolbar class="ion-no-border bg-blue">
|
||||||
<div class="div-top-header">
|
<div class="div-top-header">
|
||||||
<div class="div-search">
|
<div class="div-search">
|
||||||
<ion-icon src='assets/images/icons-search.svg'></ion-icon>
|
<ion-icon tappable src='assets/images/icons-search.svg'></ion-icon>
|
||||||
</div>
|
</div>
|
||||||
<div class="div-logo">
|
<div class="div-logo">
|
||||||
<img src='assets/images/logo-no-bg.png' alt='logo'>
|
<img src='assets/images/logo-no-bg.png' alt='logo'>
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
<div *ngIf="publication.Title != ''">
|
<div *ngIf="publication.Title != ''">
|
||||||
<div class="title-content">
|
<div class="title-content">
|
||||||
<div class="back-icon">
|
<div class="back-icon">
|
||||||
<ion-icon (click)="close()" slot="end" src='assets/images/icons-arrow-arrow-left.svg'></ion-icon>
|
<ion-icon tappable (click)="close()" slot="end" src='assets/images/icons-arrow-arrow-left.svg'></ion-icon>
|
||||||
</div>
|
</div>
|
||||||
<div class="div-title">
|
<div class="div-title">
|
||||||
<ion-label class="title"> {{publication.Title}}</ion-label>
|
<ion-label class="title"> {{publication.Title}}</ion-label>
|
||||||
|
|||||||
@@ -85,6 +85,8 @@ export class PublicationDetailPage implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async editPost(publicationType:any) {
|
async editPost(publicationType:any) {
|
||||||
|
console.log('HERE');
|
||||||
|
|
||||||
console.log(this.publication);
|
console.log(this.publication);
|
||||||
const modal = await this.modalController.create({
|
const modal = await this.modalController.create({
|
||||||
component: NewPublicationPage,
|
component: NewPublicationPage,
|
||||||
|
|||||||
@@ -21,8 +21,12 @@
|
|||||||
<ion-label class="title">Acções Presidenciais</ion-label>
|
<ion-label class="title">Acções Presidenciais</ion-label>
|
||||||
</div>
|
</div>
|
||||||
<div class="div-icon">
|
<div class="div-icon">
|
||||||
<ion-icon (click)="AddPublicationFolder()" slot="end" src='assets/images/icons-add.svg'></ion-icon>
|
<button class="btn-no-color" (click)="AddPublicationFolder()">
|
||||||
<ion-icon (click)="doRefresh($event)" class="title-icon" name="reload-circle"></ion-icon>
|
<ion-icon slot="icon-only" src='assets/images/icons-add.svg'></ion-icon>
|
||||||
|
</button>
|
||||||
|
<button class="btn-no-color" (click)="doRefresh($event)">
|
||||||
|
<ion-icon slot="icon-only" class="title-icon" name="reload-circle" title="Actualizar"></ion-icon>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -87,7 +91,8 @@
|
|||||||
class="height-100 d-flex flex-column overflow-hidden background-white flex-grow-1"
|
class="height-100 d-flex flex-column overflow-hidden background-white flex-grow-1"
|
||||||
[folderId]="folderId"
|
[folderId]="folderId"
|
||||||
[publicationType]="publicationType"
|
[publicationType]="publicationType"
|
||||||
|
[publicationId]="publicationId"
|
||||||
|
|
||||||
(closeDesktopComponent)="closeDesktopComponent($event)"
|
(closeDesktopComponent)="closeDesktopComponent($event)"
|
||||||
(goBacktoPublicationDetails)="goBacktoPublicationDetails($event)"
|
(goBacktoPublicationDetails)="goBacktoPublicationDetails($event)"
|
||||||
(goBackToViewPublications)="goBackToViewPublications($event)"
|
(goBackToViewPublications)="goBackToViewPublications($event)"
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import { ViewPublicationsPage } from './view-publications/view-publications.page
|
|||||||
import { Animation, AnimationController } from '@ionic/angular';
|
import { Animation, AnimationController } from '@ionic/angular';
|
||||||
import { LoadingController } from '@ionic/angular';
|
import { LoadingController } from '@ionic/angular';
|
||||||
import { LoadingService } from 'src/app/services/loading.service';
|
import { LoadingService } from 'src/app/services/loading.service';
|
||||||
|
import { Publication } from 'src/app/models/publication';
|
||||||
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
@@ -20,6 +21,7 @@ import { LoadingService } from 'src/app/services/loading.service';
|
|||||||
export class PublicationsPage implements OnInit {
|
export class PublicationsPage implements OnInit {
|
||||||
showLoader: boolean;
|
showLoader: boolean;
|
||||||
publicationFolder: PublicationFolder;
|
publicationFolder: PublicationFolder;
|
||||||
|
publication: Publication;
|
||||||
|
|
||||||
publicationFolderList: PublicationFolder[];
|
publicationFolderList: PublicationFolder[];
|
||||||
publicationsEventFolderList: PublicationFolder[];
|
publicationsEventFolderList: PublicationFolder[];
|
||||||
@@ -45,7 +47,7 @@ export class PublicationsPage implements OnInit {
|
|||||||
publicationId: string;
|
publicationId: string;
|
||||||
|
|
||||||
// from publication details
|
// from publication details
|
||||||
publication: object;
|
//publication: object;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private router: Router,
|
private router: Router,
|
||||||
|
|||||||
@@ -6,14 +6,18 @@
|
|||||||
|
|
||||||
<ion-form class="d-md-none">
|
<ion-form class="d-md-none">
|
||||||
<div class="d-flex search-input-container ion-justify-content-between" >
|
<div class="d-flex search-input-container ion-justify-content-between" >
|
||||||
<div class="icon" (click)="basicSearch()">
|
<div class="icon">
|
||||||
<ion-icon class="icon-z" slot="end" name="search"></ion-icon>
|
<button class="btn-no-color" (click)="basicSearch()">
|
||||||
|
<ion-icon class="icon-z" slot="end" name="search"></ion-icon>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="input-text d-flex ion-align-items-center">
|
<div class="input-text d-flex ion-align-items-center">
|
||||||
<ion-input [(ngModel)]='searchSubject' class="search-input" type="search" placeholder="Pesquisar"></ion-input>
|
<ion-input [(ngModel)]='searchSubject' class="search-input" type="search" placeholder="Pesquisar"></ion-input>
|
||||||
</div>
|
</div>
|
||||||
<div class="icon" (click)="clearSearchInput()">
|
<div class="icon">
|
||||||
<ion-icon name="restaurant-outline" src="assets/images/icons-search-close.svg"></ion-icon>
|
<button class="btn-no-color" (click)="clearSearchInput()">
|
||||||
|
<ion-icon name="restaurant-outline" src="assets/images/icons-search-close.svg"></ion-icon>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</ion-form>
|
</ion-form>
|
||||||
|
|||||||
@@ -67,13 +67,11 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="line"></div>
|
<div class="line"></div>
|
||||||
<div class="middle-content">
|
<div class="middle-content">
|
||||||
<div *ngIf="loadedEvent.workflowInstanceDataFields.Participants">
|
<div *ngIf="loadedEvent.workflowInstanceDataFields.ParticipantsList">
|
||||||
<h5>Intervenientes</h5>
|
<h5>Intervenientes</h5>
|
||||||
<ion-item class="ion-no-margin ion-no-padding">
|
<div *ngFor="let att of loadedEvent.workflowInstanceDataFields.ParticipantsList">
|
||||||
<ion-label>
|
<ion-label>{{att.Name}}</ion-label>
|
||||||
<p>{{loadedEvent.workflowInstanceDataFields.Participants}}</p>
|
</div>
|
||||||
</ion-label>
|
|
||||||
</ion-item>
|
|
||||||
</div>
|
</div>
|
||||||
<h5>Detalhes</h5>
|
<h5>Detalhes</h5>
|
||||||
<ion-item class="ion-no-margin ion-no-padding">
|
<ion-item class="ion-no-margin ion-no-padding">
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<div class="main-header">
|
<div class="main-header">
|
||||||
<div class="title-content">
|
<div class="title-content">
|
||||||
<div class="middle">
|
<div class="middle">
|
||||||
<ion-label class="title">Editar Evento</ion-label>
|
<ion-label class="title">Editar Evento agenda</ion-label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -130,43 +130,47 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="container-div d-flex">
|
<div class=" d-flex width-100">
|
||||||
<div class="ion-item-class-2 width-100 d-flex">
|
<div class="ion-item-class-2 width-100">
|
||||||
<div class="ion-icon-class">
|
<div class="ion-icon-class">
|
||||||
<ion-icon slot="start" src="assets/images/icons-person.svg"></ion-icon>
|
<ion-icon slot="start" src="assets/images/icons-person.svg"></ion-icon>
|
||||||
</div>
|
</div>
|
||||||
<div (click)="openAttendees()" class="ion-input-class d-flex flex-grow-1 width-100 overflow-hidden ">
|
<div class="ion-input-class-no-height">
|
||||||
<div class="list-people flex-grow-1">
|
<div class="list-people">
|
||||||
<ion-item lines="none">
|
<ion-item lines="none">
|
||||||
<ion-list>
|
<ion-list>
|
||||||
<ion-label class="list-people-title">Ver ou editar participantes</ion-label>
|
<ion-label *ngIf="taskParticipants.length == 0" class="list-people-title">Adicionar intervenientes</ion-label>
|
||||||
<ion-label hidden >Text</ion-label>
|
<ion-label *ngFor="let participant of taskParticipants">{{participant.Name}}</ion-label>
|
||||||
</ion-list>
|
</ion-list>
|
||||||
</ion-item>
|
</ion-item>
|
||||||
</div>
|
</div>
|
||||||
<div class="d-flex justify-center align-center font-35">
|
<div class="add-people">
|
||||||
<ion-icon slot="start" src="assets/images/icons-arrow-forward.svg"></ion-icon>
|
<button class="btn-no-color" (click)="addParticipants()">
|
||||||
|
<ion-icon class="font-35" slot="start" src="assets/images/icons-arrow-forward.svg"></ion-icon>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div hidden class="container-div d-flex">
|
<div class=" d-flex width-100">
|
||||||
<div class="ion-item-class-2 width-100 d-flex">
|
<div class="ion-item-class-2 width-100">
|
||||||
<div class="ion-icon-class">
|
<div class="ion-icon-class">
|
||||||
<ion-icon slot="start" src="assets/images/icons-people-cc.svg"></ion-icon>
|
<ion-icon slot="start" src="assets/images/icons-people-cc.svg"></ion-icon>
|
||||||
</div>
|
</div>
|
||||||
<div class="ion-input-class d-flex flex-grow-1 width-100 overflow-hidden">
|
<div class="ion-input-class-no-height">
|
||||||
<div class="list-people flex-grow-1">
|
<div class="list-people">
|
||||||
<ion-item lines="none">
|
<ion-item lines="none">
|
||||||
<ion-list>
|
<ion-list>
|
||||||
<ion-label class="list-people-title">Com conhecimento</ion-label>
|
<ion-label *ngIf="taskParticipantsCc.length == 0" class="list-people-title">Como conhecido</ion-label>
|
||||||
<ion-label hidden >Text</ion-label>
|
<ion-label *ngFor="let participant of taskParticipantsCc">{{participant.Name}}</ion-label>
|
||||||
</ion-list>
|
</ion-list>
|
||||||
</ion-item>
|
</ion-item>
|
||||||
</div>
|
</div>
|
||||||
<div class="d-flex justify-center align-center font-35">
|
<div class="add-people">
|
||||||
<ion-icon slot="start" src="assets/images/icons-arrow-forward.svg"></ion-icon>
|
<button class="btn-no-color" (click)="addParticipantsCc()">
|
||||||
|
<ion-icon class="font-35" slot="start" src="assets/images/icons-arrow-forward.svg"></ion-icon>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { EventPerson } from 'src/app/models/eventperson.model';
|
|||||||
import { EventsService } from 'src/app/services/events.service';
|
import { EventsService } from 'src/app/services/events.service';
|
||||||
import { Event } from 'src/app/models/event.model';
|
import { Event } from 'src/app/models/event.model';
|
||||||
import { AlertController } from '@ionic/angular';
|
import { AlertController } from '@ionic/angular';
|
||||||
|
import { removeDuplicate } from 'src/plugin/removeDuplicate.js'
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-edit-event',
|
selector: 'app-edit-event',
|
||||||
templateUrl: './edit-event.component.html',
|
templateUrl: './edit-event.component.html',
|
||||||
@@ -22,34 +22,47 @@ export class EditEventComponent implements OnInit {
|
|||||||
eventAttendees: EventPerson[];
|
eventAttendees: EventPerson[];
|
||||||
minDate: string;
|
minDate: string;
|
||||||
|
|
||||||
|
@Input() taskParticipants: EventPerson[];
|
||||||
|
@Input() taskParticipantsCc: any = [];
|
||||||
@Input() profile:string;
|
@Input() profile:string;
|
||||||
@Input() selectedSegment: string;
|
@Input() selectedSegment: string;
|
||||||
@Input() postEvent: any;
|
@Input() postEvent: any;
|
||||||
@Output() clearContact = new EventEmitter<any>();
|
@Output() clearContact = new EventEmitter<any>();
|
||||||
|
|
||||||
|
|
||||||
@Output() openAttendeesComponent = new EventEmitter<any>();
|
@Output() openAttendeesComponent = new EventEmitter<any>();
|
||||||
@Output() closeComponent = new EventEmitter<any>();
|
@Output() closeComponent = new EventEmitter<any>();
|
||||||
|
|
||||||
@Output() setIntervenient = new EventEmitter<any>();
|
@Output() setIntervenient = new EventEmitter<any>();
|
||||||
@Output() setIntervenientCC = new EventEmitter<any>();
|
@Output() setIntervenientCC = new EventEmitter<any>();
|
||||||
|
@Output() clearPostEvent = new EventEmitter<any>();
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private modalController: ModalController,
|
private modalController: ModalController,
|
||||||
private eventsService: EventsService,
|
private eventsService: EventsService,
|
||||||
public alertController: AlertController,
|
public alertController: AlertController,
|
||||||
)
|
) {
|
||||||
{
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
if(this.postEvent){
|
if(this.postEvent){
|
||||||
this.postEvent.Body.Text = this.postEvent.Body.Text.replace(/<[^>]+>/g, '');
|
this.postEvent.Body.Text = this.postEvent.Body.Text.replace(/<[^>]+>/g, '');
|
||||||
}
|
}
|
||||||
console.log(this.postEvent);
|
|
||||||
|
// attendees list
|
||||||
|
if(this.postEvent.Attendees != null) {
|
||||||
|
this.postEvent.Attendees.forEach(e =>{
|
||||||
|
if(e.IsRequired) {
|
||||||
|
this.taskParticipants.push(e);
|
||||||
|
} else {
|
||||||
|
this.taskParticipantsCc.push(e);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
this.taskParticipants = removeDuplicate(this.taskParticipants);
|
||||||
|
this.taskParticipantsCc = removeDuplicate(this.taskParticipantsCc);
|
||||||
|
|
||||||
this.isEventEdited = false;
|
this.isEventEdited = false;
|
||||||
|
|
||||||
if(this.postEvent.IsRecurring == false){
|
if(this.postEvent.IsRecurring == false){
|
||||||
@@ -61,32 +74,45 @@ export class EditEventComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
close(){
|
close(){
|
||||||
console.log('!!!!!!!!!!!!!!!!! close')
|
|
||||||
this.closeComponent.emit();
|
this.closeComponent.emit();
|
||||||
|
this.setIntervenient.emit([]);
|
||||||
|
this.setIntervenientCC.emit([]);
|
||||||
this.clearContact.emit();
|
this.clearContact.emit();
|
||||||
}
|
}
|
||||||
save(){
|
|
||||||
this.eventsService.editEvent(this.postEvent, 2, 3).subscribe(async () => {
|
async save(){
|
||||||
|
|
||||||
|
this.postEvent.Attendees = this.taskParticipants.concat(this.taskParticipantsCc);
|
||||||
|
|
||||||
|
await this.eventsService.editEvent(this.postEvent, 2, 3).subscribe(async () => {
|
||||||
const alert = await this.alertController.create({
|
const alert = await this.alertController.create({
|
||||||
cssClass: 'my-custom-class',
|
cssClass: 'my-custom-class',
|
||||||
header: 'Evento actualizado',
|
header: 'Evento actualizado',
|
||||||
buttons: ['OK']
|
buttons: ['OK']
|
||||||
});
|
});
|
||||||
await alert.present();
|
await alert.present();
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.clearPostEvent.emit();
|
||||||
|
|
||||||
this.closeComponent.emit();
|
this.close();
|
||||||
this.clearContact.emit();
|
|
||||||
|
|
||||||
this.setIntervenient.emit([]);
|
|
||||||
this.setIntervenientCC.emit([]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async openAttendees() {
|
async addParticipants() {
|
||||||
|
this.openAttendeesComponent.emit({
|
||||||
|
type: "intervenient"
|
||||||
|
});
|
||||||
|
|
||||||
|
this.clearContact.emit();
|
||||||
|
}
|
||||||
|
|
||||||
|
async addParticipantsCc() {
|
||||||
|
this.openAttendeesComponent.emit({
|
||||||
|
type: "CC"
|
||||||
|
});
|
||||||
|
|
||||||
this.openAttendeesComponent.emit();
|
|
||||||
|
|
||||||
this.clearContact.emit();
|
this.clearContact.emit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -140,7 +140,7 @@
|
|||||||
</ion-item>
|
</ion-item>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="add-people" (click)="openAttendees()">
|
<div class="add-people" (click)="addParticipants()">
|
||||||
<ion-icon slot="start" src="assets/images/icons-arrow-forward.svg"></ion-icon>
|
<ion-icon slot="start" src="assets/images/icons-arrow-forward.svg"></ion-icon>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -154,13 +154,16 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="ion-input-class-no-height flex-grow-1">
|
<div class="ion-input-class-no-height flex-grow-1">
|
||||||
<div class="list-people">
|
<div class="list-people">
|
||||||
|
|
||||||
<ion-item lines="none">
|
<ion-item lines="none">
|
||||||
<ion-list>
|
<ion-list>
|
||||||
<ion-label class="list-people-title">Com conhecimento</ion-label>
|
<ion-label *ngIf="taskParticipantsCc.length ==0" class="list-people-title">Com conhecimento</ion-label>
|
||||||
|
<ion-label *ngFor="let participant of taskParticipantsCc">{{participant.Name}}</ion-label>
|
||||||
</ion-list>
|
</ion-list>
|
||||||
</ion-item>
|
</ion-item>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="add-people">
|
<div class="add-people" (click)="addParticipantsCc()">
|
||||||
<ion-icon slot="start" src="assets/images/icons-arrow-forward.svg"></ion-icon>
|
<ion-icon slot="start" src="assets/images/icons-arrow-forward.svg"></ion-icon>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -132,10 +132,21 @@ export class NewEventPage implements OnInit {
|
|||||||
this.setIntervenientCC.emit([]);
|
this.setIntervenientCC.emit([]);
|
||||||
}
|
}
|
||||||
|
|
||||||
async openAttendees(){
|
|
||||||
|
|
||||||
this.saveTemporaryData();
|
async addParticipants() {
|
||||||
this.openAttendeesComponent.emit();
|
this.openAttendeesComponent.emit({
|
||||||
|
type: "intervenient"
|
||||||
|
});
|
||||||
|
|
||||||
|
this.clearContact.emit();
|
||||||
|
}
|
||||||
|
|
||||||
|
async addParticipantsCc() {
|
||||||
|
this.openAttendeesComponent.emit({
|
||||||
|
type: "CC"
|
||||||
|
});
|
||||||
|
|
||||||
|
this.clearContact.emit();
|
||||||
}
|
}
|
||||||
|
|
||||||
saveTemporaryData(){
|
saveTemporaryData(){
|
||||||
|
|||||||
@@ -3,14 +3,20 @@
|
|||||||
<div class="main-header px-20">
|
<div class="main-header px-20">
|
||||||
<div class="title-content d-flex" >
|
<div class="title-content d-flex" >
|
||||||
<div class="left">
|
<div class="left">
|
||||||
<ion-icon (click)="close()" slot="end" src='assets/images/icons-arrow-arrow-left.svg'></ion-icon>
|
<button class="btn-no-color" (click)="close()">
|
||||||
|
<ion-icon slot="end" src='assets/images/icons-arrow-arrow-left.svg'></ion-icon>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="middle flex-grow-1">
|
<div class="middle flex-grow-1">
|
||||||
<ion-label class="title">{{loadedEvent.Subject}}</ion-label>
|
<ion-label class="title">{{loadedEvent.Subject}}</ion-label>
|
||||||
</div>
|
</div>
|
||||||
<div class="div-icon">
|
<div class="div-icon">
|
||||||
<ion-icon class="edit" (click)="editEvent()" slot="end" src="assets/images/icons-edit.svg" ></ion-icon>
|
<button class="btn-no-color" (click)="editEvent()">
|
||||||
<ion-icon class="delete" (click)="deleteEvent()" name="trash-sharp"></ion-icon>
|
<ion-icon class="edit" slot="end" src="assets/images/icons-edit.svg" ></ion-icon>
|
||||||
|
</button>
|
||||||
|
<button class="btn-no-color" (click)="deleteEvent()">
|
||||||
|
<ion-icon class="delete" name="trash-sharp"></ion-icon>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -69,7 +69,7 @@
|
|||||||
|
|
||||||
<!-- Hide footer in gabinete-digital -->
|
<!-- Hide footer in gabinete-digital -->
|
||||||
<ion-footer class="ion-no-border" *ngIf="currentPath != '/home/gabinete-digital' ">
|
<ion-footer class="ion-no-border" *ngIf="currentPath != '/home/gabinete-digital' ">
|
||||||
<ion-toolbar class="width-100 d-flex justify-space-between px-20">
|
<ion-toolbar *ngIf="currentPath != '/home/events'" class="width-100 d-flex justify-space-between px-20">
|
||||||
<ion-buttons slot="start">
|
<ion-buttons slot="start">
|
||||||
<ion-button class="btn-cancel" fill="clear" color="#061b52" (click)="close()">
|
<ion-button class="btn-cancel" fill="clear" color="#061b52" (click)="close()">
|
||||||
<ion-label>Cancelar</ion-label>
|
<ion-label>Cancelar</ion-label>
|
||||||
|
|||||||
@@ -13,13 +13,16 @@ export class AttendeeModalPage implements OnInit {
|
|||||||
// Defined by the API
|
// Defined by the API
|
||||||
contacts: EventPerson[];
|
contacts: EventPerson[];
|
||||||
showLoader: boolean = false;
|
showLoader: boolean = false;
|
||||||
selectedContact: EventPerson[] =[];
|
|
||||||
eventPersons: EventPerson[];
|
eventPersons: EventPerson[];
|
||||||
|
|
||||||
@Input() taskParticipants:EventPerson[] = [];
|
@Input() taskParticipants:EventPerson[] = [];
|
||||||
@Input() taskParticipantsCc:EventPerson[] = [];
|
@Input() taskParticipantsCc:EventPerson[] = [];
|
||||||
|
|
||||||
constructor(private modalCtrl: ModalController, private contactsService: ContactsService) { }
|
constructor(
|
||||||
|
private modalCtrl: ModalController,
|
||||||
|
private contactsService: ContactsService ) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Output() closeComponent = new EventEmitter<any>();
|
@Output() closeComponent = new EventEmitter<any>();
|
||||||
|
|
||||||
@@ -31,6 +34,7 @@ export class AttendeeModalPage implements OnInit {
|
|||||||
@Input() adding: "intervenient" | "CC";
|
@Input() adding: "intervenient" | "CC";
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
|
|
||||||
this.fetchContacts("");
|
this.fetchContacts("");
|
||||||
|
|
||||||
if(this.taskParticipants == null || this.taskParticipants == undefined){
|
if(this.taskParticipants == null || this.taskParticipants == undefined){
|
||||||
@@ -46,7 +50,6 @@ export class AttendeeModalPage implements OnInit {
|
|||||||
ngOnChanges(event){}
|
ngOnChanges(event){}
|
||||||
|
|
||||||
save(){
|
save(){
|
||||||
|
|
||||||
this.setIntervenient.emit(this.taskParticipants);
|
this.setIntervenient.emit(this.taskParticipants);
|
||||||
this.setIntervenientCC.emit(this.taskParticipantsCc);
|
this.setIntervenientCC.emit(this.taskParticipantsCc);
|
||||||
|
|
||||||
@@ -61,8 +64,6 @@ export class AttendeeModalPage implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
close(){
|
close(){
|
||||||
// this.modalCtrl.dismiss(null);
|
|
||||||
this.selectedContact = [];
|
|
||||||
this.closeComponent.emit();
|
this.closeComponent.emit();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -72,29 +73,36 @@ export class AttendeeModalPage implements OnInit {
|
|||||||
|
|
||||||
filterSearchList(itm: EventPerson): boolean {
|
filterSearchList(itm: EventPerson): boolean {
|
||||||
|
|
||||||
if(this.adding == "intervenient"){
|
const result1 = this.taskParticipants.find((contact, index)=>{
|
||||||
const result = this.taskParticipants.find((contact, index)=>{
|
|
||||||
|
|
||||||
if(contact.Name == itm.Name && contact.EmailAddress == itm.EmailAddress){
|
|
||||||
index = index;
|
|
||||||
return contact;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return undefined == result;
|
|
||||||
|
|
||||||
} else if (this.adding == "CC") {
|
|
||||||
|
|
||||||
const result = this.taskParticipantsCc.find((contact, index)=>{
|
|
||||||
|
|
||||||
if(contact.Name == itm.Name && contact.EmailAddress == itm.EmailAddress){
|
if(contact.Name == itm.Name && contact.EmailAddress == itm.EmailAddress){
|
||||||
index = index;
|
index = index;
|
||||||
return contact;
|
return contact;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return undefined == result;
|
// if to show
|
||||||
|
if(undefined != result1){
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const result2 = this.taskParticipantsCc.find((contact, index)=>{
|
||||||
|
|
||||||
|
if(contact.Name == itm.Name && contact.EmailAddress == itm.EmailAddress){
|
||||||
|
index = index;
|
||||||
|
return contact;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// if to show
|
||||||
|
if(undefined != result2){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// don't show
|
||||||
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
remove(itm: EventPerson){
|
remove(itm: EventPerson){
|
||||||
@@ -110,8 +118,6 @@ export class AttendeeModalPage implements OnInit {
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} else if (this.adding == "CC") {
|
} else if (this.adding == "CC") {
|
||||||
|
|
||||||
this.taskParticipantsCc = this.taskParticipantsCc.filter((contact, index) =>{
|
this.taskParticipantsCc = this.taskParticipantsCc.filter((contact, index) =>{
|
||||||
@@ -138,10 +144,12 @@ export class AttendeeModalPage implements OnInit {
|
|||||||
|
|
||||||
if(this.adding == "intervenient"){
|
if(this.adding == "intervenient"){
|
||||||
|
|
||||||
|
itm.IsRequired = true;
|
||||||
this.taskParticipants.push(itm);
|
this.taskParticipants.push(itm);
|
||||||
|
|
||||||
} else if (this.adding == "CC") {
|
} else if (this.adding == "CC") {
|
||||||
|
|
||||||
|
itm.IsRequired = false;
|
||||||
this.taskParticipantsCc.push(itm);
|
this.taskParticipantsCc.push(itm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,15 +2,21 @@
|
|||||||
|
|
||||||
|
|
||||||
<div class="mobile d-flex div-top-header justify-space-between">
|
<div class="mobile d-flex div-top-header justify-space-between">
|
||||||
<div (click)="openSearch()" class="div-search">
|
<div class="div-search">
|
||||||
<ion-icon class="font-45" src='assets/images/icons-search.svg'></ion-icon>
|
<button class="btn-no-color" (click)="openSearch()">
|
||||||
|
<ion-icon class="font-45" src='assets/images/icons-search.svg'></ion-icon>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="div-logo height-fit-content">
|
<div class="div-logo height-fit-content">
|
||||||
<img src='assets/images/logo-no-bg.png' alt='logo'>
|
<img src='assets/images/logo-no-bg.png' alt='logo'>
|
||||||
</div>
|
</div>
|
||||||
<div class="div-profile" (click)="openProfile()">
|
<div class="div-profile">
|
||||||
<ion-icon class="font-45" *ngIf="profile == 'mdgpr' " src='assets/images/icons-profile.svg'></ion-icon>
|
<button class="btn-no-color" (click)="openProfile()">
|
||||||
<ion-icon class="font-45" *ngIf="profile == 'pr' " src='assets/images/icons-profile-pr-header.svg'></ion-icon>
|
<ion-icon class="font-45" *ngIf="profile == 'mdgpr' " src='assets/images/icons-profile.svg'></ion-icon>
|
||||||
|
</button>
|
||||||
|
<button class="btn-no-color" (click)="openProfile()">
|
||||||
|
<ion-icon class="font-45" *ngIf="profile == 'pr' " src='assets/images/icons-profile-pr-header.svg'></ion-icon>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -52,8 +58,13 @@
|
|||||||
|
|
||||||
<div class="d-flex">
|
<div class="d-flex">
|
||||||
<div class="mr-10 d-flex align-center">
|
<div class="mr-10 d-flex align-center">
|
||||||
<ion-icon *ngIf="!showSearch" (click)="showSearch=true" class="font-45" (click)="openSearch()" src='assets/images/icons-search.svg'></ion-icon>
|
<button (click)="openSearch()" *ngIf="!showSearch" class="btn-no-color" (click)="showSearch=true">
|
||||||
<ion-icon *ngIf="showSearch" (click)="closeSearch()" (click)="showSearch=false" class="font-40" name="restaurant-outline" src="assets/images/icons-search-close.svg"></ion-icon>
|
<ion-icon class="font-45" src='assets/images/icons-search.svg'></ion-icon>
|
||||||
|
</button>
|
||||||
|
<button class="btn-no-color" (click)="closeSearch()" *ngIf="showSearch" (click)="showSearch=false">
|
||||||
|
<ion-icon class="font-40" name="restaurant-outline" src="assets/images/icons-search-close.svg"></ion-icon>
|
||||||
|
</button>
|
||||||
|
|
||||||
<ion-form *ngIf="showSearch">
|
<ion-form *ngIf="showSearch">
|
||||||
<div class="d-flex search-input-container ml-10 justify-between" *ngIf="showSearch" >
|
<div class="d-flex search-input-container ml-10 justify-between" *ngIf="showSearch" >
|
||||||
<div class="icon" (click)="basicSearch()">
|
<div class="icon" (click)="basicSearch()">
|
||||||
@@ -76,7 +87,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</ion-toolbar>
|
</ion-toolbar>
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ export class HeaderPage implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async openSearch() {
|
async openSearch() {
|
||||||
|
|
||||||
const modal = await this.modalController.create({
|
const modal = await this.modalController.create({
|
||||||
component: SearchPage,
|
component: SearchPage,
|
||||||
cssClass: 'group-messages modal-desktop search-modal search-modal-to-desktop',
|
cssClass: 'group-messages modal-desktop search-modal search-modal-to-desktop',
|
||||||
|
|||||||
@@ -3,13 +3,17 @@
|
|||||||
<ion-content class=" bg-blue">
|
<ion-content class=" bg-blue">
|
||||||
<div class="profile-content">
|
<div class="profile-content">
|
||||||
|
|
||||||
<div class="d-flex justify-end" (click)="close()">
|
<div class="d-flex justify-end">
|
||||||
<ion-icon class="icon" src="assets/images/icons-search-close.svg"></ion-icon>
|
<button class="btn-no-color" (click)="close()">
|
||||||
|
<ion-icon class="icon" src="assets/images/icons-search-close.svg"></ion-icon>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="go-back d-flex align-center" (click)="close()">
|
<div class="go-back d-flex align-center" >
|
||||||
<ion-icon class="icon" src="assets/images/icons-calendar-arrow-left.svg"></ion-icon> <div>Perfil</div>
|
<button class="btn-no-color" (click)="close()">
|
||||||
|
<ion-icon class="icon" src="assets/images/icons-calendar-arrow-left.svg"></ion-icon> <div>Perfil</div>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div >
|
<div >
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ export class NewPublicationPage implements OnInit {
|
|||||||
|
|
||||||
@Input() publicationType: string;
|
@Input() publicationType: string;
|
||||||
@Input() folderId: string;
|
@Input() folderId: string;
|
||||||
|
@Input() publicationId:string;
|
||||||
@Output() closeDesktopComponent = new EventEmitter<any>();
|
@Output() closeDesktopComponent = new EventEmitter<any>();
|
||||||
@Output() openPublicationDetails = new EventEmitter<any>();
|
@Output() openPublicationDetails = new EventEmitter<any>();
|
||||||
@Output() goBackToViewPublications = new EventEmitter<any>();
|
@Output() goBackToViewPublications = new EventEmitter<any>();
|
||||||
@@ -59,10 +60,38 @@ export class NewPublicationPage implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
|
if(this.publicationType == '3'){
|
||||||
|
this.getPublicationDetail();
|
||||||
|
}
|
||||||
this.setTitle();
|
this.setTitle();
|
||||||
this.clear();
|
this.clear();
|
||||||
this.takePicture();
|
this.takePicture();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getPublicationDetail(){
|
||||||
|
this.showLoader = true;
|
||||||
|
console.log(this.publicationId);
|
||||||
|
/* console.log(this.folderId); */
|
||||||
|
this.publications.GetPublicationById(this.publicationId).subscribe(res=>{
|
||||||
|
console.log(res);
|
||||||
|
/* this.publication = res; */
|
||||||
|
this.publication = {
|
||||||
|
DateIndex: res.DateIndex,
|
||||||
|
DocumentId: res.DocumentId,
|
||||||
|
ProcessId:res.ProcessId,
|
||||||
|
Title:res.Title,
|
||||||
|
Message: res.Message,
|
||||||
|
DatePublication: res.DatePublication,
|
||||||
|
FileBase64: "data:image/jpg;base64," + res.FileBase64,
|
||||||
|
OriginalFileName: res.OriginalFileName,
|
||||||
|
FileExtension: 'jpeg',
|
||||||
|
}
|
||||||
|
this.pub = this.publication;
|
||||||
|
this.showLoader = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
takePicture(){
|
takePicture(){
|
||||||
const options: CameraOptions = {
|
const options: CameraOptions = {
|
||||||
quality: 90,
|
quality: 90,
|
||||||
@@ -189,7 +218,8 @@ export class NewPublicationPage implements OnInit {
|
|||||||
if(this.publicationType == '2'){
|
if(this.publicationType == '2'){
|
||||||
this.goBackToViewPublications.emit();
|
this.goBackToViewPublications.emit();
|
||||||
} else {
|
} else {
|
||||||
this.goBacktoPublicationDetails.emit();
|
this.goBackToViewPublications.emit();
|
||||||
|
//this.goBacktoPublicationDetails.emit();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-1
@@ -9,7 +9,10 @@
|
|||||||
<div *ngIf="publication.Title != ''">
|
<div *ngIf="publication.Title != ''">
|
||||||
<div class="title-content d-flex pl-20">
|
<div class="title-content d-flex pl-20">
|
||||||
<div class="back-icon " >
|
<div class="back-icon " >
|
||||||
<ion-icon (click)="goBack()" slot="end" src='assets/images/icons-arrow-arrow-left.svg'></ion-icon>
|
<button class="button" (click)="goBack()">
|
||||||
|
<ion-icon slot="end" src='assets/images/icons-arrow-arrow-left.svg'></ion-icon>
|
||||||
|
</button>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="div-title">
|
<div class="div-title">
|
||||||
<ion-label class="title"> {{publication.Title}}</ion-label>
|
<ion-label class="title"> {{publication.Title}}</ion-label>
|
||||||
|
|||||||
@@ -13,8 +13,12 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="actions-icon">
|
<div class="actions-icon">
|
||||||
<!-- <ion-icon (click)="AddPublication('1',item.ProcessId)" slot="end" src='assets/images/icons-add-photo.svg'></ion-icon> -->
|
<!-- <ion-icon (click)="AddPublication('1',item.ProcessId)" slot="end" src='assets/images/icons-add-photo.svg'></ion-icon> -->
|
||||||
<ion-icon (click)="AddPublication('2',item.ProcessId)" src='assets/images/icons-add.svg'></ion-icon>
|
<button class="btn-no-color" (click)="AddPublication('2',item.ProcessId)">
|
||||||
<ion-icon (click)="doRefresh($event)" class="title-icon" name="reload-circle"></ion-icon>
|
<ion-icon src='assets/images/icons-add.svg'></ion-icon>
|
||||||
|
</button>
|
||||||
|
<button class="btn-no-color" (click)="doRefresh($event)">
|
||||||
|
<ion-icon class="title-icon" name="reload-circle"></ion-icon>
|
||||||
|
</button >
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+15
-1
@@ -571,6 +571,20 @@ border-top: 1px solid #d8d8d8;
|
|||||||
}
|
}
|
||||||
.title-icon{
|
.title-icon{
|
||||||
font-size: 40px !important;
|
font-size: 40px !important;
|
||||||
color: #0782c9;
|
color: #42b9fe;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
|
}
|
||||||
|
ion-icon {
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
.btn-no-color{
|
||||||
|
background: transparent;
|
||||||
|
margin: 0 !important;
|
||||||
|
padding: 0 !important;
|
||||||
|
ion-icon{
|
||||||
|
font-size: 35px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.btn-no-color:focus{
|
||||||
|
outline: 0;
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
|
||||||
|
function removeDuplicate(data){
|
||||||
|
|
||||||
|
|
||||||
|
return [...new Set(data.map(JSON.stringify))].map(JSON.parse)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
removeDuplicate: removeDuplicate
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user