Ejemplo n.º 1
0
    def _set_perf_id_attrs(self, perf_id):

        self._event_id = None
        self.departure_date = None
        self._perf_token = None
        self.usage_date = None

        if perf_id:

            event_len = int(perf_id[0])

            self._event_id = perf_id[1:event_len + 1]

            remaining = perf_id[event_len + 1:]

            if remaining and remaining[0] == 'd':
                self.departure_date = yyyymmdd_to_date(
                    remaining[1:9]  # yyyymmdd
                )
                remaining = remaining[9:]

            if remaining and remaining[0] == 'p':
                self._perf_token = remaining[1:]

            elif remaining and remaining[0] == 'u':
                self.usage_date = yyyymmdd_to_date(
                    remaining[1:9]  # yyyymmdd
                )
Ejemplo n.º 2
0
    def end_date(self):
        end_date = None
        date_range_end = self._get_core_event_attr('date_range_end')

        if date_range_end:
            end_date = yyyymmdd_to_date(
                date_range_end['date_yyyymmdd']
            )

        return end_date
Ejemplo n.º 3
0
    def start_date(self):
        start_date = None
        date_range_start = self._get_core_event_attr('date_range_start')

        if date_range_start:
            start_date = yyyymmdd_to_date(
                date_range_start['date_yyyymmdd']
            )

        return start_date
Ejemplo n.º 4
0
    def available_until_date(self):

        if self._available_until_date is None:

            avail_dates = self._core_avail_detail.available_dates
            if avail_dates:
                until_date = avail_dates.get("last_yyyymmdd")
                if until_date:
                    self._available_until_date = yyyymmdd_to_date(until_date)

        return self._available_until_date
Ejemplo n.º 5
0
    def available_from_date(self):

        if self._available_from_date is None:

            avail_dates = self._core_avail_detail.available_dates
            if avail_dates:
                from_date = avail_dates.get("first_yyyymmdd")
                if from_date:
                    self._available_from_date = yyyymmdd_to_date(from_date)

        return self._available_from_date
Ejemplo n.º 6
0
    def _set_datetime(self, date_yyyymmdd, time_hhmmss=None):

        if date_yyyymmdd:
            self.date = yyyymmdd_to_date(date_yyyymmdd)

        else:
            self.date = None

        if time_hhmmss:
            self.time = hhmmss_to_time(time_hhmmss)

        else:
            self.time = None
Ejemplo n.º 7
0
    def _build_performances_from_usage(
        self, usage_date_dict, need_departure_date, latest_date
    ):

        inv_dates = []

        if 'invalid_range' in usage_date_dict:
            usage_inv_range = usage_date_dict['invalid_range']
            if type(usage_inv_range) == list:

                for inv in usage_inv_range:
                    inv_first_date = yyyymmdd_to_date(
                        inv['first_invalid_date_yyyymmdd']
                    )

                    inv_last_date = yyyymmdd_to_date(
                        inv['last_invalid_date_yyyymmdd']
                    )

                    inv_dates.extend(dates_in_range(
                        inv_first_date, inv_last_date
                    ))

            else:
                inv_first_date = yyyymmdd_to_date(
                    usage_inv_range['first_invalid_date_yyyymmdd']
                )

                inv_last_date = yyyymmdd_to_date(
                    usage_inv_range['last_invalid_date_yyyymmdd']
                )

                inv_dates.extend(dates_in_range(inv_first_date, inv_last_date))

        inv_weekdays = []

        if 'invalid_weekday' in usage_date_dict:
            usage_inv_weekdays = usage_date_dict['invalid_weekday']

            if type(usage_inv_weekdays) == list:

                for inv_weekday in usage_inv_weekdays:
                    inv_weekdays.append(inv_weekday['weekday_number'])

            else:
                inv_weekdays.append(int(usage_inv_weekdays['weekday_number']))

        performances = []

        first_date = yyyymmdd_to_date(
            usage_date_dict['first_valid_date_yyyymmdd']
        )

        last_date = yyyymmdd_to_date(
            usage_date_dict['last_valid_date_yyyymmdd']
        )

        if latest_date:

            if latest_date < last_date:
                last_date = latest_date

        delta = last_date - first_date

        for i in range(delta.days + 1):
            perf_date = first_date + datetime.timedelta(days=i)

            if (
                perf_date.isoweekday() not in inv_weekdays
                and perf_date not in inv_dates
            ):

                if need_departure_date:
                    departure_date = perf_date
                else:
                    departure_date = None

                performances.append(
                    perf_objs.Performance.from_event_and_usage_date(
                        event=self,
                        usage_date=perf_date,
                        departure_date=departure_date,
                        **self._internal_settings()
                    )
                )

        return performances