Exemple #1
0
    def post(self):
        """
        Create new subscription.
        """
        # Checks
        parsed_args = parser.parse_args()
        car = session.query(Car).filter(
            Car.id == parsed_args["car_id"]).first()
        if not car:
            abort(400, message="No car.")
        place = session.query(Place).filter(
            Place.id == parsed_args["place_id"]).first()
        if not place or place.occupied:
            abort(400, message="Place not allowed.")
        if parsed_args["end"] <= datetime.utcnow().replace(tzinfo=pytz.UTC):
            abort(400, message="End date in past.")

        subscription = Subscription(
            end=parsed_args["end"],
            type=parsed_args["type"],
            place_id=parsed_args["place_id"],
            car_id=parsed_args["car_id"],
        )
        if parsed_args["start"]:
            subscription.start = parsed_args["start"]
        session.add(subscription)
        self.try_session_commit()
        # make new payment for subscription
        payment = Payment(
            sale_date=datetime.utcnow().replace(tzinfo=pytz.UTC),
            price=calc_price(subscription.start, subscription.end),
            tax=calc_tax(),
            subscription_id=subscription.id,
        )
        session.add(payment)
        return self.finalize_post_req(subscription)