Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

179 строки
5.7 KiB

  1. import {ChangeDetectorRef, Component, LOCALE_ID, OnInit, ViewChild} from '@angular/core';
  2. import {
  3. ProductJsonld,
  4. SaleJsonld,
  5. SaleService,
  6. SaleSummaryJsonld,
  7. SaleSummaryService
  8. } from "@app/core/api/v1";
  9. import {Subscription} from "rxjs";
  10. import {MatPaginator, MatPaginatorIntl, PageEvent} from "@angular/material/paginator";
  11. import {MatSort, Sort} from "@angular/material/sort";
  12. import {TranslateService} from "@ngx-translate/core";
  13. import {NewPartnerComponent} from "@app/partners/new-partner/new-partner.component";
  14. import {ModalStatus} from "@app/_helpers/modal.states";
  15. import {NgbModal, NgbModalOptions} from "@ng-bootstrap/ng-bootstrap";
  16. import {MatTableDataSource} from "@angular/material/table";
  17. import {OrderFilter} from "@app/_models/orderFilter";
  18. import {ApiConverter} from "@app/_helpers/api.converter";
  19. import {Router} from "@angular/router";
  20. import {registerLocaleData} from "@angular/common";
  21. import localeDe from '@angular/common/locales/de';
  22. registerLocaleData(localeDe);
  23. @Component({
  24. selector: 'app-sales',
  25. templateUrl: './sales.component.html',
  26. styleUrl: './sales.component.scss',
  27. providers: [
  28. {
  29. provide: LOCALE_ID,
  30. useValue: 'de-DE',
  31. },
  32. ],
  33. })
  34. export class SalesComponent implements OnInit {
  35. @ViewChild(MatSort) sort;
  36. @ViewChild(MatPaginator) paginator: MatPaginator;
  37. protected displayedColumns: string[];
  38. protected salesSub: Subscription;
  39. protected sales: Array<SaleJsonld>;
  40. protected salesSummarySub: Subscription;
  41. protected saleSummaries: Array<SaleSummaryJsonld>;
  42. protected dataSource;
  43. protected length: number;
  44. protected pageEvent: PageEvent;
  45. protected pageSize: number;
  46. protected pageIndex: number;
  47. protected saleSummaryMaxTurnover: number;
  48. protected modalOptions: NgbModalOptions = {
  49. centered: true
  50. };
  51. constructor(
  52. private saleService: SaleService,
  53. private saleSummaryService: SaleSummaryService,
  54. private translateService: TranslateService,
  55. private modalService: NgbModal,
  56. private router: Router,
  57. ) {
  58. this.sort = new MatSort();
  59. this.displayedColumns = ['pos', 'user', 'partner', 'product', 'turnover', 'profit', 'date'];
  60. this.salesSub = new Subscription();
  61. this.sales = [];
  62. this.salesSummarySub = new Subscription();
  63. this.saleSummaries = [];
  64. this.dataSource = new MatTableDataSource<SaleJsonld>(this.sales);
  65. this.paginator = new MatPaginator(new MatPaginatorIntl(), ChangeDetectorRef.prototype);
  66. this.length = 0;
  67. this.pageEvent = new PageEvent();
  68. this.pageSize = 10;
  69. this.pageIndex = 0;
  70. this.saleSummaryMaxTurnover = 0;
  71. }
  72. ngOnInit() {
  73. this.getSalesData();
  74. this.getSalesSummaryData();
  75. }
  76. getSalesData() {
  77. this.salesSub = this.saleService.salesGetCollection(
  78. this.pageIndex + 1,
  79. this.pageSize,
  80. ).subscribe(
  81. data => {
  82. this.sales = data["hydra:member"];
  83. this.dataSource = new MatTableDataSource<SaleJsonld>(this.sales);
  84. this.length = Number(data["hydra:totalItems"]);
  85. this.paginator.length = this.length;
  86. console.log(this.sales);
  87. }
  88. )
  89. }
  90. getSalesSummaryData() {
  91. this.salesSummarySub = this.saleSummaryService.saleSummariesGetCollection(
  92. 1,
  93. 50
  94. ).subscribe(
  95. data => {
  96. this.saleSummaries = data["hydra:member"];
  97. console.log(this.saleSummaries);
  98. if (this.saleSummaries.length > 0) {
  99. this.saleSummaryMaxTurnover = Number(this.saleSummaries[0].turnover);
  100. }
  101. }
  102. )
  103. }
  104. calculateWidthPercentage(turnover: number, maxTurnOver: number): number {
  105. if (turnover && maxTurnOver && maxTurnOver !== 0) {
  106. return (turnover / maxTurnOver) * 100;
  107. }
  108. return 0;
  109. }
  110. onSortChange(sortState: Sort) {
  111. // Reset page index to first page
  112. this.pageIndex = 0;
  113. let order: OrderFilter;
  114. if (sortState.direction === "") {
  115. order = OrderFilter.Undefined;
  116. } else {
  117. order = sortState.direction;
  118. }
  119. // this.nameOrderAsc = OrderFilter.Undefined;
  120. // this.cityOrderAsc = OrderFilter.Undefined;
  121. // this.websiteOrderAsc = OrderFilter.Undefined;
  122. // switch (sortState.active) {
  123. // case "name":
  124. // this.nameOrderAsc = order;
  125. // break;
  126. // case "address":
  127. // this.cityOrderAsc = order;
  128. // break;
  129. // case "website":
  130. // this.websiteOrderAsc = order;
  131. // break;
  132. // }
  133. this.getSalesData();
  134. }
  135. handlePageEvent(e: PageEvent) {
  136. this.pageEvent = e;
  137. this.length = e.length;
  138. this.pageIndex = e.pageIndex.valueOf();
  139. this.pageSize = e.pageSize.valueOf();
  140. this.getSalesData();
  141. }
  142. navigateToSaleDetails(element: any) {
  143. // const product: ProductJsonld = element as ProductJsonld;
  144. // this.router.navigate(['/products', ApiConverter.extractId(product.id)]);
  145. }
  146. openModalNewSale() {
  147. const modalRefContact = this.modalService.open(NewPartnerComponent, this.modalOptions);
  148. let sale: SaleJsonld = {} as SaleJsonld;
  149. modalRefContact.componentInstance.partner = sale;
  150. modalRefContact.componentInstance.submit.subscribe((modalStatus: ModalStatus) => {
  151. if (modalStatus === ModalStatus.Submitted) {
  152. modalRefContact.dismiss();
  153. this.getSalesData();
  154. }
  155. });
  156. }
  157. protected readonly Number = Number;
  158. }