"""Default Account Pricing Tier Model. This model represents a default Pricing Tier for an Account and Pricing Family. """ import datetime from oto import response from pricing.connectors import mysql import sqlalchemy class DefaultAccountPricingTier(mysql.BaseModel): """Default Account Pricing Tier model.""" __tablename__ = 'default_account_pricing_tier' default_pricing_tier_id = sqlalchemy.Column( sqlalchemy.BIGINT, primary_key=True, autoincrement=True) account_type = sqlalchemy.Column( sqlalchemy.Enum('vendor', 'subaccount'), nullable=False) account_id = sqlalchemy.Column(sqlalchemy.Integer, nullable=False) pricing_family_id = sqlalchemy.Column(sqlalchemy.BIGINT, nullable=False) orchard_pricing_tier_id = sqlalchemy.Column( sqlalchemy.BIGINT, nullable=False) created_date = sqlalchemy.Column(sqlalchemy.DateTime) created_by = sqlalchemy.Column(sqlalchemy.VARCHAR(45)) updated_date = sqlalchemy.Column(sqlalchemy.DateTime) updated_by = sqlalchemy.Column(sqlalchemy.VARCHAR(45)) active = sqlalchemy.Column(sqlalchemy.Boolean, default=True) def to_dict(self): """Convert the default account pricing tier to dict.""" created_date = None if isinstance(self.created_date, datetime.datetime): created_date = self.created_date.timestamp() updated_date = None if isinstance(self.updated_date, datetime.datetime): updated_date = self.updated_date.timestamp() return dict( default_pricing_tier_id=self.default_pricing_tier_id, account_type=self.account_type, account_id=self.account_id, orchard_pricing_tier_id=self.orchard_pricing_tier_id, pricing_family_id=self.pricing_family_id, created_date=created_date, created_by=self.created_by, updated_date=updated_date, updated_by=self.updated_by, active=self.active ) @mysql.autosession() def get_by_account_and_pricing_family_id( account_type, account_id, pricing_family_id, session): """Get the default account pricing tier by the pricing family. Args: account_type (string): indicates if vendor or subaccount. account_id (int): indicates if vendor_id or subaccount_id. pricing_family_id (int): the ID of the pricing family. session (Session): the mysql session. Returns: response.Response: containing the default account pricing tier dict. """ found_default_account_pricing_tier = \ _get_by_account_and_pricing_family_id( account_type, account_id, pricing_family_id, session) if not found_default_account_pricing_tier: return response.create_not_found_response() result = found_default_account_pricing_tier.to_dict() return response.Response(result) def _get_by_account_and_pricing_family_id( account_type, account_id, pricing_family_id, session): """Get a default account pricing tier by pricing family. Args: account_type (string): indicates if vendor or subaccount. account_id (int): indicates if vendor_id or subaccount_id. pricing_family_id (int): the ID of the pricing family. session (Session): the mysql session. Returns: DefaultAccountPricingTier: the found default account pricing tier. """ return session.query( DefaultAccountPricingTier).filter_by( account_type=account_type, account_id=account_id, pricing_family_id=pricing_family_id, active=True).first() @mysql.autosession() def insert_account_with_default_pricing_tier( account_type, account_id, pricing_family_id, data, session): """Set default account pricing tier for the pricing family. Args: account_type (string): indicates if vendor or subaccount. account_id (int): indicates if vendor_id or subaccount_id. pricing_family_id (int): the ID of the pricing family. data (dict): the data from which to create the default account pricing tier. session (Session): the mysql session. Returns: response.Response: containing the created default account pricing tier dict. """ data['account_type'] = account_type data['account_id'] = account_id data['pricing_family_id'] = pricing_family_id data['created_date'] = datetime.datetime.now() data['active'] = True instance = DefaultAccountPricingTier(**data) session.add(instance) session.commit() return response.Response(instance.to_dict()) @mysql.autosession() def soft_delete_default_account_pricing_tier( account_type, account_id, pricing_family_id, data, session): """Soft delete default account pricing tier for the pricing family. Args: account_type (string): indicates if vendor or subaccount. account_id (int): indicates if vendor_id or subaccount_id. pricing_family_id (int): the ID of the pricing family. data (dict): the data from which to update the default account pricing tier. session (Session): the mysql session. Returns: response.Response: containing the soft deleted default account pricing tier dict. """ instance = _get_by_account_and_pricing_family_id( account_type, account_id, pricing_family_id, session) if not instance: return response.create_not_found_response() instance.updated_date = datetime.datetime.now() instance.updated_by = data['created_by'] instance.active = False session.commit() return response.Response(instance.to_dict())