import { Component, OnInit, ViewChild } from '@angular/core'; import { TicketCheckoutView, SoldTicketFilter, TournamentFilter } from 'tournee.businesslogic'; import { FeedbackPanelComponent } from 'src/app/shared/components/feedback-panel/feedback-panel.component'; import { Params, Router } from '@angular/router'; import { TournamentTicketsService } from 'src/app/shared/services/tournament.tickets.service'; import { TournamentService } from 'src/app/shared/services/tournament.service'; import { AuthService } from 'src/app/shared/services/auth.service'; @Component({ selector: 'app-ticket-checkout', templateUrl: './ticket-checkout.component.html', styleUrls: ['./ticket-checkout.component.css'], providers: [ TournamentTicketsService, TournamentService ] }) export class TicketCheckoutComponent implements OnInit { @ViewChild('FeedbackPanel') FeedbackPanel:FeedbackPanelComponent; isWorking: boolean = false; Url: string; Ticket: TicketCheckoutView; Quantity: number; GameSystemNames: string; DisableQuantity: boolean = false; Amount: number; payDeposit: boolean; payFull: boolean; acknowledge_deposit: boolean; acknowledge_terms_and_conditions: boolean; game_systems_alerts: boolean = false; IsCancel: boolean = false; constructor(private _tickets: TournamentTicketsService, private _tournaments: TournamentService, private _router: Router, private _auth: AuthService) { } ngOnInit() { } load(params: Params, url: string) { return new Promise((resolve, reject) => { this.Url = url; if (params['sti']) { this._tickets.get_sold_tickets(SoldTicketFilter.create().set('sold_ticket_id', params['sti']).set('attendee_id', this._auth.User.id)) .then((result) => { if (!result.result || result.result.length != 1) { reject(new Error("Invalid Sold Ticket Id")); } else { this.Ticket = new TicketCheckoutView(result.result[0], true); this.Quantity = 1; this.DisableQuantity = true; this.Amount = this.Ticket.TotalOwed; this.GameSystemNames = this.Ticket.game_systems.map((gs) => { return gs.name; }).join(', '); resolve(); } }) .catch(reject); } else if (params['tt']) { this._tournaments.get_availability(TournamentFilter.create().set('ticket_id', params['tt']).set('user_id', this._auth.User.id)) .then((result) => { if (!result.result || result.result.length != 1) { reject(new Error("Invalid Tournament Ticket Id")); } else { this.Ticket = new TicketCheckoutView(result.result[0], false); this.Quantity = 1; this.DisableQuantity = this.Ticket.maximum_per_attendee == 1; if (!this.AmountSelectionPossible()) { this.Amount = this.Ticket.TotalOwed; } this.GameSystemNames = this.Ticket.game_systems.map((gs) => { return gs.name; }).join(', '); resolve(); } }) .catch(reject) } else if (params['m']) { if (params['m'] == 'pp1') { // confirm this._tickets.confirm_paypal_payment(params['paymentId'], params['token'], params['PayerID']) .then((result) => { this._router.navigate([this.Url, 'ticket', result.result.sold_ticket_ids.join(',')], { queryParams: { tid : result.result.transaction_id }}); }) .catch(reject); } else if (params['m'] == 'pp2') { // cancel this._tickets.cancel_paypal_payment(params['token']) .then(() => { this.FeedbackPanel.triggerSuccess("You have successfully cancelled this purchase", false); this.IsCancel = true; resolve(); }) .catch(reject); } else { reject(); } } else { reject(); } }); } Valid() : boolean { if (this.Ticket.terms_and_conditions && !this.acknowledge_terms_and_conditions) { return false; } if (this.Ticket.is_deposit) { if (this.Ticket.total_paid == 0) { return (this.Amount == this.Ticket.deposit_price && this.acknowledge_deposit) || this.Amount == this.Ticket.full_price; } else { return this.Amount == this.Ticket.TotalOwed; } } else { return this.Amount == this.Ticket.full_price; } } AmountSelectionPossible() { return this.Ticket.is_deposit && this.Ticket.total_paid == 0 } PayDeposit() { this.payDeposit = true; this.payFull = false; this.Amount = this.Ticket.deposit_price; } PayFull() { this.payDeposit = false; this.payFull = true; this.Amount = this.Ticket.full_price; } pay_now() { if (!this.Valid()) { return; } if (this.isWorking) { return; } this.FeedbackPanel.reset(); this.isWorking = true; this._tickets.begin_paypal_payment(this.Quantity, this.Amount, this.Ticket.sold_ticket_id, this.Ticket.ticket_id, this.Ticket.slice_slug, this.Url) .then((result) => { window.location.href= result.result; }) .catch((err) => { this.FeedbackPanel.triggerError(err); this.isWorking = false; }); } MaxAllocation() { if (this.Ticket.maximum_per_attendee) { return this.Ticket.maximum_per_attendee; } return 100000000000000000; } }