コード例 #1
0
 def create_item(self, item):
     reservation = Reservation()
     reservation.resource_id = self.__resource_id
     reservation.reserver_email_address = item.reserver_email_address
     reservation.reserver_phone_number = item.reserver_phone_number
     reservation.reserver_name = item.reserver_name
     reservation.begin = item.begin
     reservation.end = item.end
     reservation._from_o365_sync = True
     reservation.set_state(Reservation.CONFIRMED, None)
     reservation.save()
     return reservation.id, reservation_change_key(item)
コード例 #2
0
ファイル: hvara_import.py プロジェクト: Tsalo42/respaTku
def save_reservation(
    data,
    hvara_reservations,
    user_objects_by_email,
    missing_users,
    catering_provider,
):
    if not data['resource']['object']:
        return

    origin_id = 'hvara:%s' % data['VarausId']
    res = hvara_reservations.get(origin_id)
    try:
        res = Reservation.objects.get(origin_id=origin_id)
    except Reservation.DoesNotExist:
        res = Reservation(origin_id=origin_id)

    res.begin = local_tz.localize(
        datetime.strptime(data['AlkuAika'], "%Y-%m-%dT%H:%M:%S"))
    res.end = local_tz.localize(
        datetime.strptime(data['LoppuAika'], "%Y-%m-%dT%H:%M:%S"))
    res.event_subject = data['Tilaisuus'].strip()
    res.host_name = data['Isanta'].strip()
    res.created_at = local_tz.localize(
        datetime.strptime(data['Perustettu'], "%Y-%m-%dT%H:%M:%S"))
    res.modified_at = local_tz.localize(
        datetime.strptime(data['Muutettu'], "%Y-%m-%dT%H:%M:%S"))
    res.number_of_participants = int(data['OsallistujaLkm'])
    if res.number_of_participants < 0:
        res.number_of_participants = None
    res.event_description = data['Selite'] or ''
    if data['VarusteluSelite'] or data['equipment']:
        s = 'Varustelu:\n'
        items = []
        if data['equipment']:
            items.append('\n'.join(['- ' + x for x in data['equipment']]))
        if data['VarusteluSelite']:
            items.append(data['VarusteluSelite'])
        s += '\n\n'.join(items)
        if res.event_description and not res.event_description.endswith('\n'):
            s = '\n' + s
        res.event_description += s
    res.participants = '\n'.join(data['attendees'])
    if data['OsallistujaSelite']:
        if res.participants:
            res.participants += '\n\n'
        res.participants += data['OsallistujaSelite']
    res.comments = 'Siirretty vanhasta huonevarausjärjestelmästä'
    res.resource = data['resource']['object']

    user = data['user']
    if user is not None:
        res.reserver_name = user['Nimi']
        email = user['Mail'].strip().lower()
        res.reserver_email_address = email
        res.reserver_phone_number = user['Puhelin']

        if email not in user_objects_by_email:
            try:
                u_obj = User.objects.get(email=email)
            except User.DoesNotExist:
                print("%s does not exist" % email)
                u_obj = None
            user_objects_by_email[email] = u_obj

        res.user = user_objects_by_email[email]
        if not res.user:
            missing_users.setdefault(email, 0)
            missing_users[email] += 1
    else:
        res.reserver_name = ''
        res.reserver_email_address = ''
        res.reserver_phone_number = ''
        res.user = None

    res._skip_notifications = True
    print(res)
    res.save()

    if data['catering'] or data['TarjoiluSelite']:
        order = CateringOrder(reservation=res, provider=catering_provider)
        invoicing_data = [data.get(f) for f in PAYER_FIELDS]
        order.invoicing_data = '\n'.join(
            [val.strip() for val in invoicing_data if val])
        message_data = []
        if data['catering']:
            message_data.append('\n'.join(data['catering']))
        if data['TarjoiluSelite']:
            message_data.append(data['TarjoiluSelite'].strip())
        order.message = '\n\n'.join(message_data)
        order.save()
コード例 #3
0
ファイル: reservation.py プロジェクト: codepointtku/respa
    def create(self, request):
        stack = request.data.pop('reservation_stack')
        if 'resource' in stack[0]:
            stack[0].pop('resource')
        if len(stack) > 100:
            return JsonResponse(
                {
                    'status':
                    'false',
                    'recurring_validation_error':
                    _('Reservation failed. Too many reservations at once.'),
                },
                status=400)
        data = {**request.data}
        data.update({'user': request.user})
        resource_id = data.get('resource')
        try:
            for key in stack:
                begin = key.get('begin')
                end = key.get('end')
                if begin is None or end is None:
                    return JsonResponse(
                        {
                            'status':
                            'false',
                            'recurring_validation_error':
                            _('Reservation failed. Begin or end time is missing.'
                              )
                        },
                        status=400)
            reservations = []
            for key in stack:
                begin = parse_datetime(key.get('begin'))
                end = parse_datetime(key.get('end'))
                try:
                    resource = Resource.objects.get(id=resource_id)
                except:
                    raise
                data['resource'] = resource
                res = Reservation(**data)
                res.begin = begin
                res.end = end
                if resource.validate_reservation_period(res, res.user):
                    return JsonResponse(
                        {
                            'status':
                            'false',
                            'recurring_validation_error':
                            _('Reservation failed. Make sure reservation period is correct.'
                              )
                        },
                        status=400)
                if resource.validate_max_reservations_per_user(res.user):
                    return JsonResponse(
                        {
                            'status':
                            'false',
                            'recurring_validation_error':
                            _('Reservation failed. Too many reservations at once.'
                              )
                        },
                        status=400)
                if resource.check_reservation_collision(begin, end, res):
                    return JsonResponse(
                        {
                            'status':
                            'false',
                            'recurring_validation_error':
                            _('Reservation failed. Overlap with existing reservations.'
                              )
                        },
                        status=400)
                reservations.append(res)
            reservation_dates_context = {'dates': []}
            """
            {% if bulk_email_context is defined %}
                {% for date in bulk_email_context['dates'] %}
                    Alku: {{ date.get('begin') }}
                    Loppu {{ date.get('end') }}
                {% endfor %}
            {% endif %}
            """
            for res in reservations:
                res.state = 'confirmed'
                if resource.validate_reservation_period(res, res.user):
                    return JsonResponse(
                        {
                            'status':
                            'false',
                            'recurring_validation_error':
                            _('Reservation failed. Make sure reservation period is correct.'
                              )
                        },
                        status=400)
                if resource.validate_max_reservations_per_user(res.user):
                    return JsonResponse(
                        {
                            'status':
                            'false',
                            'recurring_validation_error':
                            _('Reservation failed. Too many reservations at once.'
                              )
                        },
                        status=400)
                if resource.check_reservation_collision(begin, end, res):
                    return JsonResponse(
                        {
                            'status':
                            'false',
                            'recurring_validation_error':
                            _('Reservation failed. Overlap with existing reservations.'
                              )
                        },
                        status=400)
                res.save()
                reservation_dates_context['dates'].append({
                    'begin':
                    dateparser(reservations[0].begin, res.begin),
                    'end':
                    dateparser(reservations[0].end, res.end)
                })

            reservation_dates_context.update({
                'first_reservation': {
                    'begin':
                    dateparser(reservations[0].begin, reservations[0].begin),
                    'end':
                    dateparser(reservations[0].end, reservations[0].end)
                }
            })
            reservation_dates_context.update({
                'last_reservation': {
                    'begin':
                    dateparser(reservations[0].begin,
                               reservations[len(reservations) - 1].begin),
                    'end':
                    dateparser(reservations[0].end,
                               reservations[len(reservations) - 1].end)
                }
            })
            res = reservations[0]
            url = ''.join([
                request.is_secure() and 'https' or 'http',
                get_current_site(request).domain, '/v1/', 'reservation/',
                str(res.id), '/'
            ])
            ical_file = build_reservations_ical_file(reservations)
            attachment = ('reservation.ics', ical_file, 'text/calendar')
            res.send_reservation_mail(
                NotificationType.RESERVATION_BULK_CREATED,
                action_by_official=res.user.is_staff,
                attachments=[attachment],
                extra_context=reservation_dates_context)
            return JsonResponse(data={
                **ReservationSerializer(context={
                    'request':
                    self.request if self.request else request
                }).to_representation(res)
            },
                                status=200)
        except Exception as ex:
            return JsonResponse(
                {
                    'status':
                    'false',
                    'recurring_validation_error':
                    'Reservation failed. Try again later.'
                },
                status=500)
コード例 #4
0
def save_reservation(
        data, hvara_reservations,
        user_objects_by_email, missing_users,
        catering_provider,
):
    if not data['resource']['object']:
        return

    origin_id = 'hvara:%s' % data['VarausId']
    res = hvara_reservations.get(origin_id)
    try:
        res = Reservation.objects.get(origin_id=origin_id)
    except Reservation.DoesNotExist:
        res = Reservation(origin_id=origin_id)

    res.begin = local_tz.localize(datetime.strptime(data['AlkuAika'], "%Y-%m-%dT%H:%M:%S"))
    res.end = local_tz.localize(datetime.strptime(data['LoppuAika'], "%Y-%m-%dT%H:%M:%S"))
    res.event_subject = data['Tilaisuus'].strip()
    res.host_name = data['Isanta'].strip()
    res.created_at = local_tz.localize(datetime.strptime(data['Perustettu'], "%Y-%m-%dT%H:%M:%S"))
    res.modified_at = local_tz.localize(datetime.strptime(data['Muutettu'], "%Y-%m-%dT%H:%M:%S"))
    res.number_of_participants = int(data['OsallistujaLkm'])
    if res.number_of_participants < 0:
        res.number_of_participants = None
    res.event_description = data['Selite'] or ''
    if data['VarusteluSelite'] or data['equipment']:
        s = 'Varustelu:\n'
        items = []
        if data['equipment']:
            items.append('\n'.join(['- ' + x for x in data['equipment']]))
        if data['VarusteluSelite']:
            items.append(data['VarusteluSelite'])
        s += '\n\n'.join(items)
        if res.event_description and not res.event_description.endswith('\n'):
            s = '\n' + s
        res.event_description += s
    res.participants = '\n'.join(data['attendees'])
    if data['OsallistujaSelite']:
        if res.participants:
            res.participants += '\n\n'
        res.participants += data['OsallistujaSelite']
    res.comments = 'Siirretty vanhasta huonevarausjärjestelmästä'
    res.resource = data['resource']['object']

    user = data['user']
    if user is not None:
        res.reserver_name = user['Nimi']
        email = user['Mail'].strip().lower()
        res.reserver_email_address = email
        res.reserver_phone_number = user['Puhelin']

        if email not in user_objects_by_email:
            try:
                u_obj = User.objects.get(email=email)
            except User.DoesNotExist:
                print("%s does not exist" % email)
                u_obj = None
            user_objects_by_email[email] = u_obj

        res.user = user_objects_by_email[email]
        if not res.user:
            missing_users.setdefault(email, 0)
            missing_users[email] += 1
    else:
        res.reserver_name = ''
        res.reserver_email_address = ''
        res.reserver_phone_number = ''
        res.user = None

    res._skip_notifications = True
    print(res)
    res.save()

    if data['catering'] or data['TarjoiluSelite']:
        order = CateringOrder(reservation=res, provider=catering_provider)
        invoicing_data = [data.get(f) for f in PAYER_FIELDS]
        order.invoicing_data = '\n'.join([val.strip() for val in invoicing_data if val])
        message_data = []
        if data['catering']:
            message_data.append('\n'.join(data['catering']))
        if data['TarjoiluSelite']:
            message_data.append(data['TarjoiluSelite'].strip())
        order.message = '\n\n'.join(message_data)
        order.save()