barker/barker/alembic/versions/5967e6603c3e_tax_regimes.py

201 lines
6.7 KiB
Python

"""tax regimes
Revision ID: 5967e6603c3e
Revises: f135019a4ebf
Create Date: 2023-02-22 03:55:58.764092
"""
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
from sqlalchemy.dialects.postgresql import ENUM
# revision identifiers, used by Alembic.
revision = "5967e6603c3e"
down_revision = "f135019a4ebf"
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
create_regime_table()
create_bills_table()
update_taxes()
op.drop_index("ix_vouchers_date", table_name="vouchers")
op.drop_constraint("uq_vouchers_bill_id", "vouchers", type_="unique")
op.drop_column("vouchers", "bill_id")
p = sa.table(
"permissions",
sa.column("id", postgresql.UUID(as_uuid=True)),
sa.column("name", sa.Unicode(length=255)),
)
op.execute(p.insert().values(id="28e2194d-b830-4282-b8c5-3b8522b48894", name="Regimes"))
# ### end Alembic commands ###
def create_regime_table():
op.create_table(
"regimes",
sa.Column("id", sa.Integer(), nullable=False),
sa.Column("name", sa.Unicode(length=255), nullable=False),
sa.Column("header", sa.Unicode(length=255), nullable=False),
sa.Column("prefix", sa.Unicode(length=255), nullable=False),
sa.Column("is_fixture", sa.Boolean(), nullable=False),
sa.PrimaryKeyConstraint("id", name=op.f("pk_regimes")),
sa.UniqueConstraint("name", name=op.f("uq_regimes_name")),
sa.UniqueConstraint("prefix", name=op.f("uq_regimes_prefix")),
)
re = sa.table(
"regimes",
sa.column("id", sa.Integer()),
sa.column("name", sa.Unicode(length=255)),
sa.column("header", sa.Unicode(length=255)),
sa.column("prefix", sa.Unicode(length=255)),
sa.column("is_fixture", sa.Boolean()),
)
op.execute(
re.insert().values(
id=0,
name="KOT",
header="",
prefix="K",
is_fixture=True,
)
)
op.execute(
re.insert().values(
id=1,
name="Combined",
header="",
prefix="INV",
is_fixture=True,
)
)
op.execute(
re.insert().values(
id=2,
name="No Charge",
header="NO CHARGE - THIS IS NOT A BILL - DON'T PAY",
prefix="NC",
is_fixture=True,
)
)
op.execute(
re.insert().values(
id=4,
name="Staff",
header=" STAFF CONSUMPTION -- THIS IS NOT A BILL ",
prefix="ST",
is_fixture=True,
)
)
op.execute(
re.insert().values(
id=8,
name="Void",
header="",
prefix="V",
is_fixture=True,
)
)
op.execute(
re.insert().values(
id=16,
name="Goods and Service Tax",
header=" GSTIN: XXXXXXXXXXXXXXX \n Retail Invoice ",
prefix="GST",
is_fixture=False,
)
)
op.execute(
re.insert().values(
id=32,
name="Value Added Tax",
header=" TIN: XXXXXXXXXXX \n Retail Invoice ",
prefix="VAT",
is_fixture=False,
)
)
def create_bills_table():
voucher_type = ENUM("KOT", "REGULAR_BILL", "NO_CHARGE", "STAFF", "VOID", name="voucher_type", create_type=False)
op.create_table(
"bills",
sa.Column("id", sa.UUID(), server_default=sa.text("gen_random_uuid()"), nullable=False),
sa.Column("regime_id", sa.Integer(), nullable=False),
sa.Column("voucher_id", sa.UUID(), nullable=False),
sa.Column("is_valid", sa.Boolean(), nullable=False),
sa.Column("bill_number", sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(["regime_id"], ["regimes.id"], name=op.f("fk_bills_regime_id_regimes")),
sa.ForeignKeyConstraint(["voucher_id"], ["vouchers.id"], name=op.f("fk_bills_voucher_id_vouchers")),
sa.PrimaryKeyConstraint("id", name=op.f("pk_bills")),
sa.UniqueConstraint("regime_id", "bill_number", name=op.f("uq_bills_regime_id")),
sa.UniqueConstraint("voucher_id", "regime_id", name=op.f("uq_bills_voucher_id")),
)
b = sa.table(
"bills",
sa.column("regime_id", sa.Integer()),
sa.column("voucher_id", sa.UUID()),
sa.column("is_valid", sa.Boolean()),
sa.column("bill_number", sa.Integer()),
)
v = sa.table(
"vouchers",
sa.column("id", sa.UUID()),
sa.column("voucher_type", voucher_type),
sa.column("bill_id", sa.Integer()),
sa.column("kot_id", sa.Integer()),
)
op.execute(
b.insert().from_select(
[b.c.regime_id, b.c.voucher_id, b.c.is_valid, b.c.bill_number],
sa.select(
sa.case(
(v.c.voucher_type == "KOT", sa.text("0")),
(v.c.voucher_type == "REGULAR_BILL", sa.text("1")),
(v.c.voucher_type == "NO_CHARGE", sa.text("2")),
(v.c.voucher_type == "STAFF", sa.text("4")),
(v.c.voucher_type == "VOID", sa.text("8")),
),
v.c.id,
sa.text("True"),
sa.case((v.c.bill_id == None, v.c.kot_id), else_=v.c.bill_id), # noqa: E711
).where(
v.c.bill_id != None # noqa: E711
),
)
)
def update_taxes():
op.add_column("taxes", sa.Column("regime_id", sa.Integer(), nullable=True))
ta = sa.table(
"taxes",
sa.column("regime_id", sa.Integer()),
)
op.execute(ta.update().values(regime_id=1))
op.alter_column("taxes", "regime_id", existing_type=sa.Integer(), nullable=False)
op.create_foreign_key(op.f("fk_taxes_regime_id_regimes"), "taxes", "regimes", ["regime_id"], ["id"])
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.add_column("vouchers", sa.Column("bill_id", sa.INTEGER(), autoincrement=False, nullable=True))
op.add_column("vouchers", sa.Column("date", postgresql.TIMESTAMP(), autoincrement=False, nullable=False))
op.drop_index(op.f("ix_vouchers_creation_date"), table_name="vouchers")
op.create_unique_constraint("uq_vouchers_bill_id", "vouchers", ["bill_id", "voucher_type"])
op.create_index("ix_vouchers_date", "vouchers", ["date"], unique=False)
op.drop_constraint(op.f("fk_taxes_regime_id_regimes"), "taxes", type_="foreignkey")
op.drop_column("taxes", "regime_id")
op.drop_index(op.f("ix_bills_date"), table_name="bills")
op.drop_table("bills")
op.drop_table("regimes")
# ### end Alembic commands ###