import { Observable } from 'rxjs/Rx'; import { Injectable } from '@angular/core'; import { Http, RequestOptions } from '@angular/http'; import { SeCurisResourceServices, MySearchParams } from './base'; import { LocaleService } from '../common/i18n'; var pack_example = { id: 7, code: 'DX250000', status: 'AC', application_name: 'Doxr', created_by_id: 'admin', created_by_name: 'Administrator (admin)', creation_timestamp: 1440597540000, end_valid_date: 2051222400000, init_valid_date: 1440547200000, license_preactivation: true, license_type_id: 5, licensetype_code: 'DXL3', metadata: [ { key: 'max_docs', value: '250000', readonly: true, mandatory: true, pack_id: 7 } ], num_activations: 7, num_available: -2, num_creations: 7, num_licenses: 5, organization_id: 2, organization_name: 'CurisTec', preactivation_valid_period: 70, renew_valid_period: 0, } export type PacksFilter = { licenseTypeId?: number; organizationId?: number; applicationId?: number; name?: string; } export const PACK_STATUS = { CREATED: 'CR', ACTIVE: 'AC', ONHOLD: 'OH', EXPIRED: 'EX', CANCELLED: 'CA' } export const COLORS_BY_STATUS = { 'CR': '#808080', 'AC': '#329e5a', 'OH': '#9047c7', 'EX': '#ea7824', 'CA': '#a21717' }; export const PACK_ACTIONS_BY_STATUS = { edit: [PACK_STATUS.CREATED, PACK_STATUS.EXPIRED, PACK_STATUS.ONHOLD, PACK_STATUS.ACTIVE], activate: [PACK_STATUS.CREATED, PACK_STATUS.EXPIRED, PACK_STATUS.ONHOLD], putonhold: [PACK_STATUS.ACTIVE], cancel: [PACK_STATUS.EXPIRED, PACK_STATUS.ONHOLD, PACK_STATUS.ACTIVE], 'delete': [PACK_STATUS.CREATED, PACK_STATUS.CANCELLED] } export const PACK_ACTIONS : any[] = [{ command: 'activate', icon: 'play_circle_outline', name: 'Activate' },{ command: 'putonhold', icon: 'pause_circle_outline', name: 'Put on hold' },{ command: 'cancel', icon: 'cancel', name: 'Cancel' }] @Injectable() export class PacksService extends SeCurisResourceServices { constructor(http: Http, $L: LocaleService) { super($L, http, 'pack'); } public get(filter?: PacksFilter | number | string) { if (!filter || typeof filter === "number" || typeof filter === "string") { return super.get(filter); } let searchParams = new MySearchParams(filter); let url = `${this.resource}/?${searchParams}`; return this.http.get(url).map(response => response.json()).catch(err => super.processErrorResponse(err)); } public activate(id: number) { return super.action(id, "activate"); } public cancel(id: number) { return super.action(id, "cancel"); } public putonhold(id: number) { return super.action(id, "putonhold"); } public nextLicCode(id: number) { let url = `pack/${id}/next_license_code` return this.http.get(url).map(response => response.text()); } public isActionAvailable(action:string, pack:any) { var validStatuses = PACK_ACTIONS_BY_STATUS[action]; return pack && validStatuses && validStatuses.indexOf(pack.status) !== -1; } getStatusName(statusCode: string): string { return this.$L.get(`pack.status.${statusCode}`, this.$L.get('Unknown')); } getStatusColor(statusCode: string): string { return COLORS_BY_STATUS[statusCode] || '#cccccc'; } }