def create_stock( beginning_datetime: Optional[datetime] = None, booking_limit_datetime: Optional[datetime] = None, date_created: datetime = datetime.utcnow(), date_modified: datetime = datetime.utcnow(), date_modified_at_last_provider: Optional[datetime] = None, idx: Optional[int] = None, id_at_providers: Optional[str] = None, is_soft_deleted: bool = False, last_provider_id: Optional[int] = None, offer: Optional[Offer] = None, price: float = 10, quantity: Optional[int] = None, ) -> Stock: stock = Stock() stock.quantity = quantity stock.beginningDatetime = beginning_datetime stock.bookingLimitDatetime = booking_limit_datetime stock.dateCreated = date_created stock.dateModified = date_modified stock.dateModifiedAtLastProvider = date_modified_at_last_provider if idx: stock.id = idx stock.idAtProviders = id_at_providers stock.isSoftDeleted = is_soft_deleted stock.lastProviderId = last_provider_id stock.offer = offer stock.price = price return stock
def create_stock_with_thing_offer( offerer: Offerer, venue: Venue, offer: Offer = None, price: Optional[Decimal] = 10, quantity: int = 50, name: str = "Test Book", booking_email: str = "*****@*****.**", soft_deleted: bool = False, url: str = None, booking_limit_datetime: datetime = None, thing_type: ThingType = ThingType.AUDIOVISUEL, ) -> Stock: stock = Stock() stock.offerer = offerer stock.price = price if offer: stock.offer = offer else: stock.offer = create_offer_with_thing_product(venue, thing_name=name, thing_type=thing_type) stock.offer.bookingEmail = booking_email stock.bookingLimitDatetime = booking_limit_datetime stock.offer.url = url stock.offer.venue = venue stock.quantity = quantity stock.isSoftDeleted = soft_deleted return stock
def create_stock_from_event_occurrence( event_occurrence: Dict, price: int = 10, quantity: int = 10, soft_deleted: bool = False, recap_sent: bool = False, booking_limit_date: datetime = None, ) -> Stock: stock = Stock() stock.beginningDatetime = event_occurrence["beginningDatetime"] stock.offerId = event_occurrence["offerId"] stock.offer = event_occurrence["offer"] stock.price = price stock.quantity = quantity stock.isSoftDeleted = soft_deleted if recap_sent: stock.bookingRecapSent = datetime.utcnow() if booking_limit_date is None: stock.bookingLimitDatetime = event_occurrence["beginningDatetime"] else: stock.bookingLimitDatetime = booking_limit_date return stock
def delete_stock(stock: Stock) -> None: validation.check_stock_is_deletable(stock) stock.isSoftDeleted = True cancelled_bookings = [] for booking in stock.bookings: if not booking.isCancelled and not booking.isUsed: booking.isCancelled = True cancelled_bookings.append(booking) repository.save(stock, *cancelled_bookings) if cancelled_bookings: try: user_emails.send_batch_cancellation_emails_to_users(cancelled_bookings, mailing.send_raw_email) except mailing.MailServiceException as exc: app.logger.exception("Could not notify beneficiaries about deletion of stock=%s: %s", stock.id, exc) try: user_emails.send_offerer_bookings_recap_email_after_offerer_cancellation( cancelled_bookings, mailing.send_raw_email ) except mailing.MailServiceException as exc: app.logger.exception("Could not notify offerer about deletion of stock=%s: %s", stock.id, exc) if feature_queries.is_active(FeatureToggle.SYNCHRONIZE_ALGOLIA): redis.add_offer_id(client=app.redis_client, offer_id=stock.offerId)
def create_stock_from_offer( offer: Offer, price: float = 9.90, quantity: Optional[int] = 10, soft_deleted: bool = False, booking_limit_datetime: datetime = None, beginning_datetime: datetime = None, idx: int = None, date_modified: datetime = datetime.utcnow(), ) -> Stock: stock = Stock() stock.id = idx stock.offer = offer stock.price = price stock.quantity = quantity stock.isSoftDeleted = soft_deleted stock.bookingLimitDatetime = booking_limit_datetime stock.beginningDatetime = beginning_datetime stock.dateModified = date_modified return stock
def create_stock_with_event_offer( offerer: Offerer, venue: Venue, price: int = 10, booking_email: str = "*****@*****.**", quantity: int = 10, is_soft_deleted: bool = False, event_type: EventType = EventType.JEUX, name: str = "Mains, sorts et papiers", offer_id: int = None, beginning_datetime: datetime = datetime.utcnow() + timedelta(hours=72), thumb_count: int = 0, booking_limit_datetime: datetime = datetime.utcnow() + timedelta(hours=71), date_created: datetime = datetime.utcnow(), date_modified_at_last_provider: datetime = datetime.utcnow(), date_modifed: datetime = datetime.utcnow(), ) -> Stock: stock = Stock() stock.offerer = offerer stock.price = price stock.quantity = quantity stock.beginningDatetime = beginning_datetime stock.bookingLimitDatetime = booking_limit_datetime stock.dateCreated = date_created stock.dateModifiedAtLastProvider = date_modified_at_last_provider stock.dateModified = date_modifed stock.offer = create_offer_with_event_product( venue, event_name=name, event_type=event_type, booking_email=booking_email, is_national=False, thumb_count=thumb_count, ) stock.offer.id = offer_id stock.isSoftDeleted = is_soft_deleted return stock