import PromoCodeAdapterInterface from './PromoCodeAdapterInterface'; import PromoCode from '../entity/PromoCode'; import Money from '../../common/entities/Money'; import Currency from '../../common/entities/Currency'; import DiscountPercentage from '../../common/entities/DiscountPercentage'; import PromoCodeDiscountTypes from '../enums/PromoCodeDiscountTypes'; import PromoCodeUseTypes from '../enums/PromoCodeUseTypes'; export default class PromoCodeAdapter implements PromoCodeAdapterInterface { adapt(json: any, instance: PromoCode): PromoCode { instance.id = json.id; instance.used = json.used; instance.code = json.slug; instance.supply = json.supply; instance.use_type = json.use_type; instance.team = json.team; instance.discount_amount = new Money(new Currency('GBP', 'L', 0), 0); instance.discount_percentage = new DiscountPercentage(0, 0); // Conditionals because the object GIVEN by backend has different format for each if (json.discount_percentage === []) { instance.discount_type = PromoCodeDiscountTypes.TYPE_FIXED; instance.value = json.discount_amount.amount; instance.discount_amount.currency.decimal_precision = 2; } else if (json.discount_amount === []) { instance.discount_type = PromoCodeDiscountTypes.TYPE_PERCENTAGE; instance.value = json.discount_percentage.amount; instance.discount_percentage.precision = json.discount_percentage.precision; } instance.end_date = json.date_to; instance.min_seats = json.min_seats; instance.max_seats = json.max_seats; instance.start_date = json.date_from; instance.number_of_usages = json.number_of_usages; instance.number_of_max_usages = json.number_of_max_usages; instance.associated_events = json.associated_events; instance.number_of_promo_codes = json.number_of_promo_codes; return instance; } prepare(instance: PromoCode): object { if(instance.discount_type === PromoCodeDiscountTypes.TYPE_PERCENTAGE) { instance.discount_percentage.value = instance.value; instance.discount_amount = void 0; } else { instance.discount_amount = { amount: instance.value, currency: instance.discount.currency.iso_code, currency_precision: instance.discount.currency.decimal_precision, currency_symbol: instance.discount.currency.symbol } instance.discount_percentage = void 0; } let object = { id: instance.id, slug: instance.code, used: instance.used, supply: instance.supply, discount_amount: instance.discount_amount, discount_percentage: instance.discount_percentage, department: instance.team, date_to: instance.end_date, max_seats: instance.max_seats, min_seats: instance.min_seats, date_from: instance.start_date, number_of_usages: instance.number_of_usages, number_of_max_usages: instance.number_of_max_usages, associated_events: instance.associated_events, number_of_promo_codes: instance.number_of_promo_codes, first_booking: instance.use_type === PromoCodeUseTypes.FIRST_TIME ? true : false, }; return object; } transformToEntity(json: any): PromoCode { return this.adapt(json, new PromoCode()); } transformToPayload(instance: PromoCode): any { return this.prepare(instance); } }