# ActivitiesService

**Kind:** Class

**Source:** `Frontend/src/app/services/dashboard/mydesk/activities.service.ts` (line 27)

**Part of:** [Frontend](subsystem-frontend-src-app)

`ActivitiesService` manages activity-related operations for the My Desk dashboard area. It exposes methods for mail state, popup status, user permission checks, activity retrieval, location types, participants, and activity searches.

## Methods

| Method | Signature | Returns |
|---|---|---|
| `sendNewMail` | `sendNewMail(Activiy: Activities, dataToAttach: DataToAttach, windowProperties: string)` | `void` |
| `getNewMail` | `getNewMail()` | `Activities` |
| `updateMailPopupWindowStatus` | `updateMailPopupWindowStatus(status: MailPopupWindowStatus)` | `void` |
| `isUserAllowed` | `isUserAllowed(activityId: number, actionId: number)` | `void` |
| `userAllowedActions` | `userAllowedActions(activityId: number)` | `void` |
| `getActivityByIdService` | `getActivityByIdService(ActivityID: number)` | `void` |
| `GetActivities` | `GetActivities(UserID: number, TaskID: number, ActivityType: number, KeyWord: string, principleId: number, clientId: number, projectId: number, responsibleId: number, contactID: number, preparedBy: number, perioretyID: number, InquiryNumber: number, InvoiceID: number, PaymentID: number)` | `void` |
| `GetLocationTypes` | `GetLocationTypes()` | `void` |
| `GetParticipant` | `GetParticipant()` | `void` |
| `searchActivities` | `searchActivities(ActivityType: number, SearchText: string, ID: number)` | `void` |
| `saveTopic` | `saveTopic(ActivityTopicmodel: ActivityTopic)` | `void` |
| `DeleteTopic` | `DeleteTopic(TopicID: number)` | `void` |
| `saveAction` | `saveAction(ActivityActionmodel: ActivityAction)` | `void` |
| `changeParentTopic` | `changeParentTopic(itemID: number, parentTopicID: number)` | `void` |
| `reorderTopicActionList` | `reorderTopicActionList(ActionList: ActivityAction[])` | `void` |
| `changeActivityStatus` | `changeActivityStatus(Activitymodel: Activities)` | `void` |
| `DeleteAction` | `DeleteAction(ActionID: number)` | `void` |
| `saveActiivity` | `saveActiivity(Activitymodel: Activities)` | `void` |
| `saveMailActiivityWithAttachment` | `saveMailActiivityWithAttachment(Activitymodel: Activities)` | `void` |
| `getActivityPurposeList` | `getActivityPurposeList()` | `void` |
| `GetCallTypes` | `GetCallTypes()` | `void` |
| `DeleteActivity` | `DeleteActivity(ActivityID: number)` | `void` |
| `RemoveTaskID` | `RemoveTaskID(actionID: number)` | `void` |
| `SaveTopicTemplete` | `SaveTopicTemplete(TopicTempleteModel: TopicTemplate)` | `void` |
| `GetTopicTemplateByID` | `GetTopicTemplateByID(ID: number)` | `void` |
| `GetTopicTemplates` | `GetTopicTemplates()` | `void` |
| `DeleteTopicTemplete` | `DeleteTopicTemplete(TopicTempleteID: number)` | `void` |
| `DeleteAllTopics` | `DeleteAllTopics(ActivityID: number)` | `void` |
| `GetTopicStandrdTemplateByID` | `GetTopicStandrdTemplateByID(ID: number)` | `void` |
| `GetTopicStandrdTemplates` | `GetTopicStandrdTemplates()` | `void` |
| `GetContactPhones` | `GetContactPhones(ID: undefined)` | `void` |
| `duplicateMeeting` | `duplicateMeeting(Id: number)` | `void` |
| `GetContactEmails` | `GetContactEmails()` | `void` |
| `SendEmail` | `SendEmail(EmailData: undefined)` | `void` |
| `handleError` | `handleError(error: HttpErrorResponse)` | `void` |

## Properties

| Property | Type |
|---|---|
| `resourceName` | `string` |
| `_mailPopupWindow` | `MailPopupWindowStatus` |
| `mailPopupWindow` | `Subject<MailPopupWindowStatus>` |
| `newWindow` | `any` |

## When something fails

- `ActivitiesService` handles failure in 1 place: it discards it silently in all 1.

## Diagram

```mermaid
graph LR
    Dashboard[My Desk Dashboard] --> Service[ActivitiesService]
    Service --> Mail[Mail State]
    Service --> Permissions[User Permissions]
    Service --> Activities[Activity Data]
    Service --> Lookups[Location Types and Participants]

    Mail --> Send[sendNewMail]
    Mail --> Read[getNewMail]
    Mail --> Popup[updateMailPopupWindowStatus]

    Permissions --> Allowed[isUserAllowed]
    Permissions --> Actions[userAllowedActions]

    Activities --> ById[getActivityByIdService]
    Activities --> List[GetActivities]
    Activities --> Search[searchActivities]

    Lookups --> Locations[GetLocationTypes]
    Lookups --> Participants[GetParticipant]
```

## Usage

```ts
import { Component } from '@angular/core';
import { ActivitiesService } from 'src/app/services/dashboard/mydesk/activities.service';

@Component({
  selector: 'app-activity-panel',
  template: `<button (click)="openNewMail()">New mail</button>`,
})
export class ActivityPanelComponent {
  constructor(private readonly activitiesService: ActivitiesService) {}

  openNewMail(): void {
    this.activitiesService.sendNewMail();
    this.activitiesService.updateMailPopupWindowStatus();
  }

  loadActivities(): void {
    this.activitiesService.GetActivities();
  }

  search(): void {
    this.activitiesService.searchActivities();
  }

  canAccessActivities(): void {
    const isAllowed = this.activitiesService.isUserAllowed();

    if (isAllowed) {
      this.activitiesService.GetActivities();
    }
  }

  getMailState() {
    return this.activitiesService.getNewMail();
  }
}
```

## AI Coding Instructions

- Preserve the existing method casing, including `GetActivities`, `GetLocationTypes`, and `GetParticipant`.
- Check `isUserAllowed()` and `userAllowedActions()` before exposing activity actions in dashboard components.
- Use `getNewMail()` to read the current mail state and `sendNewMail()` to trigger new-mail behavior.
- Keep activity, participant, and location-type requests inside `ActivitiesService` rather than duplicating service calls in components.
- Do not assume return types for methods other than `getNewMail()`, which returns `Activities`.

## Used by

19 references from 19 files. Each is a place in this repository where the symbol is actually used — go read one rather than trusting an example.

### Imported by (19)

- `Activities2Component` — `Frontend/src/app/components/dashboard/my-desk/activities/activities-2.component.ts`:1
- `ActivitiesComponent` — `Frontend/src/app/components/dashboard/my-desk/activities/activities.component.ts`:1
- `CallActivityComponent` — `Frontend/src/app/components/dashboard/my-desk/activities/call-activity/call-activity.component.ts`:1
- `MailActivityComponent` — `Frontend/src/app/components/dashboard/my-desk/activities/mail-activity/mail-activity.component.ts`:1
- `MeetingActivityComponent` — `Frontend/src/app/components/dashboard/my-desk/activities/meeting-activity/meeting-activity.component.ts`:1
- `NewActivityComponent` — `Frontend/src/app/components/dashboard/my-desk/activities/new-activity/new-activity.component.ts`:1
- `TopicComponent` — `Frontend/src/app/components/dashboard/my-desk/activities/topic/topic.component.ts`:1
- `VisitActivityComponent` — `Frontend/src/app/components/dashboard/my-desk/activities/visit-activity/visit-activity.component.ts`:1

…and 11 more.
