import {ChangeDetectorRef, Component, LOCALE_ID, OnInit, ViewChild} from '@angular/core'; import { ProductJsonld, SaleJsonld, SaleService, SaleSummaryJsonld, SaleSummaryService } from "@app/core/api/v1"; import {Subscription} from "rxjs"; import {MatPaginator, MatPaginatorIntl, PageEvent} from "@angular/material/paginator"; import {MatSort, Sort} from "@angular/material/sort"; import {TranslateService} from "@ngx-translate/core"; import {NewPartnerComponent} from "@app/partners/new-partner/new-partner.component"; import {ModalStatus} from "@app/_helpers/modal.states"; import {NgbModal, NgbModalOptions} from "@ng-bootstrap/ng-bootstrap"; import {MatTableDataSource} from "@angular/material/table"; import {OrderFilter} from "@app/_models/orderFilter"; import {ApiConverter} from "@app/_helpers/api.converter"; import {Router} from "@angular/router"; import {registerLocaleData} from "@angular/common"; import localeDe from '@angular/common/locales/de'; registerLocaleData(localeDe); @Component({ selector: 'app-sales', templateUrl: './sales.component.html', styleUrl: './sales.component.scss', providers: [ { provide: LOCALE_ID, useValue: 'de-DE', }, ], }) export class SalesComponent implements OnInit { @ViewChild(MatSort) sort; @ViewChild(MatPaginator) paginator: MatPaginator; protected displayedColumns: string[]; protected salesSub: Subscription; protected sales: Array; protected salesSummarySub: Subscription; protected saleSummaries: Array; protected dataSource; protected length: number; protected pageEvent: PageEvent; protected pageSize: number; protected pageIndex: number; protected saleSummaryMaxTurnover: number; protected modalOptions: NgbModalOptions = { centered: true }; constructor( private saleService: SaleService, private saleSummaryService: SaleSummaryService, private translateService: TranslateService, private modalService: NgbModal, private router: Router, ) { this.sort = new MatSort(); this.displayedColumns = ['pos', 'user', 'partner', 'product', 'turnover', 'profit', 'date']; this.salesSub = new Subscription(); this.sales = []; this.salesSummarySub = new Subscription(); this.saleSummaries = []; this.dataSource = new MatTableDataSource(this.sales); this.paginator = new MatPaginator(new MatPaginatorIntl(), ChangeDetectorRef.prototype); this.length = 0; this.pageEvent = new PageEvent(); this.pageSize = 10; this.pageIndex = 0; this.saleSummaryMaxTurnover = 0; } ngOnInit() { this.getSalesData(); this.getSalesSummaryData(); } getSalesData() { this.salesSub = this.saleService.salesGetCollection( this.pageIndex + 1, this.pageSize, ).subscribe( data => { this.sales = data["hydra:member"]; this.dataSource = new MatTableDataSource(this.sales); this.length = Number(data["hydra:totalItems"]); this.paginator.length = this.length; console.log(this.sales); } ) } getSalesSummaryData() { this.salesSummarySub = this.saleSummaryService.saleSummariesGetCollection( 1, 50 ).subscribe( data => { this.saleSummaries = data["hydra:member"]; 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) { // Reset page index to first page this.pageIndex = 0; let order: OrderFilter; if (sortState.direction === "") { order = OrderFilter.Undefined; } else { order = sortState.direction; } // this.nameOrderAsc = OrderFilter.Undefined; // this.cityOrderAsc = OrderFilter.Undefined; // this.websiteOrderAsc = OrderFilter.Undefined; // switch (sortState.active) { // case "name": // this.nameOrderAsc = order; // break; // case "address": // this.cityOrderAsc = order; // break; // case "website": // this.websiteOrderAsc = order; // break; // } this.getSalesData(); } handlePageEvent(e: PageEvent) { this.pageEvent = e; this.length = e.length; this.pageIndex = e.pageIndex.valueOf(); this.pageSize = e.pageSize.valueOf(); this.getSalesData(); } navigateToSaleDetails(element: any) { // const product: ProductJsonld = element as ProductJsonld; // this.router.navigate(['/products', ApiConverter.extractId(product.id)]); } openModalNewSale() { const modalRefContact = this.modalService.open(NewPartnerComponent, this.modalOptions); let sale: SaleJsonld = {} as SaleJsonld; modalRefContact.componentInstance.partner = sale; modalRefContact.componentInstance.submit.subscribe((modalStatus: ModalStatus) => { if (modalStatus === ModalStatus.Submitted) { modalRefContact.dismiss(); this.getSalesData(); } }); } protected readonly Number = Number; }