"""add receivables debt book

Revision ID: d4e5f6a7b8c9
Revises: c2d3e4f5a6b7
"""
from alembic import op
import sqlalchemy as sa
revision='d4e5f6a7b8c9'; down_revision='c2d3e4f5a6b7'; branch_labels=None; depends_on=None
def upgrade():
 op.create_table('receivables',sa.Column('id',sa.UUID(),primary_key=True),sa.Column('business_id',sa.UUID(),nullable=False),sa.Column('customer_id',sa.UUID(),nullable=False),sa.Column('sale_id',sa.UUID()),sa.Column('original_amount',sa.Numeric(14,2),nullable=False),sa.Column('amount_paid',sa.Numeric(14,2),nullable=False),sa.Column('balance',sa.Numeric(14,2),nullable=False),sa.Column('due_date',sa.Date()),sa.Column('status',sa.String(20),nullable=False),sa.Column('created_at',sa.DateTime(timezone=True),nullable=False),sa.Column('updated_at',sa.DateTime(timezone=True),nullable=False),sa.CheckConstraint('original_amount >= 0 AND amount_paid >= 0 AND balance >= 0',name='ck_receivable_nonnegative'),sa.ForeignKeyConstraint(['business_id'],['businesses.id'],ondelete='CASCADE'),sa.ForeignKeyConstraint(['customer_id'],['customers.id'],ondelete='RESTRICT'),sa.ForeignKeyConstraint(['sale_id'],['sales.id'],ondelete='RESTRICT'),sa.UniqueConstraint('sale_id',name='uq_receivable_sale'))
 op.create_index('ix_receivables_business_id','receivables',['business_id']); op.create_index('ix_receivables_customer_id','receivables',['customer_id'])
 op.create_table('receivable_collections',sa.Column('id',sa.UUID(),primary_key=True),sa.Column('business_id',sa.UUID(),nullable=False),sa.Column('receivable_id',sa.UUID(),nullable=False),sa.Column('customer_id',sa.UUID(),nullable=False),sa.Column('amount',sa.Numeric(14,2),nullable=False),sa.Column('payment_method',sa.String(20),nullable=False),sa.Column('reference',sa.String(150)),sa.Column('collected_by',sa.UUID(),nullable=False),sa.Column('collected_at',sa.DateTime(timezone=True),nullable=False),sa.CheckConstraint('amount > 0',name='ck_receivable_collection_positive'),sa.ForeignKeyConstraint(['business_id'],['businesses.id'],ondelete='CASCADE'),sa.ForeignKeyConstraint(['receivable_id'],['receivables.id'],ondelete='RESTRICT'),sa.ForeignKeyConstraint(['customer_id'],['customers.id'],ondelete='RESTRICT'),sa.ForeignKeyConstraint(['collected_by'],['users.id'],ondelete='RESTRICT'))
 op.create_index('ix_receivable_collections_business_id','receivable_collections',['business_id']); op.create_index('ix_receivable_collections_receivable_id','receivable_collections',['receivable_id']); op.create_index('ix_receivable_collections_customer_id','receivable_collections',['customer_id'])
def downgrade():
 op.drop_table('receivable_collections'); op.drop_table('receivables')
