jaywink /
kakaravaara3
| 1 | import datetime |
||
| 2 | |||
| 3 | from shoop.front.basket.objects import BaseBasket |
||
| 4 | from shoop.front.basket.order_creator import BasketOrderCreator |
||
| 5 | from shoop.utils.dates import parse_date |
||
| 6 | |||
| 7 | from reservations.models import Reservation, ReservableProduct |
||
| 8 | |||
| 9 | |||
| 10 | class ReservableBasket(BaseBasket): |
||
| 11 | def _compare_line_for_addition(self, current_line_data, product, supplier, shop, extra): |
||
| 12 | if product.type.identifier == "reservable": |
||
| 13 | # Never add to existing reservation lines |
||
| 14 | return False |
||
| 15 | return super( |
||
| 16 | ReservableBasket, self)._compare_line_for_addition(current_line_data, product, supplier, shop, extra) |
||
| 17 | |||
| 18 | def add_product(self, supplier, shop, product, quantity, force_new_line=False, extra=None, parent_line=None): |
||
| 19 | if not extra: |
||
| 20 | extra = {} |
||
| 21 | if self.request.POST.get("start", None): |
||
|
0 ignored issues
–
show
|
|||
| 22 | extra["reservation_start"] = parse_date(self.request.POST.get("start")) |
||
|
0 ignored issues
–
show
|
|||
| 23 | extra["persons"] = self.request.POST.get("persons", 1) |
||
|
0 ignored issues
–
show
|
|||
| 24 | # TODO: enable this here once https://github.com/shoopio/shoop/issues/291 is resolved in some way |
||
| 25 | # Currently setting `force_new_line` causes product not to be added at all. |
||
| 26 | # Once this works, remove above override of `_compare_line_for_addition`. |
||
| 27 | # if product.type.identifier == "reservable": |
||
| 28 | # force_new_line = True |
||
| 29 | return super(ReservableBasket, self).add_product( |
||
| 30 | supplier, shop, product, quantity, force_new_line=force_new_line, extra=extra, parent_line=parent_line) |
||
| 31 | |||
| 32 | |||
| 33 | class ReservableOrderCreator(BasketOrderCreator): |
||
| 34 | def process_saved_order_line(self, order, order_line): |
||
| 35 | if order_line.product and order_line.product.type.identifier == "reservable": |
||
| 36 | # Create reservation |
||
| 37 | start_date = order_line.source_line.get("reservation_start") |
||
| 38 | reservable = ReservableProduct.objects.get(product=order_line.product) |
||
|
0 ignored issues
–
show
|
|||
| 39 | start_time = datetime.datetime.combine(start_date, reservable.check_in_time) |
||
| 40 | end_date = start_date + datetime.timedelta(days=int(order_line.quantity)) |
||
| 41 | end_time = datetime.datetime.combine(end_date, reservable.check_out_time) |
||
| 42 | Reservation.objects.create( |
||
|
0 ignored issues
–
show
|
|||
| 43 | reservable=reservable, |
||
| 44 | order_line=order_line, |
||
| 45 | start_time=start_time, |
||
| 46 | end_time=end_time, |
||
| 47 | persons=order_line.source_line.get("persons", 1), |
||
| 48 | ) |
||
| 49 | if not order_line.extra_data: |
||
| 50 | order_line.extra_data = {} |
||
| 51 | order_line.extra_data["reservation_start"] = order_line.source_line.get("reservation_start") |
||
| 52 | order_line.extra_data["reservation_end"] = end_date.strftime("%Y-%m-%d") |
||
| 53 | order_line.extra_data["persons"] = order_line.source_line.get("persons", 1) |
||
| 54 | order_line.save() |
||
| 55 |
This check looks for calls to members that are non-existent. These calls will fail.
The member could have been renamed or removed.