Changes in / [63d885e:c406ae5]


Ignore:
Location:
Farmatiko/ClientApp
Files:
7 added
23 deleted
15 edited

Legend:

Unmodified
Added
Removed
  • Farmatiko/ClientApp/angular.json

    r63d885e rc406ae5  
    5454          "builder": "@angular-devkit/build-angular:dev-server",
    5555          "options": {
    56             "browserTarget": "Farmatiko:build",
    57             "port": 80
     56            "browserTarget": "Farmatiko:build"
    5857          },
    5958          "configurations": {
  • Farmatiko/ClientApp/src/app/admin/admin.component.css

    r63d885e rc406ae5  
    1111    width: 30vh;
    1212}
    13 
    14 h2 {
    15     text-align: center;
    16     padding: 50px;
    17 }
  • Farmatiko/ClientApp/src/app/admin/admin.component.html

    r63d885e rc406ae5  
    2222        <div class="wrapper">
    2323          <div>
    24             <table class='table table-striped table-bordered table-sm' cellspacing="0" width="100%" aria-labelledby="tableLabel" *ngIf="requests">
     24            <table class='table table-striped table-bordered table-sm' cellspacing="0" width="100%" aria-labelledby="tableLabel" *ngIf="true">
    2525              <thead>
    2626                <tr>
     
    3131              </thead>
    3232              <tbody>
    33                 <tr *ngFor="let request of requests">
    34                   <td>{{request.PharmacyHead.Name}} | {{request.PharmacyHead.Email}}</td>
    35                   <td><a (click)="openPharmacyDialog(request.Pharmacy)">{{request.Pharmacy.name}}</a></td>
    36                   <td><a (click)="approveRequest(request)">Approve</a> | <a (click)="rejectRequest(request)">Reject</a></td>
     33                <tr *ngFor="let head of heads">
     34                  <td>{{head.Name}} | {{head.Email}}</td>
     35                  <td>{{head.Pharmacy[0].name}}</td>
     36                  <td><a (click)="Approve()">Approve</a> | <a (click)="Reject()">Reject</a></td>
    3737                </tr>
    3838              </tbody>
     
    4444        <div class="wrapper">
    4545          <div>
    46             <table class='table table-striped table-bordered table-sm' cellspacing="0" width="100%" aria-labelledby="tableLabel" *ngIf="heads">
     46            <table class='table table-striped table-bordered table-sm' cellspacing="0" width="100%" aria-labelledby="tableLabel" *ngIf="true">
    4747              <thead>
    4848                <tr>
     
    5353              <tbody>
    5454                <tr *ngFor="let head of heads">
    55                   <td><a (click)="openPharmacyHeadDialog(head)">{{head.Name}}</a> | {{head.Email}}</td>
    56                   <td><a (click)="deletePharmacyHead(head)">Delete</a> | <a (click)="openEditPharmacyHeadDialog(head)">Change</a></td>
     55                  <td>{{head.Name}} | {{head.Email}}</td>
     56                  <td><a (click)="Del(head)">Delete</a> | <a (click)="ChangeDialog(head)">Change</a></td>
    5757                </tr>
    5858              </tbody>
     
    6262      </mat-tab>
    6363        <mat-tab label="Create new account">
    64           <h2 *ngIf="!this.head">Loading form...</h2>
    65           <div class="createform" *ngIf="this.head">
     64          <div class="createform">
    6665          <mat-form-field appearance="fill">
    6766            <mat-label>Name</mat-label>
    68             <input matInput [(ngModel)]="this.head.Name">
     67            <input matInput [(ngModel)]="head.Name">
    6968          </mat-form-field><br>
    7069          <mat-form-field appearance="fill">
    7170            <mat-label>Email</mat-label>
    72             <input matInput [(ngModel)]="this.head.Email">
     71            <input matInput [(ngModel)]="head.Email">
    7372          </mat-form-field><br>
    7473          <mat-form-field appearance="fill">
    7574            <mat-label>Password</mat-label>
    76             <input matInput [(ngModel)]="this.head.Passwd">
     75            <input matInput [(ngModel)]="head.Passwd">
    7776          </mat-form-field><br>
    7877            <button onclick="createHead()" mat-raised-button color="primary">Create</button>
     
    8079        </mat-tab>
    8180</mat-tab-group>
     81
     82<div class="status">{{status}}</div>
  • Farmatiko/ClientApp/src/app/admin/admin.component.ts

    r63d885e rc406ae5  
    1 import { Component, OnInit } from '@angular/core';
     1import { Component, OnInit, Inject, Output, EventEmitter } from '@angular/core';
     2import { Pharmacy } from '../models/Pharmacy';
     3import { HttpClient } from '@angular/common/http';
    24import { MatDialog } from '@angular/material/dialog';
    35import { MatSnackBar, MatSnackBarRef, SimpleSnackBar } from '@angular/material/snack-bar';
    4 import { Router } from '@angular/router';
    5 import { IPharmacyHead, IPharmacyHeadRequest, IPharmacy } from '../shared/interfaces';
    6 import { DataService } from '../shared/data.service';
    7 import { EditPharmacyHeadDialogComponent } from '../dialogs/edit-pharmacy-head-dialog/edit-pharmacy-head-dialog.component';
    8 import { PharmacyDialogComponent } from '../dialogs/pharmacy-dialog/pharmacy-dialog.component';
    9 import { PharmacyHeadDialogComponent } from '../nav-menu/dialogs/pharmacy-head-dialog/pharmacy-head-dialog.component';
     6import { Router, RouterModule } from '@angular/router';
     7import { PharmacyHead } from '../models/PharmacyHead';
     8import { FormControl } from '@angular/forms';
    109
    1110
     
    1615})
    1716export class AdminComponent implements OnInit {
    18   public heads: IPharmacyHead[] = [];
    19   public requests: IPharmacyHeadRequest[] = [];
    20   public head: IPharmacyHead;
     17  public heads: PharmacyHead[];
     18  public head: PharmacyHead;
     19  public status: string;
    2120
    22   constructor(private dataService: DataService, private dialog: MatDialog, private snackBar: MatSnackBar, private router: Router) {
     21  constructor(http: HttpClient, @Inject('BASE_URL') baseUrl: string, private dialog: MatDialog, private _snackBar: MatSnackBar, private router: Router) {
     22    http.get<PharmacyHead[]>(baseUrl + 'PharmacyHead/Get?').subscribe(result => {
     23      this.heads = result;
     24      console.log(this.heads);
     25    }, error => console.error(error));
     26  }
     27
     28  ngOnInit(): void {
     29    this.head = new PharmacyHead();
     30  }
     31
     32  createHead() {
     33    console.log(this.head);
     34    // post request vo prodolzenie
     35
     36    this.status="Status bar createHead";
     37    //window.location.reload();
     38  }
     39
     40  Del(head: PharmacyHead) {
     41    console.log(this.head);
     42    // post request vo prodolzenie
     43
     44    this.status="Status bar Del";
     45  }
     46
     47  ChangeDialog(head: PharmacyHead) {
     48    console.log(this.head);
    2349
    2450  }
    2551
    26   ngOnInit(): void {
    27     this.dataService.getPharmacyHeads()
    28         .subscribe((pHeads: IPharmacyHead[]) => {
    29           this.heads = pHeads;
    30         },
    31         (err: any) => console.log(err),
    32         () => console.log("PharmacyHead data retrieved"));
     52  Reject() {
     53    console.log('Rejected');
     54    // post request vo prodolzenie
    3355
    34     this.dataService.getClaimingRequests()
    35     .subscribe((pRequests: IPharmacyHeadRequest[]) => {
    36       this.requests = pRequests;
    37     },
    38     (err: any) => console.log(err),
    39     () => console.log("PharmacyHead data retrieved"));
    4056  }
    4157
    42   createHead() {
    43     this.dataService.insertPharmacyHead(this.head)
    44         .subscribe((cHead: IPharmacyHead) => {
    45           if(cHead) {
    46             this.heads.push(cHead);
    47             this.openSnackBar("New head created!","OK");
    48           }
    49         },
    50         (err: any) => console.log(err),
    51         () => console.log("PharmacyHead inserted"));
    52     this.head = null;
    53   }
     58  Approve() {
     59    console.log('Approved');
     60    // post request vo prodolzenie
    5461
    55   deletePharmacyHead(dHead: IPharmacyHead) {
    56     this.dataService.deletePharmacyHead(dHead.id)
    57         .subscribe((status: boolean) => {
    58           if(status) {
    59             this.openSnackBar("Head deleted!","OK");
    60           }
    61         },
    62         (err: any) => console.log(err),
    63         () => console.log("PharmacyHead deleted"));
    64   }
    65 
    66   openEditPharmacyHeadDialog(eHead: IPharmacyHead) {
    67     let dialogRef = this.dialog.open(EditPharmacyHeadDialogComponent, {
    68       width: '450px',
    69       data: eHead
    70     });
    71     dialogRef.afterClosed().subscribe((editedHead: IPharmacyHead) => {
    72       if(editedHead){
    73         this.heads = this.heads.filter(x => x !== eHead);
    74         this.heads.push(editedHead);
    75         this.dataService.updatePharmacyHead(editedHead)
    76             .subscribe((hd: IPharmacyHead) => {
    77               if(hd) {
    78                 this.openSnackBar("Success! PharmacyHead edited", "OK").onAction().subscribe(() => {
    79                   window.location.reload();
    80                 });
    81               }
    82               else {
    83                 this.openSnackBar("PharmacyHead edit failed", "Try again");
    84               }
    85             },
    86             (err: any) => console.log(err),
    87             () => console.log('PharmacyHead data updated'));
    88       }
    89     });
    90   }
    91 
    92   openPharmacyDialog(pharmacy: IPharmacy): void {
    93     this.dialog.open(PharmacyDialogComponent, {
    94       width: '450px',
    95       data: pharmacy
    96     });
    97   }
    98 
    99   openPharmacyHeadDialog(hd: IPharmacyHead): void {
    100     this.dialog.open(PharmacyHeadDialogComponent, {
    101       width: '450px',
    102       data: hd
    103     });
    104   }
    105 
    106   rejectRequest(req: IPharmacyHeadRequest) {
    107     this.dataService.deleteClaimingRequest(req.id)
    108         .subscribe((status: boolean) => {
    109           if(status) {
    110             this.openSnackBar("Request rejected!","OK");
    111           }
    112           else {
    113             this.openSnackBar("Something went wrong","Try again");
    114           }
    115         },
    116         (err: any) => console.log(err),
    117         () => console.log("PharmacyHeadRequest deleted"));
    118   }
    119 
    120   approveRequest(req: IPharmacyHeadRequest) {
    121     if(req) {
    122     req.PharmacyHead.Pharmacy.push(req.Pharmacy);
    123     this.dataService.updatePharmacyHead(req.PharmacyHead)
    124         .subscribe(() => {
    125          
    126         },
    127         (err: any) => console.log(err),
    128         () => console.log("PharmacyHead updated"))
    129     }
    130   }
    131 
    132   openSnackBar(message: string, action: string) : MatSnackBarRef<SimpleSnackBar> {
    133     return this.snackBar.open(message, action, {
    134       duration: 5000,
    135     });
    13662  }
    13763
  • Farmatiko/ClientApp/src/app/app.module.ts

    r63d885e rc406ae5  
    66import { MaterialModule } from './shared/material.module';
    77import { ReactiveFormsModule } from '@angular/forms';
    8 
    9 import { DataService } from './shared/data.service';
    108
    119import { AppComponent } from './app.component';
     
    1816import { DashboardComponent } from './dashboard/dashboard.component';
    1917import { LoginComponent } from './login/login.component';
    20 import { MedicineDialogComponent } from './dialogs/medicine-dialog/medicine-dialog.component';
    21 import { PharmacyDialogComponent } from './dialogs/pharmacy-dialog/pharmacy-dialog.component';
    22 import { FacilityDialogComponent } from './dialogs/facility-dialog/facility-dialog.component';
    23 import { WorkerDialogComponent } from './dialogs/worker-dialog/worker-dialog.component';
    24 import { EditPharmacyDialogComponent } from './dialogs/edit-pharmacy-dialog/edit-pharmacy-dialog.component';
    25 import { EditPharmacyHeadDialogComponent } from './dialogs/edit-pharmacy-head-dialog/edit-pharmacy-head-dialog.component';
    26 import { PharmacyHeadDialogComponent } from './nav-menu/dialogs/pharmacy-head-dialog/pharmacy-head-dialog.component';
    2718
    2819@NgModule({
     
    3526    AdminComponent,
    3627    DashboardComponent,
    37     LoginComponent,
    38     MedicineDialogComponent,
    39     PharmacyDialogComponent,
    40     FacilityDialogComponent,
    41     WorkerDialogComponent,
    42     EditPharmacyDialogComponent,
    43     EditPharmacyHeadDialogComponent,
    44     PharmacyHeadDialogComponent
     28    LoginComponent
    4529  ],
    4630  imports: [
     
    5438      { path: 'admin', component: AdminComponent },
    5539      { path: 'dashboard', component: DashboardComponent },
    56       { path: 'dashboard/:token', component: DashboardComponent },
    5740      { path: 'login', component: LoginComponent }
    5841    ]),
     
    6144    ReactiveFormsModule
    6245  ],
    63   providers: [
    64     DataService
    65   ],
     46  providers: [],
    6647  bootstrap: [AppComponent]
    6748})
  • Farmatiko/ClientApp/src/app/counter/counter.component.html

    r63d885e rc406ae5  
    88    <h2>Здравствени установи</h2>
    99  <mat-form-field>
    10     <input matInput (keyup)="applyFilterFacilities($event.target.value)" placeholder="Пронајди установа">
     10    <input matInput (keyup)="applyFilter($event.target.value)" placeholder="Пронајди установа">
    1111  </mat-form-field>
    1212    </div>   
    13     <table class='table table-striped' aria-labelledby="tableLabel" *ngIf="true">
    14       <thead>
    15         <tr>
    16           <th>Име</th>
    17           <th>Општина</th>
    18           <th>Адреса</th>
    19           <th>Тип</th>
    20           <th>Е-пошта</th>
    21           <th>Телефон</th>
    22         </tr>
    23       </thead>
    24       <tbody>
    25         <tr *ngFor="let facility of filteredFacilities">
    26           <td><a (click)="openFacilityDialog(facility)">{{ facility.name }}</a></td>
    27           <td>{{ facility.municipality }}</td>
    28           <td>{{ facility.address }}</td>
    29           <td>{{ facility.type }}</td>
    30           <td>{{ facility.email }}</td>
    31           <td>{{ facility.phone }}</td>
    32         </tr>
    33     </tbody>
    34   </table>
     13  <table [dataSource]="dataSource" mat-table matSort class="mat-elevation-z8">
     14      <ng-container matColumnDef="id">
     15        <th mat-header-cell *matHeaderCellDef mat-sort-header> id </th>
     16        <td mat-cell *matCellDef="let facilities"> {{facilities.id}} </td>
     17      </ng-container>
     18
     19      <ng-container matColumnDef="createdOn">
     20        <th mat-header-cell *matHeaderCellDef mat-sort-header> createdOn </th>
     21        <td mat-cell *matCellDef="let facilities"> {{facilities.createdOn}} </td>
     22      </ng-container>
     23     
     24      <ng-container matColumnDef="deletedOn">
     25        <th mat-header-cell *matHeaderCellDef mat-sort-header> deletedOn </th>
     26        <td mat-cell *matCellDef="let facilities"> {{facilities.deletedOn}} </td>
     27      </ng-container>
     28
     29      <ng-container matColumnDef="Име">
     30        <th mat-header-cell *matHeaderCellDef mat-sort-header> Име </th>
     31        <td mat-cell *matCellDef="let facilities"> {{facilities.name}} </td>
     32      </ng-container>
     33
     34      <ng-container matColumnDef="Општина">
     35        <th mat-header-cell *matHeaderCellDef mat-sort-header> Општина </th>
     36        <td mat-cell *matCellDef="let facilities"> {{facilities.municipality}} </td>
     37      </ng-container>
     38
     39      <ng-container matColumnDef="Адреса">
     40        <th mat-header-cell *matHeaderCellDef mat-sort-header> Адреса </th>
     41        <td mat-cell *matCellDef="let facilities"> {{facilities.address}} </td>
     42      </ng-container>
     43
     44      <ng-container matColumnDef="Тип">
     45        <th mat-header-cell *matHeaderCellDef mat-sort-header> Тип </th>
     46        <td mat-cell *matCellDef="let facilities"> {{facilities.type}} </td>
     47      </ng-container>
     48
     49      <ng-container matColumnDef="Е-пошта">
     50        <th mat-header-cell *matHeaderCellDef mat-sort-header> Е-пошта </th>
     51        <td mat-cell *matCellDef="let facilities"> {{facilities.email}} </td>
     52      </ng-container>
     53
     54      <ng-container matColumnDef="Телефон">
     55        <th mat-header-cell *matHeaderCellDef mat-sort-header> Телефон </th>
     56        <td mat-cell *matCellDef="let facilities"> {{facilities.phone}} </td>
     57      </ng-container>
     58
     59        <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
     60        <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
     61    </table>
     62    <mat-paginator #paginator [pageSize]="100" [pageSizeOptions]="[5, 10, 20, 100]"></mat-paginator>
    3563  </div>
    3664  </mat-tab>
     
    4371    </mat-form-field>
    4472    </div>
    45     <table class='table table-striped' aria-labelledby="tableLabel" *ngIf="true">
    46       <thead>
    47         <tr>
    48           <th>Име</th>
    49           <th>Гранка</th>
    50           <th>Установа</th>
    51           <th>Назив</th>
    52         </tr>
    53       </thead>
    54       <tbody>
    55         <tr *ngFor="let worker of filteredWorkers">
    56           <td><a (click)="openWorkerDialog(worker)">{{ worker.name }}</a></td>
    57           <td>{{ worker.branch }}</td>
    58           <td>{{ worker.facility }}</td>
    59           <td>{{ worker.title }}</td>
    60         </tr>
    61     </tbody>
    62   </table>
     73      <table [dataSource]="dataSourceWorkers" mat-table matSort class="mat-elevation-z8">
     74        <ng-container matColumnDef="Име">
     75          <th mat-header-cell *matHeaderCellDef mat-sort-header> Име </th>
     76          <td mat-cell *matCellDef="let workers"> {{workers.name}} </td>
     77        </ng-container>
     78
     79        <ng-container matColumnDef="Гранка">
     80          <th mat-header-cell *matHeaderCellDef mat-sort-header> Гранка </th>
     81          <td mat-cell *matCellDef="let workers"> {{workers.branch}} </td>
     82        </ng-container>
     83
     84        <ng-container matColumnDef="Установа">
     85          <th mat-header-cell *matHeaderCellDef mat-sort-header> Установа </th>
     86          <td mat-cell *matCellDef="let workers"> {{workers.facility}} </td>
     87        </ng-container>
     88
     89        <ng-container matColumnDef="Назив">
     90          <th mat-header-cell *matHeaderCellDef mat-sort-header> Назив </th>
     91          <td mat-cell *matCellDef="let workers"> {{workers.title}} </td>
     92        </ng-container>
     93
     94          <tr mat-header-row *matHeaderRowDef="displayedColumnsWorkers"></tr>
     95          <tr mat-row *matRowDef="let row; columns: displayedColumnsWorkers;"></tr>
     96      </table>
     97      <mat-paginator #paginator [pageSize]="5" [pageSizeOptions]="[5, 10, 20, 100]"></mat-paginator>
    6398    </div>
    6499    </mat-tab>
  • Farmatiko/ClientApp/src/app/counter/counter.component.ts

    r63d885e rc406ae5  
    1 import { Component, OnInit } from '@angular/core';
    2 import { IHealthFacilities, IHealthcareWorkers } from '../shared/interfaces';
    3 import { DataService } from '../shared/data.service';
    4 import { MatDialog } from '@angular/material/dialog';
    5 import { FacilityDialogComponent } from '../dialogs/facility-dialog/facility-dialog.component';
    6 import { WorkerDialogComponent } from '../dialogs/worker-dialog/worker-dialog.component';
     1import { Component, OnInit, ViewChild, Inject, Input } from '@angular/core';
     2import { HttpClient } from '@angular/common/http';
     3import { HealthFacilities } from '../models/HealthFacilities';
     4import { MatTableDataSource } from '@angular/material/table';
     5import { MatPaginator } from '@angular/material/paginator';
     6import { MatSort } from '@angular/material/sort';
     7import { HealthcareWorkers } from '../models/HealthcareWorkers';
    78
    89@Component({
     
    1213})
    1314export class CounterComponent implements OnInit {
    14   public facilities: IHealthFacilities[] = [];
    15   public workers: IHealthcareWorkers[] = [];
    16   public filteredFacilities: IHealthFacilities[] = [];
    17   public filteredWorkers: IHealthcareWorkers[] = [];
     15  @Input() facilities: HealthFacilities[];
     16  public workers: HealthcareWorkers[];
     17  displayedColumns = ['id','createdOn','deletedOn','Име','Општина','Адреса', 'Тип', 'Е-пошта', 'Телефон'];
     18  displayedColumnsWorkers = ['Име','Гранка','Установа', 'Назив'];
     19  dataSource = new MatTableDataSource<HealthFacilities>();
     20  dataSourceWorkers = new MatTableDataSource<HealthcareWorkers>();
    1821
    19   constructor(private dataService: DataService, private dialog: MatDialog) {
    20    
     22  @ViewChild(MatPaginator, {static: false}) paginator: MatPaginator;
     23  @ViewChild(MatSort) sort: MatSort;
     24
     25  constructor(http: HttpClient, @Inject('BASE_URL') baseUrl: string) {
     26    http.get<HealthFacilities[]>(baseUrl + 'HealthFacilities/Get?').subscribe(result => {
     27      this.facilities = result;
     28      console.log(this.facilities);
     29      this.dataSource = new MatTableDataSource<HealthFacilities>(this.facilities);
     30    }, error => console.error(error));
     31    http.get<HealthcareWorkers[]>(baseUrl + 'HealthcareWorker/Get?').subscribe(result => {
     32      this.workers = result;
     33      console.log(this.workers);
     34      this.dataSourceWorkers = new MatTableDataSource<HealthcareWorkers>(this.workers);
     35    }, error => console.error(error));
     36  }
     37  ngOnInit(): void {
    2138  }
    2239
    23   ngOnInit(): void {
    24     this.dataService.getFacilities()
    25         .subscribe((facility: IHealthFacilities[]) => {
    26           this.facilities = this.filteredFacilities = facility;
    27         },
    28         (err: any) => console.log(err),
    29         () => console.log('Facility data retrieved!'));
    30 
    31     this.dataService.getWorkers()
    32         .subscribe((worker: IHealthcareWorkers[]) => {
    33           this.workers = this.filteredWorkers = worker;
    34         },
    35         (err: any) => console.log(err),
    36         () => console.log('Facility data retrieved!'));
     40  ngAfterViewInit(): void {
     41    this.dataSource.paginator = this.paginator;
     42    this.dataSource.sort = this.sort;
    3743  }
    3844
    39   applyFilterFacilities(filterValue: string) {
    40     console.log("applyFilterFacilities works!")
    41     if(filterValue) {
    42       this.dataService.searchFacilities(filterValue)
    43           .subscribe((facility: IHealthFacilities[]) => {
    44             this.filteredFacilities = facility;
    45           },
    46           (err: any) => console.log(err),
    47           () => console.log('Facility data retrieved!'));
    48     }
    49     else {
    50       this.filteredFacilities = this.facilities;
    51     }
     45  applyFilter(filterValue: string) {
     46    filterValue = filterValue.trim();
     47    filterValue = filterValue.toLowerCase();
     48    this.dataSource.filter = filterValue;
    5249  }
    5350
    5451  applyFilterWorkers(filterValue: string) {
    55     console.log("applyFilterWorkers works!")
    56     if(filterValue) {
    57       this.dataService.searchWorkers(filterValue)
    58           .subscribe((worker: IHealthcareWorkers[]) => {
    59             this.filteredWorkers = worker;
    60           },
    61           (err: any) => console.log(err),
    62           () => console.log('Worker data retrieved!'));
    63     }
    64     else {
    65       this.filteredWorkers = this.workers;
    66     }
    67   }
    68 
    69   openFacilityDialog(facility: IHealthFacilities): void {
    70     this.dialog.open(FacilityDialogComponent, {
    71       width: '450px',
    72       data: facility
    73     });
    74   }
    75  
    76   openWorkerDialog(worker: IHealthcareWorkers): void {
    77     this.dialog.open(WorkerDialogComponent, {
    78       width: '450px',
    79       data: worker
    80     });
     52    filterValue = filterValue.trim();
     53    filterValue = filterValue.toLowerCase();
     54    this.dataSourceWorkers.filter = filterValue;
    8155  }
    8256}
  • Farmatiko/ClientApp/src/app/dashboard/dashboard.component.html

    r63d885e rc406ae5  
    1212        <div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
    1313          <ul class="navbar-nav flex-grow">
    14             <li>Logged as ...<p *ngIf="head">{{head.Name}}</p> </li>
     14            <li>Logged as  <!--{{head.Name}}--> </li>
    1515          </ul>
    1616        </div>
     
    1818        <button mat-button [matMenuTriggerFor]="menu"><mat-icon>more_vert</mat-icon></button>
    1919        <mat-menu #menu="matMenu">
    20           <button mat-menu-item [routerLink]="['/']"><mat-icon>directions</mat-icon>Почетна</button>
     20          <button mat-menu-item (click)="openDialog()"><mat-icon>person_add</mat-icon>View homepage</button>
     21          <button mat-menu-item (click)="test()"><mat-icon>directions</mat-icon>Go to homepage</button>
    2122        </mat-menu>
    2223      </div>
     
    2930    <div class="header">
    3031    <h2>Мои аптеки</h2>
    31     <p *ngIf="!head"><em>Loading...</em></p>
     32    <p *ngIf="!mypharmacies"><em>Loading...</em></p>
    3233    </div>
    33     <table class='table table-striped table-bordered table-sm' cellspacing="0" width="100%" aria-labelledby="tableLabel" *ngIf="head">
     34    <table class='table table-striped table-bordered table-sm' cellspacing="0" width="100%" aria-labelledby="tableLabel" *ngIf="true">
    3435      <thead>
    3536        <tr>
     
    4243      </thead>
    4344      <tbody>
    44         <tr *ngFor="let pharmacies of head.Pharmacy">
     45        <tr *ngFor="let pharmacies of mypharmacies">
    4546          <td>{{pharmacies.name}}</td>
    4647          <td>{{pharmacies.location}}</td>
    4748          <td>{{pharmacies.address}}</td>
    4849          <td>{{pharmacies.workAllTime}}</td>
    49           <td><a (click)="openEditPharmacyDialog(pharmacies)">Edit</a></td>
     50          <td><a (click)="works24hrs(pharmacies)">Работи 24/7</a> | <a (click)="doesntWork24hrs(pharmacies)">Не работи 24/7</a></td>
    5051        </tr>
    5152      </tbody>
     
    6061      <input matInput (keyup)="applyFilterPharmacies($event.target.value)" placeholder="Пронајди аптека">
    6162    </mat-form-field>
    62   </div>
    63     <table class='table table-striped table-bordered table-sm' cellspacing="0" width="100%" aria-labelledby="tableLabel" *ngIf="pharmacies">
    64       <thead>
    65         <tr>
    66           <th>Име</th>
    67           <th>Локација</th>
    68           <th>Адреса</th>
    69           <th>Работи 27/7?</th>
    70         </tr>
    71       </thead>
    72       <tbody>
    73         <tr *ngFor="let pharmacy of pharmacies">
    74           <td><a (click)="openPharmacyDialog(pharmacy)">{{ pharmacy.name }}</a></td>
    75           <td>{{ pharmacy.location }}</td>
    76           <td>{{ pharmacy.address }}</td>
    77           <td>{{ pharmacy.workAllTime }}</td>
    78           <td><a (click)="claimPharmacy(pharmacy)">Claim</a></td>
    79         </tr>
    80     </tbody>
    81   </table>
     63    </div>
     64      <table [dataSource]="dataSource" mat-table matSort class="mat-elevation-z8">
     65        <ng-container matColumnDef="Име">a
     66          <th mat-header-cell *matHeaderCellDef mat-sort-header> Име </th>
     67          <td mat-cell *matCellDef="let pharmacies"> {{pharmacies.name}} </td>
     68        </ng-container>
     69   
     70        <ng-container matColumnDef="Локација">
     71          <th mat-header-cell *matHeaderCellDef mat-sort-header> Локација </th>
     72          <td mat-cell *matCellDef="let pharmacies"> {{pharmacies.location}} </td>
     73        </ng-container>
     74     
     75        <ng-container matColumnDef="Адреса">
     76          <th mat-header-cell *matHeaderCellDef mat-sort-header> Адреса </th>
     77          <td mat-cell *matCellDef="let pharmacies"> {{pharmacies.address}} </td>
     78        </ng-container>
     79
     80        <ng-container matColumnDef="Actions">
     81          <th mat-header-cell *matHeaderCellDef mat-sort-header> Actions </th>
     82          <td mat-cell *matCellDef="let pharmacies"> <a (click)="claimPharmacy(pharmacies)">Claim Pharmacy</a> </td>
     83        </ng-container>
     84 
     85          <tr mat-header-row *matHeaderRowDef="displayedColumnsPharmacies"></tr>
     86          <tr mat-row *matRowDef="let row; columns: displayedColumnsPharmacies;"></tr>
     87      </table>
     88      <mat-paginator #paginator [pageSize]="5" [pageSizeOptions]="[5, 10, 20, 100]"></mat-paginator>
    8289    </div>
    8390    </mat-tab>
    8491  </mat-tab-group>
     92
     93  <div class="statusbar">{{status}}</div>
    8594
    8695<div class="wrapper">
     
    8897    <h2>Достапни лекови</h2>
    8998    <mat-form-field>
    90       <input matInput (keyup)="applyFilterMedicines($event.target.value)" placeholder="Пронајди лек">
     99      <input matInput (keyup)="applyFilter($event.target.value)" placeholder="Пронајди лек">
    91100    </mat-form-field>
    92101      </div>
    93       <table class='table table-striped table-bordered table-sm' cellspacing="0" width="100%" aria-labelledby="tableLabel" *ngIf="head">
    94         <thead>
    95           <tr>
    96             <th>Име</th>
    97             <th>Јачина</th>
    98             <th>Форма</th>
    99             <th>Начин на издавање</th>
    100             <th>Производител</th>
    101             <th>Цена</th>
    102             <th>Пакување</th>
    103           </tr>
    104         </thead>
    105         <tbody>
    106           <tr *ngFor="let medicine of head.PharmacyMedicines">
    107             <td><a (click)="openMedicineDialog(medicine)">{{ medicine.name }}</a></td>
    108             <td>{{ medicine.strength }}</td>
    109             <td>{{ medicine.form }}</td>
    110             <td>{{ medicine.wayOfIssuing }}</td>
    111             <td>{{ medicine.manufacturer }}</td>
    112             <td>{{ medicine.price }}</td>
    113             <td>{{ medicine.packaging }}</td>
    114             <td><a (click)="deleteMedicine(medicine)">Delete</a></td>
    115           </tr>
    116       </tbody>
    117     </table>
     102      <table [dataSource]="dataSource" mat-table matSort class="mat-elevation-z8">
     103        <ng-container matColumnDef="Име">
     104          <th mat-header-cell *matHeaderCellDef mat-sort-header> Име </th>
     105          <td mat-cell *matCellDef="let mymedicines"> {{mymedicines.name}} </td>
     106        </ng-container>
     107   
     108        <ng-container matColumnDef="Јачина">
     109          <th mat-header-cell *matHeaderCellDef mat-sort-header> Јачина </th>
     110          <td mat-cell *matCellDef="let mymedicines"> {{mymedicines.strength}} </td>
     111        </ng-container>
     112     
     113        <ng-container matColumnDef="Форма">
     114          <th mat-header-cell *matHeaderCellDef mat-sort-header> Форма </th>
     115          <td mat-cell *matCellDef="let mymedicines"> {{mymedicines.form}} </td>
     116        </ng-container>
     117       
     118        <ng-container matColumnDef="Начин на издавање">
     119          <th mat-header-cell *matHeaderCellDef mat-sort-header> Начин на издавање </th>
     120          <td mat-cell *matCellDef="let mymedicines"> {{mymedicines.wayOfIssuing}} </td>
     121        </ng-container>
     122   
     123        <ng-container matColumnDef="Производител">
     124          <th mat-header-cell *matHeaderCellDef mat-sort-header> Производител </th>
     125          <td mat-cell *matCellDef="let mymedicines"> {{mymedicines.manufacturer}} </td>
     126        </ng-container>
     127     
     128        <ng-container matColumnDef="Цена">
     129          <th mat-header-cell *matHeaderCellDef mat-sort-header> Цена </th>
     130          <td mat-cell *matCellDef="let mymedicines"> {{mymedicines.price}} </td>
     131        </ng-container>
     132 
     133        <ng-container matColumnDef="Пакување">
     134          <th mat-header-cell *matHeaderCellDef mat-sort-header> Пакување </th>
     135          <td mat-cell *matCellDef="let mymedicines"> {{mymedicines.packaging}} </td>
     136        </ng-container>
     137 
     138        <ng-container matColumnDef="Actions">
     139          <th mat-header-cell *matHeaderCellDef mat-sort-header> Actions </th>
     140          <td mat-cell *matCellDef="let mymedicines"> <a (click)="medicineExists(mymedicines)">Exists</a> | <a (click)="medicineDoesntSell(mymedicines)">Doesnt sell</a> </td>
     141        </ng-container>
     142 
     143          <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
     144          <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
     145      </table>
     146      <mat-paginator #paginator [pageSize]="5" [pageSizeOptions]="[5, 10, 20, 100]"></mat-paginator>
    118147</div>
  • Farmatiko/ClientApp/src/app/dashboard/dashboard.component.ts

    r63d885e rc406ae5  
    1 import { Component, OnInit} from '@angular/core';
     1import { Component, OnInit, ViewChild, Inject, Output, EventEmitter } from '@angular/core';
     2import { Pharmacy } from '../models/Pharmacy';
     3import { MatTableDataSource } from '@angular/material/table';
     4import { MatPaginator } from '@angular/material/paginator';
     5import { MatSort } from '@angular/material/sort';
     6import { HttpClient } from '@angular/common/http';
    27import { MatDialog } from '@angular/material/dialog';
    38import { MatSnackBar, MatSnackBarRef, SimpleSnackBar } from '@angular/material/snack-bar';
    4 import { IPharmacy, IMedicine, IPharmacyHead, IPharmacyHeadRequest } from '../shared/interfaces';
    5 import { DataService } from '../shared/data.service';
    6 import { PharmacyDialogComponent } from '../dialogs/pharmacy-dialog/pharmacy-dialog.component';
    7 import { EditPharmacyDialogComponent } from '../dialogs/edit-pharmacy-dialog/edit-pharmacy-dialog.component';
    8 import { MedicineDialogComponent } from '../dialogs/medicine-dialog/medicine-dialog.component';
    9 import { ActivatedRoute, Router } from '@angular/router';
     9import { Router, RouterModule } from '@angular/router';
     10import { HomeComponent } from '../home/home.component';
     11import { Medicine } from '../models/Medicine';
     12import { PharmacyHead } from '../models/PharmacyHead';
     13import { MedicineList } from '../models/MedicineList';
    1014
    1115@Component({
     
    1519})
    1620export class DashboardComponent implements OnInit {
    17   public pharmacies: IPharmacy[] = [];
    18   public head: IPharmacyHead;
    19   public filteredPharmacies: IPharmacy[] = [];
    20   public filteredMedicines: IMedicine[] = [];
    21   public request: IPharmacyHeadRequest;
    22   public token: string;
     21  public mymedicines: Medicine[];
     22  public hasmymedicines: boolean[];
     23  public pharmacies: Pharmacy[];
     24  public mypharmacies: Pharmacy[];
     25  public head: PharmacyHead;
     26  public status: string;
     27  displayedColumns = ['Име','Јачина','Форма', 'Начин на издавање', 'Производител', 'Цена', 'Пакување', 'Actions'];
     28  displayedColumnsPharmacies = ['Име','Локација','Адреса', 'Actions'];
     29  dataSource = new MatTableDataSource<Medicine>();
     30  dataSourcePharmacies = new MatTableDataSource<Pharmacy>();
    2331
    24   constructor(private dataService: DataService, private dialog: MatDialog, private snackBar: MatSnackBar, private router: Router, private route: ActivatedRoute) {
     32  @ViewChild(MatPaginator, {static: true}) paginator: MatPaginator;
     33  @ViewChild(MatSort) sort: MatSort;
    2534
     35  constructor(http: HttpClient, @Inject('BASE_URL') baseUrl: string, private dialog: MatDialog, private _snackBar: MatSnackBar, private router: Router) {
     36    http.get<PharmacyHead>(baseUrl + 'PharmacyHead/GetLoggedHead?').subscribe(result => {
     37      this.head = result;
     38      console.log(this.head);
     39      this.mymedicines = this.head.PharmacyMedicines.Medicines;
     40      console.log(this.mymedicines);
     41      this.mypharmacies = this.head.Pharmacy;
     42      console.log(this.mypharmacies);
     43      this.dataSource = new MatTableDataSource<Medicine>(this.mymedicines);
     44    }, error => console.error(error));
     45    http.get<Pharmacy[]>(baseUrl + 'Pharmacy/Get?').subscribe(result => {
     46      this.pharmacies = result;
     47      console.log(this.pharmacies);
     48      this.dataSourcePharmacies = new MatTableDataSource<Pharmacy>(this.pharmacies);
     49    }, error => console.error(error));
    2650  }
    2751
    2852  ngOnInit(): void {
    29     this.token = this.route.snapshot.params['token'];
    30     this.dataService.getPharmacyHead(this.token)
    31         .subscribe((hd: IPharmacyHead) => {
    32           this.head = hd;
    33         },
    34         (err: any) => console.log(err),
    35         () => console.log('Head data retrieved'));
    36 
    37     this.dataService.getPharmacies()
    38         .subscribe((pharmacy: IPharmacy[]) => {
    39           this.pharmacies = pharmacy;
    40         },
    41         (err: any) => console.log(err),
    42         () => console.log('Pharmacy data retrieved'));
    43   }
    44  
    45   claimPharmacy(pharmacy: IPharmacy) {
    46     if(pharmacy && !this.head.Pharmacy.find(x => x === pharmacy)) {
    47       this.request = null;
    48       this.request.Pharmacy = pharmacy;
    49       this.request.PharmacyHead = this.head;
    50       this.dataService.claimPharmacy(this.request)
    51           .subscribe((req: IPharmacyHeadRequest) => {
    52             if(req) {
    53               this.openSnackBar("Claiming request sent!", "OK");
    54             }
    55             else {
    56               this.openSnackBar("Unable to send a request", "Try again");
    57             }
    58           },
    59           (err: any) => console.log(err),
    60           () => console.log('Claiming request sent!'));
    61     }
    6253  }
    6354
    64   deleteMedicine(medicine: IMedicine){
    65     this.head.PharmacyMedicines = this.head.PharmacyMedicines.filter(x => x !== medicine);
    66     this.dataService.updatePharmacyHead(this.head)
    67         .subscribe((hd: IPharmacyHead) => {
    68           if(hd) {
    69             this.openSnackBar("Success! Medicine deleted", "OK");
    70           }
    71           else {
    72             this.openSnackBar("Unable to delete Medicine", "Try again");
    73           }
    74         },
    75         (err: any) => console.log(err),
    76         () => console.log('Update sent!'));
     55  ngAfterViewInit(): void {
     56    this.dataSource.paginator = this.paginator;
     57    this.dataSource.sort = this.sort;
     58    this.dataSourcePharmacies.paginator = this.paginator;
     59    this.dataSourcePharmacies.sort = this.sort;
    7760  }
    7861
    79   applyFilterMedicines(filterValue: string) {
    80     console.log("applyFilterMedicines works!")
    81     if(filterValue) {
    82       this.dataService.searchMedicines(filterValue)
    83           .subscribe((medicine: IMedicine[]) => {
    84             this.filteredMedicines = medicine;
    85           },
    86           (err: any) => console.log(err),
    87           () => console.log('Medicine data retrieved'));
    88     }
    89     else {
    90       this.filteredMedicines = this.head.PharmacyMedicines;
    91     }
     62  works24hrs(pharmacy: Pharmacy) {
     63    console.log(pharmacy);
     64    // post request vo prodolzenie
     65
     66    this.status="Status bar works24hrs";
     67  }
     68
     69  doesntWork24hrs(pharmacy: Pharmacy) {
     70    console.log(pharmacy);
     71    // post request vo prodolzenie
     72
     73    this.status="Status bar doesntWork24hrs";
     74  }
     75
     76  claimPharmacy(pharmacy: Pharmacy) {
     77    console.log(pharmacy);
     78    // post request vo prodolzenie
     79
     80    this.status="Status bar claimPharmacy";
     81  }
     82
     83  medicineExists(mymedicine: Medicine) {
     84    console.log(mymedicine);
     85    // post request vo prodolzenie
     86
     87    this.status="Status bar medicineexists";
     88  }
     89
     90  medicineDoesntSell(mymedicine: Medicine) {
     91    console.log(mymedicine);
     92    // post request vo prodolzenie
     93
     94    this.status="Status bar medicineDoesntSell";
     95  }
     96
     97  applyFilter(filterValue: string) {
     98    filterValue = filterValue.trim();
     99    filterValue = filterValue.toLowerCase();
     100    this.dataSource.filter = filterValue;
    92101  }
    93102 
    94103  applyFilterPharmacies(filterValue: string) {
    95     console.log("applyFilterPharmacies works!")
    96     if(filterValue) {
    97       this.dataService.searchPharmacies(filterValue)
    98           .subscribe((pharmacy: IPharmacy[]) => {
    99             this.filteredPharmacies = pharmacy;
    100           },
    101           (err: any) => console.log(err),
    102           () => console.log('Pharmacy data retrieved'));
    103     }
    104     else {
    105       this.filteredPharmacies = this.pharmacies;
    106     }   
     104    filterValue = filterValue.trim();
     105    filterValue = filterValue.toLowerCase();
     106    this.dataSourcePharmacies.filter = filterValue;
    107107  }
    108108
    109   openPharmacyDialog(pharmacy: IPharmacy): void {
    110     this.dialog.open(PharmacyDialogComponent, {
    111       width: '450px',
    112       data: pharmacy
     109  test(): void {
     110    console.log('Snackbar works!');
     111    this.openSnackBar("Are you sure?", "Yes").onAction().subscribe(() => {
     112      this.router.navigate(['/']);
    113113    });
    114114  }
    115115
    116   openEditPharmacyDialog(pharmacy: IPharmacy): void {
    117     let dialogRef = this.dialog.open(EditPharmacyDialogComponent, {
    118       width: '450px',
    119       data: pharmacy
     116  openDialog():void {
     117    let dialogRef = this.dialog.open(HomeComponent, {
     118      width: '70%'
    120119    });
    121     dialogRef.afterClosed().subscribe((editedPharmacy: IPharmacy) => {
    122       if(editedPharmacy) {
    123         this.head.Pharmacy = this.head.Pharmacy.filter(x => x !== pharmacy);
    124         this.head.Pharmacy.push(editedPharmacy);
    125         this.dataService.updatePharmacyHead(this.head)
    126             .subscribe((hd: IPharmacyHead) => {
    127               if(hd) {
    128                 this.openSnackBar("Success! Pharmacy edited", "OK").onAction().subscribe(() => {
    129                   window.location.reload();
    130                 });
    131               }
    132               else {
    133                 this.openSnackBar("Pharmacy edit failed", "Try again");
    134               }
    135             },
    136             (err: any) => console.log(err),
    137             () => console.log('PharmacyHead data updated'));
    138       };
    139     });
    140   }
    141 
    142   openMedicineDialog(medicine: IMedicine): void {
    143     this.dialog.open(MedicineDialogComponent, {
    144       width: '450px',
    145       data: medicine
     120    dialogRef.afterClosed().subscribe(result => {
     121      if(result) {
     122        this.openSnackBar("Success", "OK");
     123      }
    146124    });
    147125  }
    148126
    149127  openSnackBar(message: string, action: string) : MatSnackBarRef<SimpleSnackBar> {
    150     return this.snackBar.open(message, action, {
    151       duration: 5000,
     128    return this._snackBar.open(message, action, {
     129      duration: 10000,
    152130    });
    153131  }
  • Farmatiko/ClientApp/src/app/home/home.component.html

    r63d885e rc406ae5  
    77    <h2>Лекови</h2>
    88  <mat-form-field>
    9     <input matInput (keyup)="applyFilterMedicines($event.target.value)" placeholder="Пронајди лек">
     9    <input matInput (keyup)="applyFilter($event.target.value)" placeholder="Пронајди лек">
    1010  </mat-form-field>
    1111    </div>
    12   <table class='table table-striped' aria-labelledby="tableLabel" *ngIf="true">
    13       <thead>
    14         <tr>
    15           <th>Име</th>
    16           <th>Јачина</th>
    17           <th>Форма</th>
    18           <th>Начин на издавање</th>
    19           <th>Производител</th>
    20           <th>Цена</th>
    21           <th>Пакување</th>
    22         </tr>
    23       </thead>
    24       <tbody>
    25         <tr *ngFor="let medicine of filteredMedicines">
    26           <td><a (click)="openMedicineDialog(medicine)">{{ medicine.name }}</a></td>
    27           <td>{{ medicine.strength }}</td>
    28           <td>{{ medicine.form }}</td>
    29           <td>{{ medicine.wayOfIssuing }}</td>
    30           <td>{{ medicine.manufacturer }}</td>
    31           <td>{{ medicine.price }}</td>
    32           <td>{{ medicine.packaging }}</td>
    33         </tr>
    34     </tbody>
    35   </table>
     12    <table [dataSource]="dataSource" mat-table matSort class="mat-elevation-z8">
     13      <ng-container matColumnDef="Име">
     14        <th mat-header-cell *matHeaderCellDef mat-sort-header> Име </th>
     15        <td mat-cell *matCellDef="let medicines"> {{medicines.name}} </td>
     16      </ng-container>
     17
     18      <ng-container matColumnDef="Јачина">
     19        <th mat-header-cell *matHeaderCellDef mat-sort-header> Јачина </th>
     20        <td mat-cell *matCellDef="let medicines"> {{medicines.strength}} </td>
     21      </ng-container>
     22
     23      <ng-container matColumnDef="Форма">
     24        <th mat-header-cell *matHeaderCellDef mat-sort-header> Форма </th>
     25        <td mat-cell *matCellDef="let medicines"> {{medicines.form}} </td>
     26      </ng-container>
     27
     28      <ng-container matColumnDef="Начин на издавање">
     29        <th mat-header-cell *matHeaderCellDef mat-sort-header> Начин на издавање </th>
     30        <td mat-cell *matCellDef="let medicines"> {{medicines.wayOfIssuing}} </td>
     31      </ng-container>
     32
     33      <ng-container matColumnDef="Производител">
     34        <th mat-header-cell *matHeaderCellDef mat-sort-header> Производител </th>
     35        <td mat-cell *matCellDef="let medicines"> {{medicines.manufacturer}} </td>
     36      </ng-container>
     37
     38      <ng-container matColumnDef="Цена">
     39        <th mat-header-cell *matHeaderCellDef mat-sort-header> Цена </th>
     40        <td mat-cell *matCellDef="let medicines"> {{medicines.price}} </td>
     41      </ng-container>
     42
     43      <ng-container matColumnDef="Пакување">
     44        <th mat-header-cell *matHeaderCellDef mat-sort-header> Пакување </th>
     45        <td mat-cell *matCellDef="let medicines"> {{medicines.packaging}} </td>
     46      </ng-container>
     47
     48        <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
     49        <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
     50    </table>
     51    <mat-paginator #paginator [pageSize]="5" [pageSizeOptions]="[5, 10, 20, 100]"></mat-paginator>
    3652  </div>
    3753  </mat-tab>
     
    4460    </mat-form-field>
    4561    </div>
    46     <table class='table table-striped' aria-labelledby="tableLabel" *ngIf="true">
    47       <thead>
    48         <tr>
    49           <th>Име</th>
    50           <th>Локација</th>
    51           <th>Адреса</th>
    52           <th>Работи 27/7?</th>
    53         </tr>
    54       </thead>
    55       <tbody>
    56         <tr *ngFor="let pharmacy of filteredPharmacies">
    57           <td><a (click)="openPharmacyDialog(pharmacy)">{{ pharmacy.name }}</a></td>
    58           <td>{{ pharmacy.location }}</td>
    59           <td>{{ pharmacy.address }}</td>
    60           <td>{{ pharmacy.workAllTime }}</td>
    61         </tr>
    62     </tbody>
    63   </table>
     62      <table [dataSource]="dataSourcePharmacies" mat-table matSort class="mat-elevation-z8">
     63        <ng-container matColumnDef="Име">
     64          <th mat-header-cell *matHeaderCellDef mat-sort-header> Име </th>
     65          <td mat-cell *matCellDef="let pharmacies"> {{pharmacies.name}} </td>
     66        </ng-container>
     67
     68        <ng-container matColumnDef="Локација">
     69          <th mat-header-cell *matHeaderCellDef mat-sort-header> Локација </th>
     70          <td mat-cell *matCellDef="let pharmacies"> {{pharmacies.location}} </td>
     71        </ng-container>
     72
     73        <ng-container matColumnDef="Адреса">
     74          <th mat-header-cell *matHeaderCellDef mat-sort-header> Адреса </th>
     75          <td mat-cell *matCellDef="let pharmacies"> {{pharmacies.address}} </td>
     76        </ng-container>
     77
     78        <ng-container matColumnDef="Работи 27/7?">
     79          <th mat-header-cell *matHeaderCellDef mat-sort-header> Работи 27/7? </th>
     80          <td mat-cell *matCellDef="let pharmacies"> {{pharmacies.workAllTime}} </td>
     81        </ng-container>
     82
     83          <tr mat-header-row *matHeaderRowDef="displayedColumnsPharmacies"></tr>
     84          <tr mat-row *matRowDef="let row; columns: displayedColumnsPharmacies;"></tr>
     85      </table>
     86      <mat-paginator #paginator [pageSize]="5" [pageSizeOptions]="[5, 10, 20, 100]"></mat-paginator>
    6487    </div>
    6588    </mat-tab>
  • Farmatiko/ClientApp/src/app/home/home.component.ts

    r63d885e rc406ae5  
    1 import { Component, OnInit } from '@angular/core';
    2 import { IMedicine, IPharmacy } from '../shared/interfaces';
    3 import { DataService } from '../shared/data.service';
    4 import { MatDialog } from '@angular/material/dialog';
    5 import { MedicineDialogComponent } from '../dialogs/medicine-dialog/medicine-dialog.component';
    6 import { PharmacyDialogComponent } from '../dialogs/pharmacy-dialog/pharmacy-dialog.component';
     1import { Component, OnInit, ViewChild, Inject } from '@angular/core';
     2import { HttpClient } from '@angular/common/http';
     3import { Medicine } from '../models/Medicine';
     4import { Pharmacy } from '../models/Pharmacy';
     5import { MatTableDataSource } from '@angular/material/table';
     6import { MatPaginator } from '@angular/material/paginator';
     7import { MatSort } from '@angular/material/sort';
    78
    89@Component({
     
    1213})
    1314export class HomeComponent implements OnInit {
    14   public medicines: IMedicine[] = [];
    15   public pharmacies: IPharmacy[] = [];
    16   public filteredMedicines: IMedicine[] = [];
    17   public filteredPharmacies: IPharmacy[] = [];
     15  public medicines: Medicine[];
     16  public pharmacies: Pharmacy[];
     17  displayedColumns = ['Име','Јачина','Форма', 'Начин на издавање', 'Производител', 'Цена', 'Пакување'];
     18  displayedColumnsPharmacies = ['Име','Локација','Адреса', 'Работи 27/7?'];
     19  dataSource = new MatTableDataSource<Medicine>();
     20  dataSourcePharmacies = new MatTableDataSource<Pharmacy>();
    1821
    19   constructor(private dataService: DataService, private dialog: MatDialog) {
     22  @ViewChild(MatPaginator, {static: true}) paginator: MatPaginator;
     23  @ViewChild(MatSort) sort: MatSort;
    2024
     25  constructor(http: HttpClient, @Inject('BASE_URL') baseUrl: string) {
     26    http.get<Medicine[]>(baseUrl + 'Medicine/Get?').subscribe(result => {
     27      this.medicines = result;
     28      console.log(this.medicines);
     29      this.dataSource = new MatTableDataSource<Medicine>(this.medicines);
     30    }, error => console.error(error));
     31    http.get<Pharmacy[]>(baseUrl + 'Pharmacy/Get?').subscribe(result => {
     32      this.pharmacies = result;
     33      console.log(this.pharmacies);
     34      this.dataSourcePharmacies = new MatTableDataSource<Pharmacy>(this.pharmacies);
     35    }, error => console.error(error));
     36  }
     37  ngOnInit(): void {
    2138  }
    2239
    23   ngOnInit(): void {
    24     this.dataService.getMedicines()
    25         .subscribe((medicine: IMedicine[]) => {
    26           this.medicines = this.filteredMedicines = medicine;
    27         },
    28         (err: any) => console.log(err),
    29         () => console.log('Medicine data retrieved'));
    30 
    31     this.dataService.getPharmacies()
    32         .subscribe((pharmacy: IPharmacy[]) => {
    33           this.pharmacies = this.filteredPharmacies = pharmacy;
    34         },
    35         (err: any) => console.log(err),
    36         () => console.log('Pharmacy data retrieved'));
     40  ngAfterViewInit(): void {
     41    this.dataSource.paginator = this.paginator;
     42    this.dataSource.sort = this.sort;
     43    this.dataSourcePharmacies.paginator = this.paginator;
     44    this.dataSourcePharmacies.sort = this.sort;
    3745  }
    3846
    39   applyFilterMedicines(filterValue: string) {
    40     console.log("applyFilterMedicines works!")
    41     if(filterValue) {
    42       this.dataService.searchMedicines(filterValue)
    43           .subscribe((medicine: IMedicine[]) => {
    44             this.filteredMedicines = medicine;
    45           },
    46           (err: any) => console.log(err),
    47           () => console.log('Medicine data retrieved'));
    48     }
    49     else {
    50       this.filteredMedicines = this.medicines;
    51     }
     47  applyFilter(filterValue: string) {
     48    filterValue = filterValue.trim();
     49    filterValue = filterValue.toLowerCase();
     50    this.dataSource.filter = filterValue;
    5251  }
    5352 
    5453  applyFilterPharmacies(filterValue: string) {
    55     console.log("applyFilterPharmacies works!")
    56     if(filterValue) {
    57       this.dataService.searchPharmacies(filterValue)
    58           .subscribe((pharmacy: IPharmacy[]) => {
    59             this.filteredPharmacies = pharmacy;
    60           },
    61           (err: any) => console.log(err),
    62           () => console.log('Pharmacy data retrieved'));
    63     }
    64     else {
    65       this.filteredPharmacies = this.pharmacies;
    66     }
    67   }
    68 
    69   openMedicineDialog(medicine: IMedicine): void {
    70     this.dialog.open(MedicineDialogComponent, {
    71       width: '450px',
    72       data: medicine
    73     });
    74   }
    75 
    76   openPharmacyDialog(pharmacy: IPharmacy): void {
    77     this.dialog.open(PharmacyDialogComponent, {
    78       width: '450px',
    79       data: pharmacy
    80     });
     54    filterValue = filterValue.trim();
     55    filterValue = filterValue.toLowerCase();
     56    this.dataSourcePharmacies.filter = filterValue;
    8157  }
    8258}
  • Farmatiko/ClientApp/src/app/korona/korona.component.html

    r63d885e rc406ae5  
    1212    <div class="col">
    1313      <div class="counter">
    14         <i class="fa fa-code fa-2x" *ngIf="korona">{{korona.totalMK}}</i>
     14        <i class="fa fa-code fa-2x" *ngIf="korona">{{korona[0].totalMK}}</i>
    1515        <h2 class="timer count-title count-number"></h2>
    1616        <p class="count-text ">Вкупно случаи во земјата</p>
     
    1919    <div class="col">
    2020      <div class="counter">
    21         <i class="fa fa-coffee fa-2x" *ngIf="korona">{{korona.activeMK}}</i>
     21        <i class="fa fa-coffee fa-2x" *ngIf="korona">{{korona[0].activeMK}}</i>
    2222        <h2 class="timer count-title count-number"></h2>
    2323        <p class="count-text ">Активни случаи во земјата</p>
     
    2626    <div class="col">
    2727      <div class="counter">
    28         <i class="fa fa-lightbulb-o fa-2x" *ngIf="korona">{{korona.deathsMK}}</i>
     28        <i class="fa fa-lightbulb-o fa-2x" *ngIf="korona">{{korona[0].deathsMK}}</i>
    2929        <h2 class="timer count-title count-number"></h2>
    3030        <p class="count-text ">Смртни случаи во земјата</p>
     
    3333    <div class="col">
    3434      <div class="counter">
    35         <i class="fa fa-bug fa-2x" *ngIf="korona">{{korona.newMK}}</i>
     35        <i class="fa fa-bug fa-2x" *ngIf="korona">{{korona[0].newMK}}</i>
    3636        <h2 class="timer count-title count-number"></h2>
    3737        <p class="count-text ">Нови случаи во земјата</p>
     
    4242    <div class="col">
    4343      <div class="counter">
    44         <i class="fa fa-bug fa-2x" *ngIf="korona">{{korona.totalGlobal}}</i>
     44        <i class="fa fa-bug fa-2x" *ngIf="korona">{{korona[0].totalGlobal}}</i>
    4545        <h2 class="timer count-title count-number"></h2>
    4646        <p class="count-text ">Вкупно случаи глобално</p>
     
    4949    <div class="col">
    5050      <div class="counter">
    51         <i class="fa fa-bug fa-2x" *ngIf="korona">{{korona.activeGlobal}}</i>
     51        <i class="fa fa-bug fa-2x" *ngIf="korona">{{korona[0].activeGlobal}}</i>
    5252        <h2 class="timer count-title count-number"></h2>
    5353        <p class="count-text ">Активни случаи глобално</p>
     
    5656    <div class="col">
    5757      <div class="counter">
    58         <i class="fa fa-bug fa-2x" *ngIf="korona">{{korona.deathsGlobal}}</i>
     58        <i class="fa fa-bug fa-2x" *ngIf="korona">{{korona[0].deathsGlobal}}</i>
    5959        <h2 class="timer count-title count-number"></h2>
    6060        <p class="count-text ">Смртни случаи глобално</p>
  • Farmatiko/ClientApp/src/app/korona/korona.component.ts

    r63d885e rc406ae5  
    1 import { Component, OnInit } from '@angular/core';
    2 import { DataService } from '../shared/data.service';
    3 import { IPandemic } from '../shared/interfaces';
     1import { Component, OnInit, Inject } from '@angular/core';
     2import { Pandemic } from '../models/Pandemic';
     3import { MatTableDataSource } from '@angular/material/table';
     4import { HttpClient } from '@angular/common/http';
    45
    56@Component({
     
    910})
    1011export class KoronaComponent implements OnInit {
    11   public korona: IPandemic;
     12  public korona: Pandemic[];
    1213
    13   constructor(private dataService: DataService) {
    14 
     14  constructor(http: HttpClient, @Inject('BASE_URL') baseUrl: string) {
     15    http.get<Pandemic[]>(baseUrl + 'Pandemic/Get?').subscribe(result => {
     16      this.korona = result;
     17      console.log(this.korona);
     18    }, error => console.error(error));
    1519  }
    1620
    1721  ngOnInit(): void {
    18     this.dataService.getPandemic()
    19         .subscribe((res: IPandemic) => {
    20           this.korona = res;
    21         },
    22         (err: any) => console.log(err),
    23         () => console.log('Pandemic data retrieved'));
    2422  }
    2523
  • Farmatiko/ClientApp/src/app/login/login.component.html

    r63d885e rc406ae5  
    66  <div class="example-container">
    77    <mat-form-field>
    8       <input matInput placeholder="Email" [(ngModel)]="this.email" formControlName="email">
     8      <input matInput placeholder="Email" formControlName="email">
    99    </mat-form-field>
    1010
    1111    <mat-form-field>
    12       <input matInput type="password" placeholder="Password" [(ngModel)]="this.passwd" formControlName="password">   
     12      <input matInput type="password" placeholder="Password" formControlName="password">   
    1313    </mat-form-field>
    1414
    15     <button [disabled]="!loginForm.valid" mat-raised-button color="primary" (click)="loginPharmacyHead()" mat-button>Најави се</button>
     15    <button [disabled]="!loginForm.valid" mat-raised-button color="primary" [routerLink]="['/dashboard']" mat-button>Најави се</button>
    1616  </div>
    1717</form>
  • Farmatiko/ClientApp/src/app/login/login.component.ts

    r63d885e rc406ae5  
    11import { Component, OnInit } from '@angular/core';
    2 import { FormGroup, FormControl, Validators } from '@angular/forms';
    3 import { Router, ActivatedRoute } from '@angular/router';
    4 import { DataService } from '../shared/data.service';
     2import { FormBuilder, FormGroup, FormControl, Validators, FormArray } from '@angular/forms';
    53
    64@Component({
     
    119export class LoginComponent implements OnInit {
    1210  loginForm: FormGroup;
    13   email: string;
    14   passwd: string;
    15   errorMessage: string;
    1611
    17   constructor(private dataService: DataService,private router: Router, private route: ActivatedRoute) {
     12  constructor() {
    1813    this.loginForm = new FormGroup({
    1914      email: new FormControl('', [Validators.required, Validators.email]),
     
    2520  }
    2621
    27   loginPharmacyHead() {
    28     this.dataService.loginPharmacyHead(this.email, this.passwd)
    29                 .subscribe((id: Number) => {
    30                   if(id) {
    31                     this.router.navigate(['/dashboard/' + id]);
    32                   }
    33                   else {
    34                     this.errorMessage = 'There was a problem signing in!';
    35                     console.log(this.errorMessage);
    36                   }
    37                 },
    38                 (err: any) => console.log(err));
    39   }
    4022}
Note: See TracChangeset for help on using the changeset viewer.