import Product from '../../Product/entity/Product'; import ValidableInterface from '../../common/interfaces/ValidableInterface'; import JourneyGroup from '../../JourneyGroup/entity/JourneyGroup'; import Concession from '../../Concession/entity/Concession'; export default class TravelProduct extends Product implements ValidableInterface { // Concessions must be not initialized because of the BE logic. protected _concessions: Array; protected _journey_groups: Array = []; protected _seats_on_sale: number = null; get concessions(): Array { return this._concessions; } set concessions(value: Array) { this._concessions = value; } get journey_groups(): Array { return this._journey_groups; } set journey_groups(value: Array) { this._journey_groups = value; } get seats_on_sale(): number { return this._seats_on_sale; } set seats_on_sale(value: number) { this._seats_on_sale = value; } private buildConcessionsArray() { if (!Array.isArray(this.concessions)) { this.concessions = []; } } addJourneyGroup(item: JourneyGroup) { this.journey_groups.push(item); } setJourneyGroup(index, item: JourneyGroup) { this.journey_groups[index] = item; } removeJourneyGroup(index) { this.journey_groups.splice(index, 1); } addConcession(item: Concession) { this.buildConcessionsArray(); this.concessions.push(item); } setConcession(index, item: Concession) { this.buildConcessionsArray(); this.concessions[index] = item; } removeConcession(index) { this.buildConcessionsArray(); this.concessions.splice(index, 1); } invalidFields(prefix: string = ''): Array { let fields = super.invalidFields('product__'); !this.hasValue(this.seats_on_sale) && fields.push(`${prefix}seats_on_sale`); this.journey_groups.map(eachJourneyGroup => fields.push(...eachJourneyGroup.invalidFields('product__'))); return fields; } }