def booking_sysadm(request, pk, action): if not request.is_ajax(): raise Http404 try: if not request.user.is_superuser: raise UserNotAllowed booking = Booking.objects.select_related().get(id=pk) if action == 'delete': from_date = booking.from_date to_date = booking.to_date settlement = booking.settlement while from_date < to_date: avail = Availability.objects.get(room=settlement.room, date=from_date) avail.placecount += 1 avail.save() from_date += timedelta(days=1) booking_delete_client_mail(booking) booking.delete() url = reverse_lazy('bookings_list') elif action == 'enable': booking.enabled = True booking.save() booking_new_hotel_mail(booking) url = reverse_lazy('booking_admin_detail', args=[booking.uuid, ]) else: raise UserNotAllowed payload = {'success': True, 'location': url} except UserNotAllowed: payload = {'success': False, 'error_msg': _('You are not allowed for this action.')} except: payload = {'success': False} return ajax_answer_lazy(payload)
def add_param(request, object_id): # noinspection PyBroadException try: if not request.user.is_superuser: raise AccessError p = get_object_or_404(Product, pk=int(object_id)) ctype = ContentType.objects.get_for_model(Product) param = ProductParameterValue() param.content_type = ctype param.object_id = p.pk param.parameter = get_object_or_404(ProductParameter, pk=int(request.POST['param'])) param.value = request.POST['value'] if request.POST['keyparam'] == 'on': param.keyparam = True param.save() # noinspection PyBroadException try: unit = param.parameter.unit.name except: unit = '' payload = {'success': True, 'name': param.parameter.name, 'unit': unit, 'id': param.pk, 'value': param.value} except AccessError as aerr: payload = {'success': False} except: payload = {'success': False} return ajax_answer_lazy(payload)
def client_review(request, pk): try: hotel = Hotel.objects.get(id=pk) # guests = Booking.objects.filter(hotel=hotel,to_date__gte=now()).values_list('user', flat=True) if request.user.is_superuser: message = _('You are superuser and may add review.') elif request.user.pk in hotel.complete_booking_users_id: message = _('Thanks for you review!') else: raise UserNotAllowed if Review.objects.filter(hotel=hotel, user=request.user).count(): raise UserNotAllowed food = request.POST['point_food'] service = request.POST['point_service'] purity = request.POST['point_purity'] transport = request.POST['point_transport'] prices = request.POST['point_prices'] review = request.POST['review'] r = Review() r.user = request.user r.username = request.user.first_name r.hotel = hotel r.food = food r.service = service r.purity = purity r.transport = transport r.prices = prices r.review = review r.save() payload = {'success': True, 'message': message} except UserNotAllowed: payload = {'success': False} return ajax_answer_lazy(payload)
def client_booking_cancel(request, uuid): try: booking = Booking.objects.get(uuid=uuid) if not request.user.is_authenticated(): raise UserNotAllowed if request.user != booking.user and not request.user.is_superuser: raise UserNotAllowed if booking.status == STATUS_ACCEPTED or booking.status == STATUS_CONFIRMED: booking.status = STATUS_CANCELED_CLIENT booking.cancel_time = now() booking.save() subject = _("Changed status of booking") message = _("Hotel: ") + booking.hotel.get_name + "\n" message += _("Booking: ") + str(booking.system_id) + "\n" message += _("Booking link: ") + booking.get_absolute_url() + "\n" message += _("New status: ") + booking.get_status_display() + "\n" message += '\n' + "IP: %s USER-AGENT: %s" % (request.META.get('REMOTE_ADDR', ''), request.META.get('HTTP_USER_AGENT', '')[:255]) + '\n' mail_managers(subject, message) payload = {'success': True} except UserNotAllowed: payload = {'success': False, 'error': _('You are not allowed change booking status.')} except: payload = {'success': False} return ajax_answer_lazy(payload)
def booking_status_change(request, uuid): try: booking = Booking.objects.get(uuid=uuid) if request.user not in booking.hotel.admins.all() and not request.user.is_superuser: raise UserNotAllowed status = request.POST["status"] if booking.status != int(status): booking.status = status booking.save() subject = _("Changed status of booking") message = _("Hotel: ") + booking.hotel.get_name + "\n" message += _("Booking: ") + str(booking.system_id) + "\n" message += _("Booking link: ") + booking.get_absolute_url() + "\n" message += _("New status: ") + booking.get_status_display() + "\n" message += ( "\n" + "IP: %s USER-AGENT: %s" % (request.META.get("REMOTE_ADDR", ""), request.META.get("HTTP_USER_AGENT", "")[:255]) + "\n" ) mail_managers(subject, message) payload = {"success": True} except UserNotAllowed as naerr: payload = {"success": False, "error": _("You are not allowed change booking status.")} except: payload = {"success": False} return ajax_answer_lazy(payload)
def hotels_in_country(request): try: searched = Hotel.objects.all() return filter_hotels_on_map(request, searched) except: payload = {'success': False} return ajax_answer_lazy(payload)
def add_address(request): """ Its Ajax add address in basket """ # noinspection PyBroadException try: if not request.user.is_authenticated(): raise AccessError address = DeliveryAddress() address.user = request.user country_new = request.POST.get('country') or None if country_new is not None: country, created = Country.objects.get_or_create(name=country_new) address.country = country region_new = request.POST.get('region') or None if region_new is not None: region, created = Region.objects.get_or_create(name=region_new) address.region = region zipcode = request.POST.get('zipcode') or None if zipcode is not None: address.zipcode = zipcode city_new = request.POST.get('city') or None if city_new is not None: city, created = City.objects.get_or_create(name=city_new) address.city = city street = request.POST.get('street') or None if street is not None: address.street = street house_number = request.POST.get('house_number') or None if house_number is not None: address.house_number = house_number building = request.POST.get('building') or None if building is not None: address.building = building flat_number = request.POST.get('flat_number') or None if flat_number is not None: address.flat_number = flat_number first_name = request.POST.get('first_name') or None if first_name is not None: address.first_name = first_name middle_name = request.POST.get('middle_name') or None if middle_name is not None: address.middle_name = middle_name last_name = request.POST.get('last_name') or None if last_name is not None: address.last_name = last_name phone = request.POST.get('phone') or None if phone is not None: address.phone = phone skype = request.POST.get('skype') or None if skype is not None: address.skype = skype address.save() payload = {'success': True} except AccessError as aerr: payload = {'success': False, 'error': _('You are not allowed for add address')} except: payload = {'success': False} return ajax_answer_lazy(payload)
def room_rates(request): try: json_data = json.loads(request.body) currency = Currency.objects.get(code=setting('DEFAULT_CURRENCY', 'RUB')) room = Room.objects.get(id=int(json_data['room_id'])) if request.user not in room.hotel.admins.all() and not request.user.is_superuser: raise UserNotAllowed # find settlements keys in data all_settlements, all_discounts = [], [] for k in json_data.keys(): if k[0] == 's': all_settlements.append(k) elif k[0] == 'd': all_discounts.append(k) for i, v in enumerate(json_data['dates']): on_date = datetime.fromtimestamp(time.mktime(time.strptime(v, "%d%m%Y"))) if 'placecount' in json_data.keys(): try: placecount = int(json_data['placecount'][i]) try: min_days = int(json_data['min_days'][i]) except: min_days = None # store availability availability, created = Availability.objects.get_or_create(date=on_date, room=room) availability.placecount = placecount if min_days is not None: availability.min_days = min_days availability.save() except ValueError: pass for k in all_discounts: try: discount_id = int(k[1:]) discount = Discount.objects.get(id=discount_id) value = int(json_data[k][i]) room_discount, created = RoomDiscount.objects.get_or_create(date=on_date, discount=discount, room=room) room_discount.value = value room_discount.save() except ValueError: pass for k in all_settlements: try: settlement_id = int(k[1:]) settlement = SettlementVariant.objects.get(id=settlement_id) price = int(json_data[k][i]) placeprice, created = PlacePrice.objects.get_or_create(date=on_date, settlement=settlement) placeprice.amount = price placeprice.currency = currency placeprice.save() except ValueError: pass payload = {'success': True} except UserNotAllowed: payload = {'success': False} except: payload = {'success': False} return ajax_answer_lazy(payload)
def form_invalid(self, form, *args, **kwargs): self.data = as_json(form.errors) self.success = False payload = {'success': self.success, 'data': self.data} if self.request.is_ajax(): return ajax_answer_lazy(payload) else: return super(AjaxFormMixin, self).form_invalid(form, *args, **kwargs)
def payment_method(request): try: p_m = request.POST['p_m'] paymnt_method = PaymentMethod.objects.get(pk=p_m) payload = {'success': True, 'id': paymnt_method.pk, 'description': paymnt_method.description, 'card': paymnt_method.use_card} except: payload = {'success': False} return ajax_answer_lazy(payload)
def post(self, request, *args, **kwargs): success = True location = None try: logout(self.request) location = '/' except: success = False payload = {'success': success, 'location': location} return ajax_answer_lazy(payload)
def base_autocomplete(obj, request): search_qs = obj.objects.filter( Q(name__icontains=request.POST["q"]) | Q(name_en__icontains=request.POST["q"]) ).order_by("name") results = [] for r in search_qs: userstring = {"name": r.get_name, "slug": r.slug} results.append(userstring) payload = {"answer": results} return ajax_answer_lazy(payload)
def edit_discount(request): try: d = Discount.objects.get(pk=int(request.POST["discount"])) if request.user not in d.hotel.admins.all() and not request.user.is_superuser: raise AccessError html = render_to_string("cabinet/edit_discount.html", {"discount": d}) payload = {"success": True, "html": html} except: payload = {"success": False} return ajax_answer_lazy(payload)
def edit_discount(request): try: d = Discount.objects.get(pk=int(request.POST['discount'])) if request.user not in d.hotel.admins.all() and not request.user.is_superuser: raise AccessError html = render_to_string('cabinet/edit_discount.html', {'discount': d}) payload = {'success': True, 'html': html} except: payload = {'success': False} return ajax_answer_lazy(payload)
def delete_discount(request): try: d = Discount.objects.get(pk=int(request.POST['discount'])) if request.user not in d.hotel.admins.all() and not request.user.is_superuser: raise AccessError d.delete() payload = {'success': True} except: payload = {'success': False} return ajax_answer_lazy(payload)
def base_autocomplete(obj, request): search_qs = obj.objects.filter( Q(name__icontains=request.POST['q']) | Q(name_en__icontains=request.POST['q'])).order_by('name') results = [] for r in search_qs: userstring = {'name': r.get_name, 'slug': r.slug} results.append(userstring) payload = {'answer': results} return ajax_answer_lazy(payload)
def room_rates(request): try: json_data = json.loads(request.body) currency = Currency.objects.get(code=setting('DEFAULT_CURRENCY', 'RUB')) hotel = Hotel.objects.get(id=int(json_data['hotel'])) if request.user not in hotel.admins.all() and not request.user.is_superuser: raise UserNotAllowed # find settlements keys in data all_rooms, all_avail, all_limits = [], [], [] for k in json_data.keys(): if k[0] == 'r': all_rooms.append(k) elif k[0] == 'a': all_avail.append(k) elif k[0] == 'l': all_limits.append(k) for i, v in enumerate(json_data['dates']): on_date = datetime.fromtimestamp(time.mktime(time.strptime(v, "%d%m%Y"))) for k in all_rooms: try: settlement_id = int(k[1:]) settlement = SettlementVariant.objects.get(id=settlement_id) price = int(json_data[k][i]) placeprice, created = PlacePrice.objects.get_or_create(date=on_date, settlement=settlement) placeprice.amount = price placeprice.currency = currency placeprice.save() except ValueError: pass for k in all_avail: try: room_id = int(k[1:]) room = Room.objects.get(pk=room_id) p = json_data[k][i] if len(p.strip()) == 0: placecount = 0 else: placecount = int(p) availability, created = Availability.objects.get_or_create(date=on_date, room=room) availability.placecount = placecount try: min_days = int(json_data['l' + k[1:]][i]) except: min_days = None if min_days is not None: availability.min_days = min_days availability.save() except ValueError: pass payload = {'success': True} except UserNotAllowed: payload = {'success': False} except: payload = {'success': False} return ajax_answer_lazy(payload)
def form_valid(self, form): if self.request.is_ajax(): self.success = True payload = dict(success=self.success, location=self.success_url or self.get_success_url()) try: payload['status_msg'] = self.status_msg except: pass return ajax_answer_lazy(payload) else: return HttpResponseRedirect(self.success_url)
def delete_room_discount(request): try: d = Discount.objects.get(pk=int(request.POST['discount'])) if not request.user in d.hotel.admins.all() and not request.user.is_superuser: raise AccessError r = Room.objects.get(pk=int(request.POST['room'])) RoomDiscount.objects.filter(room=r, discount=d).delete() payload = {'success': True} except: payload = {'success': False} return ajax_answer_lazy(payload)
def delete_comment(request, object_id): # Link used when Admin delete the comment try: if not request.user.is_superuser: raise AccessError Nnmcomment.objects.get(pk=int(object_id)).delete() payload = {'success': True} except AccessError: payload = {'success': False} except: payload = {'success': False} return ajax_answer_lazy(payload)
def add_room_discount(request): try: d = Discount.objects.get(pk=int(request.POST['discount'])) if request.user not in d.hotel.admins.all() and not request.user.is_superuser: raise AccessError r = Room.objects.get(pk=int(request.POST['room'])) if not RoomDiscount.objects.filter(room=r, discount=d).exists(): RoomDiscount(room=r, discount=d, date=now()).save() payload = {'success': True} except: payload = {'success': False} return ajax_answer_lazy(payload)
def param_value_delete(request, object_id): # Link used when User delete the param value try: if not request.user.is_superuser: raise AccessError ProductParameterValue.objects.get(pk=int(object_id)).delete() payload = {'success': True} except AccessError: payload = {'success': False} except: payload = {'success': False} return ajax_answer_lazy(payload)
def delete_feedback(request, object_id): # Link used when User delete the feedback try: if not request.user.is_superuser: raise AccessError Feedback.objects.get(pk=int(object_id)).delete() payload = {'success': True} except AccessError: payload = {'success': False} except: payload = {'success': False} return ajax_answer_lazy(payload)
def request_hotel_delete(request, pk): try: req_hotel = RequestAddHotel.objects.get(id=pk) if not request.user.is_superuser: raise UserNotAllowed req_hotel.delete() payload = {'success': True} except UserNotAllowed: payload = {'success': False, 'error': _('You are not allowed change room variants.')} except: payload = {'success': False} return ajax_answer_lazy(payload)
def room_delete(request, pk): try: room = Room.objects.get(id=pk) if request.user not in room.hotel.admins.all() and not request.user.is_superuser: raise UserNotAllowed room.delete() payload = {'success': True} except UserNotAllowed: payload = {'success': False, 'error': _('You are not allowed change room variants.')} except: payload = {'success': False} return ajax_answer_lazy(payload)
def delete_address(request, object_id): # Link used when User delete the address delivery try: if not request.user.is_authenticated(): raise AccessError DeliveryAddress.objects.get(pk=int(object_id)).delete() payload = {'success': True, 'id': int(object_id)} except AccessError: payload = {'success': False} except: payload = {'success': False} return ajax_answer_lazy(payload)
def payment_method(request): try: p_m = request.POST["p_m"] paymnt_method = PaymentMethod.objects.get(pk=p_m) payload = { "success": True, "id": paymnt_method.pk, "description": paymnt_method.description, "card": paymnt_method.use_card, } except: payload = {"success": False} return ajax_answer_lazy(payload)
def autocomplete_search(request, size=16): results = [] search_qs = Product.objects.filter( Q(name__icontains=request.POST['q']) | Q(name_en__icontains=request.POST['q'])).order_by('name')[:5] for r in search_qs: img = make_thumbnail(r.main_image, width=int(size)) userstring = {'name': r.name, 'path': r.get_absolute_url(), 'img': img, 'slug': r.slug, 'amount': "%0.2f" % (r.amount,), 'id': r.pk} results.append(userstring) payload = {'answer': results} return ajax_answer_lazy(payload)
def delete_related_product(request, object_id, product_id): try: if not request.user.is_superuser: raise AccessError p = get_object_or_404(Product, pk=int(object_id)) product = get_object_or_404(Product, pk=int(product_id)) p.related_products.remove(product) p.save() payload = {'success': True} except AccessError: payload = {'success': False} except: payload = {'success': False} return ajax_answer_lazy(payload)
def del_compare_product(request, object_id): try: compare = request.session['shop_compare'] except: compare = [] product_id = int(object_id) if product_id in compare: compare.remove(product_id) try: request.session['shop_compare'] = compare payload = {'success': True} except: payload = {'success': False} return ajax_answer_lazy(payload)
def room_rates(request): try: json_data = json.loads(request.body) currency = Currency.objects.get( code=setting('DEFAULT_CURRENCY', 'RUB')) hotel = Hotel.objects.get(id=int(json_data['hotel'])) if request.user not in hotel.admins.all( ) and not request.user.is_superuser: raise UserNotAllowed # find settlements keys in data all_rooms, all_avail, all_limits = [], [], [] for k in json_data.keys(): if k[0] == 'r': all_rooms.append(k) elif k[0] == 'a': all_avail.append(k) elif k[0] == 'l': all_limits.append(k) for i, v in enumerate(json_data['dates']): on_date = datetime.fromtimestamp( time.mktime(time.strptime(v, "%d%m%Y"))) for k in all_rooms: try: settlement_id = int(k[1:]) settlement = SettlementVariant.objects.get( id=settlement_id) price = int(json_data[k][i]) placeprice, created = PlacePrice.objects.get_or_create( date=on_date, settlement=settlement) placeprice.amount = price placeprice.currency = currency placeprice.save() except ValueError: pass for k in all_avail: try: room_id = int(k[1:]) room = Room.objects.get(pk=room_id) p = json_data[k][i] if len(p.strip()) == 0: placecount = 0 else: placecount = int(p) availability, created = Availability.objects.get_or_create( date=on_date, room=room) availability.placecount = placecount try: min_days = int(json_data['l' + k[1:]][i]) except: min_days = None if min_days is not None: availability.min_days = min_days availability.save() except ValueError: pass payload = {'success': True} except UserNotAllowed: payload = {'success': False} except: payload = {'success': False} return ajax_answer_lazy(payload)
def filter_hotels_on_map(request, hotels): try: searched = hotels f_date = request.POST.get('start_date') or None amount_min = request.POST.get('amount_min') or None amount_max = request.POST.get('amount_max') or None options = request.POST.getlist('options') or None stars = request.POST.getlist('stars') or None if amount_max and amount_min: if f_date: from_date = convert_to_date(f_date) hotels_with_amount = PlacePrice.objects.filter( date=from_date, amount__range=(amount_min, amount_max)).values_list( 'settlement__room__hotel__pk', flat=True).distinct() else: hotels_with_amount = PlacePrice.objects.filter( date=now(), amount__range=(amount_min, amount_max)).values_list( 'settlement__room__hotel__pk', flat=True).distinct() searched = searched.filter(pk__in=hotels_with_amount, work_on_request=False) if options: for option in options: searched = searched.filter(option=option) if stars: searched = searched.filter(starcount__in=stars) searched = searched.order_by('starcount') results = [] for hotel in searched: answer = { 'name': hotel.get_name, 'latitude': hotel.latitude, 'url': hotel.get_absolute_url(), 'address': hotel.address, 'id': hotel.pk, 'starcount': hotel.starcount, 'img': make_thumbnail(hotel.main_image, width=113, height=75, aspect=1), 'longitude': hotel.longitude, 'starcount_name': hotel.get_starcount_display(), 'amount': str(int(hotel.current_amount)) } results.append(answer) payload = {'success': True, 'hotels': results} except: payload = {'success': False} return ajax_answer_lazy(payload)
def room_discounts(request): try: json_data = json.loads(request.body) hotel = Hotel.objects.get(id=int(json_data['hotel'])) if request.user not in hotel.admins.all( ) and not request.user.is_superuser: raise UserNotAllowed all_rooms = [] for k in json_data.keys(): if k[0:2] == 'ub': all_rooms.append(k[2:]) for r in all_rooms: room = Room.objects.get(pk=int(r)) # TODO Check user rights for room simple_discount, created = SimpleDiscount.objects.get_or_create( room=room) try: if json_data['ub' + r][0] == '1': simple_discount.ub = True discount = int(json_data['ub' + r][3]) if 0 <= discount <= 100: simple_discount.ub_discount = discount else: simple_discount.ub_discount = 0 else: simple_discount.ub = False simple_discount.ub_discount = 0 if json_data['gb' + r][0] == '1': simple_discount.gb = True simple_discount.gb_days = int(json_data['gb' + r][1]) penalty = int(json_data['gb' + r][2]) if 0 <= penalty <= 100: simple_discount.gb_penalty = penalty else: simple_discount.gb_penalty = 0 discount = int(json_data['gb' + r][3]) if 0 <= discount <= 100: simple_discount.gb_discount = discount else: simple_discount.gb_discount = 0 else: simple_discount.gb = False simple_discount.gb_days = 0 simple_discount.gb_penalty = 0 simple_discount.gb_discount = 0 if json_data['nr' + r][0] == '1': simple_discount.nr = True discount = int(json_data['nr' + r][3]) if 0 <= discount <= 100: simple_discount.nr_discount = discount else: simple_discount.nr_discount = 0 else: simple_discount.nr = False simple_discount.nr_discount = 0 simple_discount.save() except: pass payload = {'success': True} except UserNotAllowed: payload = {'success': False} except: payload = {'success': False} return ajax_answer_lazy(payload)
def add_address(request): """ Its Ajax add address in basket """ # noinspection PyBroadException try: if not request.user.is_authenticated(): raise AccessError address = DeliveryAddress() address.user = request.user country_new = request.POST.get('country') or None if country_new is not None: country, created = Country.objects.get_or_create(name=country_new) address.country = country region_new = request.POST.get('region') or None if region_new is not None: region, created = Region.objects.get_or_create(name=region_new) address.region = region zipcode = request.POST.get('zipcode') or None if zipcode is not None: address.zipcode = zipcode city_new = request.POST.get('city') or None if city_new is not None: city, created = City.objects.get_or_create(name=city_new) address.city = city street = request.POST.get('street') or None if street is not None: address.street = street house_number = request.POST.get('house_number') or None if house_number is not None: address.house_number = house_number building = request.POST.get('building') or None if building is not None: address.building = building flat_number = request.POST.get('flat_number') or None if flat_number is not None: address.flat_number = flat_number first_name = request.POST.get('first_name') or None if first_name is not None: address.first_name = first_name middle_name = request.POST.get('middle_name') or None if middle_name is not None: address.middle_name = middle_name last_name = request.POST.get('last_name') or None if last_name is not None: address.last_name = last_name phone = request.POST.get('phone') or None if phone is not None: address.phone = phone skype = request.POST.get('skype') or None if skype is not None: address.skype = skype address.save() payload = {'success': True} except AccessError as aerr: payload = { 'success': False, 'error': _('You are not allowed for add address') } except: payload = {'success': False} return ajax_answer_lazy(payload)