You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

232 line
12 KiB

  1. <div class="spt-container">
  2. <div class="card">
  3. <div class="card-body row">
  4. <div class="col-4">
  5. <h1>{{ partner.name }}</h1>
  6. <p>{{ partner.street }} {{ partner.streetNo }}<br/>
  7. {{ partner.zip }} {{ partner.city }}<br/>
  8. {{ partner.country }}</p>
  9. <p>Sprache: Deutsch</p>
  10. </div>
  11. <div class="col-4">
  12. <h2>10002</h2>
  13. <dl>
  14. <dt>Telefon:</dt>
  15. <dd>0177 289 23 02</dd>
  16. <dt>Website:</dt>
  17. <dd><a href="{{partner.website}}" target="_blank">{{ partner.website }}</a></dd>
  18. <dt>Streckenpunkt:</dt>
  19. <dd>AT-Salzburg</dd>
  20. <dt>Geschäftsbuchungsgruppe:</dt>
  21. <dd>DE-EU</dd>
  22. <dt>MwSt.-Geschäftsbuchungsgruppe:</dt>
  23. <dd>DE-DE</dd>
  24. <dt>Kreditlimit:</dt>
  25. <dd>50.000 €</dd>
  26. </dl>
  27. </div>
  28. <div class="col-4">
  29. <img *ngIf="partner.logoUrl !== null && partner.logoUrl !== undefined" src="{{partner.logoUrl}}"
  30. width="247"
  31. height="94" alt="{{partner.name}}" title="{{partner.name}}"/>
  32. </div>
  33. <span class="position-absolute bi p-2"
  34. [class.bi-heart]="partnerFollow === null"
  35. [class.bi-heart-fill]="partnerFollow !== null"
  36. [class.user-follows]="partnerFollow !== null"
  37. data-type="user-tool" data-action="follow"
  38. (click)="followPartner($event)"></span>
  39. <span class="position-absolute bi bi-pencil p-2" data-type="user-tool" data-action="edit"
  40. (click)="openModalEditPartner()"></span>
  41. </div>
  42. </div>
  43. </div>
  44. <div class="spt-container">
  45. <div class="contacts">
  46. <div class="d-flex justify-content-between align-items-start">
  47. <h2>{{ 'basic.contacts' | translate }}</h2>
  48. <button class="btn btn-primary" (click)="openModalNewContact()">{{ 'basic.new-contact' | translate }}
  49. </button>
  50. </div>
  51. <div class="row">
  52. <div class="col-4" *ngFor="let contact of contacts">
  53. <div class="card">
  54. <div class="card-body row">
  55. <div class="col-8">
  56. <h2>{{ contact.firstName }} {{ contact.lastName }}</h2>
  57. <p><a href="mailto:{{contact.email}}">{{ contact.email }}</a><br/>
  58. {{ contact.phone }}<br/>
  59. {{ contact.position }}</p>
  60. </div>
  61. <div class="col-4">
  62. <img *ngIf="contact.imageUrl !== null && contact.imageUrl !== undefined"
  63. ngSrc="{{contact.imageUrl}}" width="247" height="94"
  64. alt="{{contact.firstName}} {{contact.lastName}}"
  65. title="{{contact.firstName}} {{contact.lastName}}"/>
  66. </div>
  67. </div>
  68. </div>
  69. <div class="d-flex justify-content-end mt-1 mb-4">
  70. <span role="button" (click)="navigateToContactDetails(contact)"
  71. class="badge bg-secondary p-2">{{ 'basic.details' | translate }}</span>
  72. </div>
  73. </div>
  74. </div>
  75. <mat-paginator *ngIf="contacts.length > 0" class="rounded-1"
  76. [pageSizeOptions]="[6,12,18]"
  77. [length]="contactsLength"
  78. (page)="contactsHandlePageEvent($event)"
  79. [pageSize]="contactsPageSize"
  80. [pageIndex]="contactsPageIndex"
  81. showFirstLastButtons>
  82. </mat-paginator>
  83. </div>
  84. </div>
  85. <div class="spt-container">
  86. <div class="posts">
  87. <div class="d-flex justify-content-between align-items-start">
  88. <h2>Kunden Details</h2>
  89. </div>
  90. <div class="card mb-3">
  91. <div class="card-body">
  92. <div>
  93. <h3>Viel Platz für Freitext</h3>
  94. <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
  95. ut
  96. labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo
  97. dolores
  98. et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
  99. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
  100. ut
  101. labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo
  102. dolores
  103. et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit
  104. amet.</p>
  105. </div>
  106. </div>
  107. </div>
  108. </div>
  109. </div>
  110. <div class="spt-container">
  111. <div class="spt-accordion">
  112. <div class="d-flex justify-content-between align-items-start">
  113. <h2>{{ 'basic.tasks' | translate }}</h2>
  114. <button class="btn btn-primary" (click)="openModalNewTask()">{{ 'basic.new-task' | translate }}</button>
  115. </div>
  116. <div class="tasks mb-3" *ngFor="let task of tasks">
  117. <div class="card p-3">
  118. <div class="position-relative" data-bs-toggle="collapse"
  119. [attr.data-bs-target]="'#collapse-' + ApiConverter.extractId(task.id)"
  120. aria-expanded="false"
  121. aria-controls="collapseExample">
  122. <h3 class="m-0">{{ task.partnerName }}</h3>
  123. <span class="info d-flex position-absolute">
  124. <span class="due-date">{{ task.dueAt | date:'dd.MM.YYYY HH:mm':'GMT+0000' }}</span>
  125. <span class="importance" [attr.data-importance]="task.prio"></span>
  126. </span>
  127. <h2 class="m-0">{{ task.headline }}</h2>
  128. </div>
  129. <div class="collapse" id="collapse-{{ApiConverter.extractId(task.id)}}">
  130. <div class="pt-3 pe-5 position-relative">
  131. <p class="m-0">{{ task.description }}</p>
  132. <p>Zugewiesen an: {{ task.assignedToName }}</p>
  133. <span *ngIf="task.createdBy === user?.id" class="position-absolute bi bi-pencil p-2"
  134. data-type="user-tool" data-action="edit" (click)="openModalEditTask(task)"></span>
  135. </div>
  136. </div>
  137. </div>
  138. <div *ngIf="task.id && taskNotesVisibility.get(task.id)">
  139. <div class="card ms-5" *ngFor="let taskNote of task.taskNotes">
  140. <div class="card-body">
  141. <div class="d-flex justify-content-between align-items-center">
  142. <p>{{ taskNote.createdAt | date:'dd.MM.YYYY HH:mm' }}</p>
  143. <p>{{ taskNote.ownerName }}</p>
  144. </div>
  145. <div>
  146. <p>{{ taskNote.message }}</p>
  147. </div>
  148. <span *ngIf="taskNote.owner === user?.id" class="position-absolute bi bi-pencil p-2"
  149. data-type="user-tool" data-action="edit" (click)="openModalEditTaskNote(taskNote)"></span>
  150. </div>
  151. </div>
  152. </div>
  153. <div class="d-flex justify-content-end mt-1">
  154. <span *ngIf="task.taskNotes?.length !== 0" role="button" class="badge bg-secondary p-2 me-2"
  155. (click)="showTaskNotes(task)">
  156. <ng-container *ngIf="task.id && taskNotesVisibility.get(task.id)">{{ 'basic.hide-comments' | translate }}</ng-container>
  157. <ng-container *ngIf="task.id && !taskNotesVisibility.get(task.id)">{{ 'basic.show-comments' | translate }}</ng-container>
  158. </span>
  159. <span role="button" class="badge bg-secondary p-2"
  160. (click)="openModalNewTaskNote(task)">{{ 'basic.comment-it' | translate }}</span>
  161. </div>
  162. </div>
  163. <mat-paginator *ngIf="tasks.length > 0" class="rounded-1"
  164. [pageSizeOptions]="[10,20,30]"
  165. [length]="tasksLength"
  166. (page)="tasksHandlePageEvent($event)"
  167. [pageSize]="tasksPageSize"
  168. [pageIndex]="tasksPageIndex"
  169. showFirstLastButtons>
  170. </mat-paginator>
  171. </div>
  172. </div>
  173. <div class="spt-container">
  174. <div class="posts">
  175. <div class="d-flex justify-content-between align-items-start">
  176. <h2>{{ 'basic.posts' | translate }}</h2>
  177. <button class="btn btn-primary" (click)="openModalNewPosting()">{{ 'basic.new-post' | translate }}</button>
  178. </div>
  179. <div class="post mb-3" *ngFor="let post of posts">
  180. <div class="card">
  181. <div class="card-body">
  182. <div class="d-flex justify-content-between align-items-center">
  183. <p>{{ post.createdAt | date:'dd.MM.YYYY HH:mm' }}</p>
  184. <p>{{ post.ownerName }}</p>
  185. </div>
  186. <div>
  187. <h3>{{ post.headline }}</h3>
  188. <p>{{ post.message }}</p>
  189. </div>
  190. <span *ngIf="post.owner === user?.id" class="position-absolute bi bi-pencil p-2"
  191. data-type="user-tool"
  192. data-action="edit" (click)="openModalEditPosting(post)"></span>
  193. </div>
  194. </div>
  195. <div *ngIf="post.id && commentsVisibility.get(post.id)">
  196. <div class="card ms-5" *ngFor="let comment of post.comments">
  197. <div class="card-body">
  198. <div class="d-flex justify-content-between align-items-center">
  199. <p>{{ comment.createdAt | date:'dd.MM.YYYY HH:mm' }}</p>
  200. <p>{{ comment.ownerName }}</p>
  201. </div>
  202. <div>
  203. <p>{{ comment.message }}</p>
  204. </div>
  205. <span *ngIf="comment.owner === user?.id" class="position-absolute bi bi-pencil p-2"
  206. data-type="user-tool" data-action="edit" (click)="openModalEditComment(comment)"></span>
  207. </div>
  208. </div>
  209. </div>
  210. <div class="d-flex justify-content-end mt-1">
  211. <span *ngIf="post.comments?.length !== 0" role="button" class="badge bg-secondary p-2 me-2"
  212. (click)="showComments(post)">
  213. <ng-container *ngIf="post.id && commentsVisibility.get(post.id)">{{ 'basic.hide-comments' | translate }}</ng-container>
  214. <ng-container *ngIf="post.id && !commentsVisibility.get(post.id)">{{ 'basic.show-comments' | translate }}</ng-container>
  215. </span>
  216. <span role="button" class="badge bg-secondary p-2"
  217. (click)="openModalNewComment(post)">{{ 'basic.comment-it' | translate }}</span>
  218. </div>
  219. </div>
  220. <mat-paginator *ngIf="posts.length > 0" class="rounded-1"
  221. [pageSizeOptions]="[10,20,30]"
  222. [length]="postsLength"
  223. (page)="postsHandlePageEvent($event)"
  224. [pageSize]="postsPageSize"
  225. [pageIndex]="postsPageIndex"
  226. showFirstLastButtons>
  227. </mat-paginator>
  228. </div>
  229. </div>