Newer
Older
ref="modalEmissionManagerCreate"
:title="$t('scheduleEditor.titleCreate', { show: selectedShow.name })"
:cancel-title="$t('cancel')"
size="lg"
@ok="create"
<span v-html="$t('scheduleEditor.pastEventWarning')" />
<server-errors :errors="serverErrors" />
<div v-if="loaded.modal && !submitting">
<b-row>
<b-col cols="12">
<label class="tw-w-full tw-font-bold">
<span class="tw-inline-block tw-pb-2">{{ $t('rrule.rrule') }}</span>
v-model="valuePick.rrule"
:options="rruleOptions"
<b-col cols="3">
<label class="tw-w-full tw-font-bold">
<span class="tw-inline-block tw-pb-2">{{ $t('scheduleEditor.fromDate' ) }}</span>
v-model="valuePick.firstDate"
<b-col
v-if="valuePick.rrule !== 1"
cols="3"
>
<label class="tw-w-full tw-font-bold">
<span
class="tw-inline-block tw-pb-2"
v-html="$t('scheduleEditor.toDate')"
/>
v-model="valuePick.lastDate"
<b-col cols="3">
<label class="tw-w-full tw-font-bold">
<span class="tw-inline-block tw-pb-2">{{ $t('scheduleEditor.from') }}</span>
<b-form-input
v-model="valuePick.startTime"
<b-col cols="3">
<label class="tw-w-full tw-font-bold">
<span class="tw-inline-block tw-pb-2">{{ $t('scheduleEditor.to') }}</span>
<b-form-input
v-model="valuePick.endTime"
</b-col>
</b-row>
</div>
<div v-else>
<b-row>
<b-col align="center">
<img
src="/assets/radio.gif"
:alt="$t('loading')"
<div class="tw-flex tw-justify-between tw-items-center tw-w-full">
<span v-html="$t('scheduleEditor.projectedDuration', { duration: projectedTimeslotDuration })" />
<div class="tw-space-x-2">
<b-button @click="cancel()">
{{ $t('cancel') }}
</b-button>
<b-button
variant="primary"
@click="ok()"
>
OK
</b-button>
</div>
</div>
</template>
</template>
<script>
import {mapGetters} from 'vuex'
import prettyDate from '../../mixins/prettyDate'
import rrules from '../../mixins/rrules'
import ServerErrors from '@/components/ServerErrors.vue'
components: {ServerErrors},
data() {
return {
newSchedule: null,
loadedModal: false,
submitting: false,
pastEventWarning: false,
serverErrors: [],
firstDate: null,
startTime: null,
endTime: null,
lastDate: null,
computed: {
loaded() {
return {
shows: this.$store.state.shows.loaded['shows'],
modal: this.loadedModal,
}
},
projectedTimeslotDuration() {
const {firstDate, startTime, endTime} = this.valuePick
const d1 = new Date(`${firstDate} ${startTime}`)
const d2 = new Date(`${this.initialLastDate} ${endTime}`)
const diffInNs = (d2 - d1) * 1000 * 1000
const diffInMinutes = this.nanosecondsToMinutes(diffInNs)
...mapGetters({
selectedShow: 'shows/selectedShow',
})
},
async create(event) {
// prevent the modal from closing automatically on click
event.preventDefault()
// check for past dates; as past dates will be ignored by steering we
// want to make the user aware - otherwise it might get confusing in
// conflict resolution
let now = this.apiDate(new Date())
if (this.valuePick.firstDate < now) {
this.valuePick.firstDate = now
this.pastEventWarning = true
return
} else {
this.pastEventWarning = false
}
// take all values that have been picked and put them into our new
// schedule. so far we do not need any transformations.
this.newSchedule.schedule.first_date = this.valuePick.firstDate
this.newSchedule.schedule.start_time = this.valuePick.startTime
this.newSchedule.schedule.end_time = this.valuePick.endTime
this.newSchedule.schedule.last_date = this.valuePick.lastDate
this.newSchedule.schedule.rrule = this.valuePick.rrule
this.newSchedule.schedule.by_weekday = this.getWeekdayFromApiDate(this.valuePick.firstDate)
// ok then, let's submit and see if any conflicts arise
this.submitting = true
this.serverErrors = []
try {
await this.$store.dispatch('shows/submitSchedule', {
showId: this.selectedShow.id,
schedule: this.newSchedule,
})
this.$parent.renderView(null)
this.$refs.modalEmissionManagerCreate.hide()
} catch (e) {
const responseData = e.response?.data
if (e.response?.status === 409) {
this.$parent.resolve(responseData)
} else {
this.serverErrors = e.errors ?? []
} finally {
this.submitting = false
}
// initialise a new schedule and open the modal
open(start, end) {
let firstDate = start.format('YYYY-MM-DD')
const startTime = start.format('HH:mm')
const endTime = end.format('HH:mm')
const lastDate = end.format('YYYY-MM-DD')
const now = this.apiDate(new Date())
if (firstDate < now) {
firstDate = now
this.pastEventWarning = true
} else {
this.pastEventWarning = false
}
this.valuePick.firstDate = firstDate
this.valuePick.startTime = startTime
this.valuePick.endTime = endTime
this.valuePick.lastDate = lastDate
this.initialLastDate = lastDate
this.newSchedule = {
schedule: {
rrule: 1,
show: 0,
by_weekday: 0,
first_date: firstDate,
start_time: startTime,
end_time: endTime,
last_date: lastDate,
is_repetition: false,
add_days_no: 0,
add_business_days_only: false,

Richard Blechinger
committed
default_playlist_id: 0,
automation_id: 0,
}
}
this.loadedModal = true
this.submitting = false
this.$refs.modalEmissionManagerCreate.show()
},
</script>
<style scoped>