"""add day closes

Revision ID: a1b2c3d4e5f6
Revises: f1a2b3c4d5e6
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql

revision = "a1b2c3d4e5f6"
down_revision = "f1a2b3c4d5e6"
branch_labels = None
depends_on = None

def upgrade():
    op.create_table("day_closes",
        sa.Column("id", postgresql.UUID(as_uuid=True), primary_key=True),
        sa.Column("business_id", postgresql.UUID(as_uuid=True), sa.ForeignKey("businesses.id", ondelete="CASCADE"), nullable=False),
        sa.Column("branch_id", postgresql.UUID(as_uuid=True), sa.ForeignKey("branches.id", ondelete="RESTRICT"), nullable=False),
        sa.Column("period_start", sa.DateTime(timezone=True), nullable=False), sa.Column("period_end", sa.DateTime(timezone=True), nullable=False),
        sa.Column("expected_cash", sa.Numeric(14, 2), nullable=False), sa.Column("counted_cash", sa.Numeric(14, 2), nullable=False), sa.Column("difference", sa.Numeric(14, 2), nullable=False), sa.Column("notes", sa.Text()),
        sa.Column("closed_by", postgresql.UUID(as_uuid=True), sa.ForeignKey("users.id", ondelete="RESTRICT"), nullable=False), sa.Column("closed_at", sa.DateTime(timezone=True), nullable=False),
        sa.UniqueConstraint("business_id", "branch_id", "period_start", "period_end", name="uq_day_close_scope_period"),
        sa.CheckConstraint("period_end > period_start", name="ck_day_close_period_order"))
    op.create_index("ix_day_closes_business_id", "day_closes", ["business_id"])
    op.create_index("ix_day_closes_branch_id", "day_closes", ["branch_id"])

def downgrade():
    op.drop_table("day_closes")
