module fb { export class Visning extends VisningDOGen { currentlyRegistered: number; Visningsdeltagare: Models_VisningsdeltagareLO[]; Slots: fb.ISlot[]; VisaPaaInternet: ChangeTrack; // Beräknat värde, används ej av WebAPI VisaFinnsVisningsdeltagareVarning: boolean; public static createNew() { var ret = new Visning({ AktivitetId: null, AktivitetStart: null, AktivitetSlut: null, MaeklarObjektId: null, PublikStarttid: null, PublikSlutTidpunkt: null, VisningText: null, SkallVisasPaaInternet: null, DeltagarBegraensning: null, AntalSlotar: null, SlotTidMinuter: null, SenasteSlotTid: null, AntalVisningsdeltagare: null, VisaPaaInternet: null, VisaFinnsVisningsdeltagareVarning:null }) ret.$enqueueable = false; ret.validation(); return ret; } validation() { this.AktivitetSlut.customValidation = function (track: fb.ChangeTrack) { var root: fb.Visning = track.root; return root.AktivitetStart.value <= root.AktivitetSlut.value; } this.AktivitetSlut.customValidationErrorMessage = this.$rootName + '.NEGATIV_VISNINGSTID'; this.AktivitetStart.customValidation = function (track: fb.ChangeTrack) { var root: fb.Visning = track.root; root.applyValue(root.AktivitetSlut); return true; } this.VisningText.maxLength = 80; } static calculateVisaPaaInternet(v: Visning): number { if (typeof v.SkallVisasPaaInternet === 'undefined' || typeof v.AktivitetStart === 'undefined' || typeof v.AktivitetSlut === 'undefined' || typeof v.PublikStarttid === 'undefined' || typeof v.PublikSlutTidpunkt === 'undefined') { // Saknar egenskaper för att kunna beräkna return -1; } if (v.SkallVisasPaaInternet.value === true && v.AktivitetStart.value === v.PublikStarttid.value && v.AktivitetSlut.value === v.PublikSlutTidpunkt.value) { return 1; // Visa datum och tid på internet } else if (v.SkallVisasPaaInternet.value === false && (v.PublikStarttid.value === null || v.PublikStarttid.value === v.AktivitetStart.value) // TODO: Ska bara va null när WebAPI tillåter det && v.PublikSlutTidpunkt.value === null) { return 2; // Visa inte datum och tid på internet } else if (v.SkallVisasPaaInternet.value === true && v.PublikStarttid.value.indexOf('00:00:00') !== -1 && v.PublikSlutTidpunkt.value === null) { return 3; // Visa datum men inte tid på internet } else if (v.SkallVisasPaaInternet.value === true && (v.AktivitetStart.value !== v.PublikStarttid.value || v.AktivitetSlut.value !== v.PublikSlutTidpunkt.value)) { return 4; // Visa datum och annan tid på internet } return -1; // Okänd state } init(initData: any, changeTrack) { initData.DeltagarBegraensning = initData.DeltagarBegraensning || false; initData.SenasteSlotTid = initData.SenasteSlotTid || null; // Gör alltid om till sträng för att förhindra falska mergningar initData.SlotTidMinuter = _.isNull(initData.SlotTidMinuter) ? null : (initData.SlotTidMinuter + ''); initData.AntalSlotar = _.isNull(initData.AntalSlotar) ? null : (initData.AntalSlotar + ''); super.init(initData, changeTrack); // Beräkna värde efter all data är skapad this.VisaPaaInternet = new fb.ChangeTrack(Visning.calculateVisaPaaInternet(this), this); this.VisaPaaInternet.ignoreMerge = true; } getSaveObject(): any { var saveObject = super.getSaveObject(); delete saveObject.VisaPaaInternet; // Ta bort beräknat värde inför skick till WebAPI return saveObject; } getForeignKeyObject(): fb.IForeignKeyObject { return { entity: fb.ForeignKeyEntity.MAEKLAROBJEKT, key: this.MaeklarObjektId.value } } } export interface ISlot extends Object { VisningId?: number; AktivitetId?: number; AktivitetStart: string; AktivitetSlut: string; maxBookings?: number; currentlyRegistered?: number; AnsvarigPersonId?: number; // Används endast vid utland och vid skapande av visningar } }