浏览代码

sales

master
Florian Eisenmenger 1年前
父节点
当前提交
d668f4852d
共有 5 个文件被更改,包括 98 次插入18 次删除
  1. +24
    -9
      matsen-tool/src/app/sales/sales.component.html
  2. +33
    -9
      matsen-tool/src/app/sales/sales.component.ts
  3. +5
    -0
      matsen-tool/src/assets/i18n/de.json
  4. +35
    -0
      matsen-tool/src/assets/scss/_sales.scss
  5. +1
    -0
      matsen-tool/src/styles.scss

+ 24
- 9
matsen-tool/src/app/sales/sales.component.html 查看文件

@@ -1,13 +1,28 @@
<div *ngFor="let saleSummary of saleSummaries">
<div>{{ saleSummary.ownerName }} - {{ saleSummary.turnover }} - {{ saleSummary.profit }}</div>
</div>


<div class="spt-container"> <div class="spt-container">
<div class="d-flex justify-content-between align-items-start"> <div class="d-flex justify-content-between align-items-start">
<h2>{{ 'basic.sales' | translate }}</h2> <h2>{{ 'basic.sales' | translate }}</h2>
<button class="btn btn-primary" (click)="openModalNewSale()">{{ 'basic.new-sale' | translate }}</button> <button class="btn btn-primary" (click)="openModalNewSale()">{{ 'basic.new-sale' | translate }}</button>
</div> </div>

<div class="sales-summary-container mb-4" *ngFor="let saleSummary of saleSummaries">
<p><strong>{{ saleSummary.ownerName }}</strong></p>
<div class="sales-summary-bar">
<div>
<span class="sales-summary-turnover" [ngStyle]="{ 'width.%': calculateWidthPercentage(Number(saleSummary.turnover), saleSummaryMaxTurnover)}">
{{ 'sales.turnover' | translate }}: <strong>{{ saleSummary.turnover | currency: 'EUR' }}</strong>
</span>
</div>
</div>
<div class="sales-summary-bar">
<div>
<span class="sales-summary-profit" [ngStyle]="{ 'width.%': calculateWidthPercentage(Number(saleSummary.profit), saleSummaryMaxTurnover)}">
{{ 'sales.profit' | translate }}: <strong>{{ saleSummary.profit | currency: 'EUR' }}</strong>
</span>
</div>
</div>
</div>


<table mat-table [dataSource]="dataSource" matSort (matSortChange)="onSortChange($event)" <table mat-table [dataSource]="dataSource" matSort (matSortChange)="onSortChange($event)"
class="mat-elevation-z8 mb-3"> class="mat-elevation-z8 mb-3">


@@ -58,7 +73,7 @@
{{ 'overview.turnover' | translate }} {{ 'overview.turnover' | translate }}
</th> </th>
<td mat-cell *matCellDef="let element"> <td mat-cell *matCellDef="let element">
{{ element.turnover }}
{{ element.turnover | currency: 'EUR' }}
</td> </td>
</ng-container> </ng-container>


@@ -68,7 +83,7 @@
{{ 'overview.profit' | translate }} {{ 'overview.profit' | translate }}
</th> </th>
<td mat-cell *matCellDef="let element"> <td mat-cell *matCellDef="let element">
{{ element.profit }}
{{ element.profit | currency: 'EUR' }}
</td> </td>
</ng-container> </ng-container>


@@ -78,7 +93,7 @@
{{ 'overview.createdAt' | translate }} {{ 'overview.createdAt' | translate }}
</th> </th>
<td mat-cell *matCellDef="let element"> <td mat-cell *matCellDef="let element">
{{ element.createdAt }}
{{ element.createdAt | date:'dd.MM.YYYY HH:mm' }}
</td> </td>
</ng-container> </ng-container>


@@ -93,4 +108,4 @@
[pageIndex]="pageIndex" [pageIndex]="pageIndex"
showFirstLastButtons> showFirstLastButtons>
</mat-paginator> </mat-paginator>
</div>
</div>

+ 33
- 9
matsen-tool/src/app/sales/sales.component.ts 查看文件

@@ -1,6 +1,6 @@
import {ChangeDetectorRef, Component, OnInit, ViewChild} from '@angular/core';
import {ChangeDetectorRef, Component, LOCALE_ID, OnInit, ViewChild} from '@angular/core';
import { import {
PartnerJsonld, ProductJsonld,
ProductJsonld,
SaleJsonld, SaleJsonld,
SaleService, SaleService,
SaleSummaryJsonld, SaleSummaryJsonld,
@@ -17,17 +17,26 @@ import {MatTableDataSource} from "@angular/material/table";
import {OrderFilter} from "@app/_models/orderFilter"; import {OrderFilter} from "@app/_models/orderFilter";
import {ApiConverter} from "@app/_helpers/api.converter"; import {ApiConverter} from "@app/_helpers/api.converter";
import {Router} from "@angular/router"; import {Router} from "@angular/router";
import {registerLocaleData} from "@angular/common";
import localeDe from '@angular/common/locales/de';

registerLocaleData(localeDe);


@Component({ @Component({
selector: 'app-sales',
templateUrl: './sales.component.html',
styleUrl: './sales.component.scss'
selector: 'app-sales',
templateUrl: './sales.component.html',
styleUrl: './sales.component.scss',
providers: [
{
provide: LOCALE_ID,
useValue: 'de-DE',
},
],
}) })
export class SalesComponent implements OnInit { export class SalesComponent implements OnInit {
@ViewChild(MatSort) sort; @ViewChild(MatSort) sort;
@ViewChild(MatPaginator) paginator: MatPaginator; @ViewChild(MatPaginator) paginator: MatPaginator;



protected displayedColumns: string[]; protected displayedColumns: string[];
protected salesSub: Subscription; protected salesSub: Subscription;
protected sales: Array<SaleJsonld>; protected sales: Array<SaleJsonld>;
@@ -40,6 +49,8 @@ export class SalesComponent implements OnInit {
protected pageSize: number; protected pageSize: number;
protected pageIndex: number; protected pageIndex: number;


protected saleSummaryMaxTurnover: number;

protected modalOptions: NgbModalOptions = { protected modalOptions: NgbModalOptions = {
centered: true centered: true
}; };
@@ -50,7 +61,6 @@ export class SalesComponent implements OnInit {
private translateService: TranslateService, private translateService: TranslateService,
private modalService: NgbModal, private modalService: NgbModal,
private router: Router, private router: Router,

) { ) {
this.sort = new MatSort(); this.sort = new MatSort();
this.displayedColumns = ['pos', 'user', 'partner', 'product', 'turnover', 'profit', 'date']; this.displayedColumns = ['pos', 'user', 'partner', 'product', 'turnover', 'profit', 'date'];
@@ -65,6 +75,8 @@ export class SalesComponent implements OnInit {
this.pageEvent = new PageEvent(); this.pageEvent = new PageEvent();
this.pageSize = 10; this.pageSize = 10;
this.pageIndex = 0; this.pageIndex = 0;

this.saleSummaryMaxTurnover = 0;
} }


ngOnInit() { ngOnInit() {
@@ -95,10 +107,20 @@ export class SalesComponent implements OnInit {
data => { data => {
this.saleSummaries = data["hydra:member"]; this.saleSummaries = data["hydra:member"];
console.log(this.saleSummaries); console.log(this.saleSummaries);
if (this.saleSummaries.length > 0) {
this.saleSummaryMaxTurnover = Number(this.saleSummaries[0].turnover);
}
} }
) )
} }


calculateWidthPercentage(turnover: number, maxTurnOver: number): number {
if (turnover && maxTurnOver && maxTurnOver !== 0) {
return (turnover / maxTurnOver) * 100;
}
return 0;
}

onSortChange(sortState: Sort) { onSortChange(sortState: Sort) {
// Reset page index to first page // Reset page index to first page
this.pageIndex = 0; this.pageIndex = 0;
@@ -136,8 +158,8 @@ export class SalesComponent implements OnInit {
} }


navigateToSaleDetails(element: any) { navigateToSaleDetails(element: any) {
const product: ProductJsonld = element as ProductJsonld;
this.router.navigate(['/products', ApiConverter.extractId(product.id)]);
// const product: ProductJsonld = element as ProductJsonld;
// this.router.navigate(['/products', ApiConverter.extractId(product.id)]);
} }


openModalNewSale() { openModalNewSale() {
@@ -151,4 +173,6 @@ export class SalesComponent implements OnInit {
} }
}); });
} }

protected readonly Number = Number;
} }

+ 5
- 0
matsen-tool/src/assets/i18n/de.json 查看文件

@@ -108,5 +108,10 @@
"partner": "Partner", "partner": "Partner",
"product": "Produkt", "product": "Produkt",
"send": "Abschicken" "send": "Abschicken"
},
"sales":
{
"turnover": "Umsatz",
"profit": "Gewinn"
} }
} }

+ 35
- 0
matsen-tool/src/assets/scss/_sales.scss 查看文件

@@ -0,0 +1,35 @@
.sales-summary-container {

.sales-summary-bar {
border-radius: 5px;
background: #bbb;
margin: 0 0 0.5rem 0;
div {
animation: expand 2.5s ease;
border-radius: 5px;
span {
display: block;
border-radius: 5px;
padding: 15px;
white-space: nowrap;
}
}
}
.sales-summary-turnover {
background: rgb(179,208,47);
background: linear-gradient(109deg, rgba(179,208,47,1) 0%, rgba(64,208,70,1) 36%, rgba(44,181,91,1) 100%);
}
.sales-summary-profit {
background: rgb(45,209,159);
background: linear-gradient(109deg, rgba(45,209,159,1) 0%, rgba(64,208,203,1) 36%, rgba(44,138,181,1) 100%);
}
}

@keyframes expand {
from {
width: 0;
}
to {
width: 100%;
}
}

+ 1
- 0
matsen-tool/src/styles.scss 查看文件

@@ -6,5 +6,6 @@
@import "assets/scss/modal"; @import "assets/scss/modal";
@import "assets/scss/form"; @import "assets/scss/form";
@import "assets/scss/table"; @import "assets/scss/table";
@import "assets/scss/sales";
@import "assets/scss/button"; @import "assets/scss/button";
@import "assets/scss/accordion"; @import "assets/scss/accordion";

正在加载...
取消
保存