""" This module contains the WorksheetTaxCorrectionVAT model. The model represents tax corrections. """ from abacus_common_logic.connectors.database import db from abacus_common_logic.models.base import BaseModel from abacus_common_logic.utils.users import get_flask_user_id from sqlalchemy import Enum, update from payment.constants.constants import VAT_CATEGORIES class WorksheetTaxCorrectionVAT(BaseModel): """Worksheet Tax Correction VAT.""" __tablename__ = 'worksheet_tax_correction_vat' worksheet_tax_correction_vat_id = db.Column(db.Integer, primary_key=True) payable_detail_type_id = db.Column(db.Integer, nullable=False) contract_id = db.Column(db.Integer, nullable=False) account_id = db.Column(db.Integer, nullable=False) correction_statement_period_id = db.Column(db.Integer, nullable=False) vat_category = db.Column( Enum(*VAT_CATEGORIES, name='vat_category', create_type=False) ) base_amount_payee_currency = db.Column(db.Numeric(20, 2), nullable=False) payee_currency_code = db.Column(db.String(3), nullable=False) vat_currency_code = db.Column(db.String(3), nullable=False) vat_rate = db.Column(db.Numeric(20, 2), nullable=False) vat_amount_payee_currency = db.Column(db.Numeric(20, 2), nullable=False) vat_amount_vat_currency = db.Column(db.Numeric(20, 2), nullable=False) net_amount_payee_currency = db.Column(db.Numeric(20, 2), nullable=False) wht_rate = db.Column(db.Numeric(20, 2), nullable=True) wht_amount_payee_currency = db.Column(db.Numeric(20, 2), nullable=True) wht_amount_vat_currency = db.Column(db.Numeric(20, 2), nullable=True) note = db.Column(db.String(255), nullable=True) deleted_at = db.Column(db.DateTime) deleted_by = db.Column(db.String(255)) @classmethod def bulk_create(cls, instances: list) -> None: """Bulk create instances using add_all.""" db.session.add_all(instances) db.session.commit() @classmethod def soft_delete_by_ids(cls, ids: list) -> None: """Soft delete by worksheet_tax_correction_vat_ids.""" db.session.execute( update(cls) .where( cls.worksheet_tax_correction_vat_id.in_(ids), cls.deleted_at.is_(None), ) .values( deleted_at=cls.current_timestamp(), deleted_by=get_flask_user_id(), ) .execution_options(synchronize_session=False) ) db.session.commit()