updates
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
20
Backend/alembic/versions/add_borica_payment_method.py
Normal file
20
Backend/alembic/versions/add_borica_payment_method.py
Normal file
@@ -0,0 +1,20 @@
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
from sqlalchemy.dialects import mysql
|
||||
revision = 'add_borica_payment_method'
|
||||
down_revision = 'd9aff6c5f0d4'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
def upgrade() -> None:
|
||||
bind = op.get_bind()
|
||||
if bind.dialect.name == 'mysql':
|
||||
op.execute("ALTER TABLE payments MODIFY COLUMN payment_method ENUM('cash', 'credit_card', 'debit_card', 'bank_transfer', 'e_wallet', 'stripe', 'paypal', 'borica') NOT NULL")
|
||||
else:
|
||||
pass
|
||||
|
||||
def downgrade() -> None:
|
||||
bind = op.get_bind()
|
||||
if bind.dialect.name == 'mysql':
|
||||
op.execute("ALTER TABLE payments MODIFY COLUMN payment_method ENUM('cash', 'credit_card', 'debit_card', 'bank_transfer', 'e_wallet', 'stripe', 'paypal') NOT NULL")
|
||||
|
||||
193
Backend/alembic/versions/add_group_booking_tables.py
Normal file
193
Backend/alembic/versions/add_group_booking_tables.py
Normal file
@@ -0,0 +1,193 @@
|
||||
"""add group booking tables
|
||||
|
||||
Revision ID: add_group_booking_001
|
||||
Revises: add_guest_profile_crm
|
||||
Create Date: 2024-01-15 00:00:00.000000
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
from sqlalchemy.dialects import mysql
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = 'add_group_booking_001'
|
||||
down_revision = 'add_guest_profile_crm'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
# Create group_bookings table
|
||||
op.create_table(
|
||||
'group_bookings',
|
||||
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
|
||||
sa.Column('group_booking_number', sa.String(length=50), nullable=False),
|
||||
sa.Column('coordinator_id', sa.Integer(), nullable=False),
|
||||
sa.Column('coordinator_name', sa.String(length=100), nullable=False),
|
||||
sa.Column('coordinator_email', sa.String(length=100), nullable=False),
|
||||
sa.Column('coordinator_phone', sa.String(length=20), nullable=True),
|
||||
sa.Column('group_name', sa.String(length=200), nullable=True),
|
||||
sa.Column('group_type', sa.String(length=50), nullable=True),
|
||||
sa.Column('total_rooms', sa.Integer(), nullable=False, server_default='0'),
|
||||
sa.Column('total_guests', sa.Integer(), nullable=False, server_default='0'),
|
||||
sa.Column('check_in_date', sa.DateTime(), nullable=False),
|
||||
sa.Column('check_out_date', sa.DateTime(), nullable=False),
|
||||
sa.Column('base_rate_per_room', sa.Numeric(precision=10, scale=2), nullable=False),
|
||||
sa.Column('group_discount_percentage', sa.Numeric(precision=5, scale=2), nullable=True, server_default='0'),
|
||||
sa.Column('group_discount_amount', sa.Numeric(precision=10, scale=2), nullable=True, server_default='0'),
|
||||
sa.Column('original_total_price', sa.Numeric(precision=10, scale=2), nullable=False),
|
||||
sa.Column('discount_amount', sa.Numeric(precision=10, scale=2), nullable=True, server_default='0'),
|
||||
sa.Column('total_price', sa.Numeric(precision=10, scale=2), nullable=False),
|
||||
sa.Column('payment_option', sa.Enum('coordinator_pays_all', 'individual_payments', 'split_payment', name='paymentoption'), nullable=False, server_default='coordinator_pays_all'),
|
||||
sa.Column('deposit_required', sa.Boolean(), nullable=False, server_default='0'),
|
||||
sa.Column('deposit_percentage', sa.Integer(), nullable=True),
|
||||
sa.Column('deposit_amount', sa.Numeric(precision=10, scale=2), nullable=True),
|
||||
sa.Column('amount_paid', sa.Numeric(precision=10, scale=2), nullable=False, server_default='0'),
|
||||
sa.Column('balance_due', sa.Numeric(precision=10, scale=2), nullable=False),
|
||||
sa.Column('status', sa.Enum('draft', 'pending', 'confirmed', 'partially_confirmed', 'checked_in', 'checked_out', 'cancelled', name='groupbookingstatus'), nullable=False, server_default='draft'),
|
||||
sa.Column('cancellation_policy', sa.Text(), nullable=True),
|
||||
sa.Column('cancellation_deadline', sa.DateTime(), nullable=True),
|
||||
sa.Column('cancellation_penalty_percentage', sa.Numeric(precision=5, scale=2), nullable=True, server_default='0'),
|
||||
sa.Column('special_requests', sa.Text(), nullable=True),
|
||||
sa.Column('notes', sa.Text(), nullable=True),
|
||||
sa.Column('contract_terms', sa.Text(), nullable=True),
|
||||
sa.Column('created_at', sa.DateTime(), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(), nullable=False),
|
||||
sa.Column('confirmed_at', sa.DateTime(), nullable=True),
|
||||
sa.Column('cancelled_at', sa.DateTime(), nullable=True),
|
||||
sa.ForeignKeyConstraint(['coordinator_id'], ['users.id'], ondelete='CASCADE'),
|
||||
sa.PrimaryKeyConstraint('id'),
|
||||
sa.UniqueConstraint('group_booking_number')
|
||||
)
|
||||
op.create_index(op.f('ix_group_bookings_id'), 'group_bookings', ['id'], unique=False)
|
||||
op.create_index(op.f('ix_group_bookings_group_booking_number'), 'group_bookings', ['group_booking_number'], unique=True)
|
||||
op.create_index(op.f('ix_group_bookings_coordinator_id'), 'group_bookings', ['coordinator_id'], unique=False)
|
||||
op.create_index(op.f('ix_group_bookings_status'), 'group_bookings', ['status'], unique=False)
|
||||
op.create_index(op.f('ix_group_bookings_check_in_date'), 'group_bookings', ['check_in_date'], unique=False)
|
||||
op.create_index(op.f('ix_group_bookings_check_out_date'), 'group_bookings', ['check_out_date'], unique=False)
|
||||
|
||||
# Create group_room_blocks table
|
||||
op.create_table(
|
||||
'group_room_blocks',
|
||||
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
|
||||
sa.Column('group_booking_id', sa.Integer(), nullable=False),
|
||||
sa.Column('room_type_id', sa.Integer(), nullable=False),
|
||||
sa.Column('rooms_blocked', sa.Integer(), nullable=False, server_default='0'),
|
||||
sa.Column('rooms_confirmed', sa.Integer(), nullable=False, server_default='0'),
|
||||
sa.Column('rooms_available', sa.Integer(), nullable=False, server_default='0'),
|
||||
sa.Column('rate_per_room', sa.Numeric(precision=10, scale=2), nullable=False),
|
||||
sa.Column('total_block_price', sa.Numeric(precision=10, scale=2), nullable=False),
|
||||
sa.Column('is_active', sa.Boolean(), nullable=False, server_default='1'),
|
||||
sa.Column('block_released_at', sa.DateTime(), nullable=True),
|
||||
sa.Column('created_at', sa.DateTime(), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(), nullable=False),
|
||||
sa.ForeignKeyConstraint(['group_booking_id'], ['group_bookings.id'], ondelete='CASCADE'),
|
||||
sa.ForeignKeyConstraint(['room_type_id'], ['room_types.id'], ondelete='CASCADE'),
|
||||
sa.PrimaryKeyConstraint('id')
|
||||
)
|
||||
op.create_index(op.f('ix_group_room_blocks_id'), 'group_room_blocks', ['id'], unique=False)
|
||||
op.create_index(op.f('ix_group_room_blocks_group_booking_id'), 'group_room_blocks', ['group_booking_id'], unique=False)
|
||||
op.create_index(op.f('ix_group_room_blocks_room_type_id'), 'group_room_blocks', ['room_type_id'], unique=False)
|
||||
|
||||
# Create group_booking_members table
|
||||
op.create_table(
|
||||
'group_booking_members',
|
||||
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
|
||||
sa.Column('group_booking_id', sa.Integer(), nullable=False),
|
||||
sa.Column('full_name', sa.String(length=100), nullable=False),
|
||||
sa.Column('email', sa.String(length=100), nullable=True),
|
||||
sa.Column('phone', sa.String(length=20), nullable=True),
|
||||
sa.Column('user_id', sa.Integer(), nullable=True),
|
||||
sa.Column('room_block_id', sa.Integer(), nullable=True),
|
||||
sa.Column('assigned_room_id', sa.Integer(), nullable=True),
|
||||
sa.Column('individual_booking_id', sa.Integer(), nullable=True),
|
||||
sa.Column('special_requests', sa.Text(), nullable=True),
|
||||
sa.Column('preferences', sa.JSON(), nullable=True),
|
||||
sa.Column('individual_amount', sa.Numeric(precision=10, scale=2), nullable=True),
|
||||
sa.Column('individual_paid', sa.Numeric(precision=10, scale=2), nullable=True, server_default='0'),
|
||||
sa.Column('individual_balance', sa.Numeric(precision=10, scale=2), nullable=True, server_default='0'),
|
||||
sa.Column('is_checked_in', sa.Boolean(), nullable=False, server_default='0'),
|
||||
sa.Column('checked_in_at', sa.DateTime(), nullable=True),
|
||||
sa.Column('is_checked_out', sa.Boolean(), nullable=False, server_default='0'),
|
||||
sa.Column('checked_out_at', sa.DateTime(), nullable=True),
|
||||
sa.Column('created_at', sa.DateTime(), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(), nullable=False),
|
||||
sa.ForeignKeyConstraint(['group_booking_id'], ['group_bookings.id'], ondelete='CASCADE'),
|
||||
sa.ForeignKeyConstraint(['user_id'], ['users.id'], ondelete='SET NULL'),
|
||||
sa.ForeignKeyConstraint(['room_block_id'], ['group_room_blocks.id'], ondelete='SET NULL'),
|
||||
sa.ForeignKeyConstraint(['assigned_room_id'], ['rooms.id'], ondelete='SET NULL'),
|
||||
sa.ForeignKeyConstraint(['individual_booking_id'], ['bookings.id'], ondelete='SET NULL'),
|
||||
sa.PrimaryKeyConstraint('id')
|
||||
)
|
||||
op.create_index(op.f('ix_group_booking_members_id'), 'group_booking_members', ['id'], unique=False)
|
||||
op.create_index(op.f('ix_group_booking_members_group_booking_id'), 'group_booking_members', ['group_booking_id'], unique=False)
|
||||
op.create_index(op.f('ix_group_booking_members_user_id'), 'group_booking_members', ['user_id'], unique=False)
|
||||
|
||||
# Create group_payments table
|
||||
op.create_table(
|
||||
'group_payments',
|
||||
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
|
||||
sa.Column('group_booking_id', sa.Integer(), nullable=False),
|
||||
sa.Column('amount', sa.Numeric(precision=10, scale=2), nullable=False),
|
||||
sa.Column('payment_method', sa.String(length=50), nullable=False),
|
||||
sa.Column('payment_type', sa.String(length=50), nullable=False, server_default='deposit'),
|
||||
sa.Column('payment_status', sa.String(length=50), nullable=False, server_default='pending'),
|
||||
sa.Column('transaction_id', sa.String(length=100), nullable=True),
|
||||
sa.Column('payment_date', sa.DateTime(), nullable=True),
|
||||
sa.Column('notes', sa.Text(), nullable=True),
|
||||
sa.Column('paid_by_member_id', sa.Integer(), nullable=True),
|
||||
sa.Column('paid_by_user_id', sa.Integer(), nullable=True),
|
||||
sa.Column('created_at', sa.DateTime(), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(), nullable=False),
|
||||
sa.ForeignKeyConstraint(['group_booking_id'], ['group_bookings.id'], ondelete='CASCADE'),
|
||||
sa.ForeignKeyConstraint(['paid_by_member_id'], ['group_booking_members.id'], ondelete='SET NULL'),
|
||||
sa.ForeignKeyConstraint(['paid_by_user_id'], ['users.id'], ondelete='SET NULL'),
|
||||
sa.PrimaryKeyConstraint('id')
|
||||
)
|
||||
op.create_index(op.f('ix_group_payments_id'), 'group_payments', ['id'], unique=False)
|
||||
op.create_index(op.f('ix_group_payments_group_booking_id'), 'group_payments', ['group_booking_id'], unique=False)
|
||||
op.create_index(op.f('ix_group_payments_payment_status'), 'group_payments', ['payment_status'], unique=False)
|
||||
|
||||
# Add group_booking_id to bookings table
|
||||
op.add_column('bookings', sa.Column('group_booking_id', sa.Integer(), nullable=True))
|
||||
op.create_foreign_key('fk_bookings_group_booking', 'bookings', 'group_bookings', ['group_booking_id'], ['id'], ondelete='SET NULL')
|
||||
op.create_index(op.f('ix_bookings_group_booking_id'), 'bookings', ['group_booking_id'], unique=False)
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
# Drop foreign key and column from bookings table
|
||||
op.drop_index(op.f('ix_bookings_group_booking_id'), table_name='bookings')
|
||||
op.drop_constraint('fk_bookings_group_booking', 'bookings', type_='foreignkey')
|
||||
op.drop_column('bookings', 'group_booking_id')
|
||||
|
||||
# Drop group_payments table
|
||||
op.drop_index(op.f('ix_group_payments_payment_status'), table_name='group_payments')
|
||||
op.drop_index(op.f('ix_group_payments_group_booking_id'), table_name='group_payments')
|
||||
op.drop_index(op.f('ix_group_payments_id'), table_name='group_payments')
|
||||
op.drop_table('group_payments')
|
||||
|
||||
# Drop group_booking_members table
|
||||
op.drop_index(op.f('ix_group_booking_members_user_id'), table_name='group_booking_members')
|
||||
op.drop_index(op.f('ix_group_booking_members_group_booking_id'), table_name='group_booking_members')
|
||||
op.drop_index(op.f('ix_group_booking_members_id'), table_name='group_booking_members')
|
||||
op.drop_table('group_booking_members')
|
||||
|
||||
# Drop group_room_blocks table
|
||||
op.drop_index(op.f('ix_group_room_blocks_room_type_id'), table_name='group_room_blocks')
|
||||
op.drop_index(op.f('ix_group_room_blocks_group_booking_id'), table_name='group_room_blocks')
|
||||
op.drop_index(op.f('ix_group_room_blocks_id'), table_name='group_room_blocks')
|
||||
op.drop_table('group_room_blocks')
|
||||
|
||||
# Drop group_bookings table
|
||||
op.drop_index(op.f('ix_group_bookings_check_out_date'), table_name='group_bookings')
|
||||
op.drop_index(op.f('ix_group_bookings_check_in_date'), table_name='group_bookings')
|
||||
op.drop_index(op.f('ix_group_bookings_status'), table_name='group_bookings')
|
||||
op.drop_index(op.f('ix_group_bookings_coordinator_id'), table_name='group_bookings')
|
||||
op.drop_index(op.f('ix_group_bookings_group_booking_number'), table_name='group_bookings')
|
||||
op.drop_index(op.f('ix_group_bookings_id'), table_name='group_bookings')
|
||||
op.drop_table('group_bookings')
|
||||
|
||||
# Drop enums
|
||||
op.execute("DROP TYPE IF EXISTS paymentoption")
|
||||
op.execute("DROP TYPE IF EXISTS groupbookingstatus")
|
||||
|
||||
30
Backend/alembic/versions/add_rate_plan_id_to_bookings.py
Normal file
30
Backend/alembic/versions/add_rate_plan_id_to_bookings.py
Normal file
@@ -0,0 +1,30 @@
|
||||
"""add rate_plan_id to bookings
|
||||
|
||||
Revision ID: add_rate_plan_id_001
|
||||
Revises: add_group_booking_001
|
||||
Create Date: 2024-01-20 00:00:00.000000
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = 'add_rate_plan_id_001'
|
||||
down_revision = ('add_group_booking_001', 'add_loyalty_tables_001')
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
# Add rate_plan_id column to bookings table
|
||||
op.add_column('bookings', sa.Column('rate_plan_id', sa.Integer(), nullable=True))
|
||||
op.create_foreign_key('fk_bookings_rate_plan', 'bookings', 'rate_plans', ['rate_plan_id'], ['id'], ondelete='SET NULL')
|
||||
op.create_index(op.f('ix_bookings_rate_plan_id'), 'bookings', ['rate_plan_id'], unique=False)
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
# Drop foreign key, index, and column from bookings table
|
||||
op.drop_index(op.f('ix_bookings_rate_plan_id'), table_name='bookings')
|
||||
op.drop_constraint('fk_bookings_rate_plan', 'bookings', type_='foreignkey')
|
||||
op.drop_column('bookings', 'rate_plan_id')
|
||||
|
||||
Reference in New Issue
Block a user