feat: add clients nomenclator, order edit/delete/devalidate, invoice types, dashboard redesign
- New clients table with PF/PJ support, fiscal data (CUI, IBAN, eFactura fields) - Full CRUD API for clients with search, sync integration - Order lifecycle: edit header (DRAFT), devalidate (VALIDAT→DRAFT), delete order/invoice - Invoice types: FACTURA (B2B) vs BON_FISCAL (B2C) with different nr formats - OrderCreateView redesigned as multi-step flow (client→vehicle→details) - Autocomplete from catalog_norme/catalog_preturi in OrderLineForm - Dashboard now combines stats + full orders table with filter tabs and search - ClientPicker and VehiclePicker with inline creation capability - Frontend schema aligned with backend (missing columns causing sync errors) - Mobile responsive fixes for OrderDetailView buttons Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
"""add_clients_table_and_client_id_columns
|
||||
|
||||
Revision ID: 6d8b5bd44531
|
||||
Revises: 7df0fb1c1e6f
|
||||
Create Date: 2026-03-14 10:00:00.000000
|
||||
|
||||
"""
|
||||
from typing import Sequence, Union
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision: str = '6d8b5bd44531'
|
||||
down_revision: Union[str, None] = '7df0fb1c1e6f'
|
||||
branch_labels: Union[str, Sequence[str], None] = None
|
||||
depends_on: Union[str, Sequence[str], None] = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
# Create clients table
|
||||
op.create_table(
|
||||
'clients',
|
||||
sa.Column('id', sa.String(length=36), primary_key=True),
|
||||
sa.Column('tenant_id', sa.String(length=36), nullable=False, index=True),
|
||||
sa.Column('created_at', sa.Text(), nullable=True),
|
||||
sa.Column('updated_at', sa.Text(), nullable=True),
|
||||
sa.Column('tip_persoana', sa.String(length=2), nullable=True),
|
||||
sa.Column('denumire', sa.String(length=200), nullable=True),
|
||||
sa.Column('nume', sa.String(length=100), nullable=True),
|
||||
sa.Column('prenume', sa.String(length=100), nullable=True),
|
||||
sa.Column('cod_fiscal', sa.String(length=20), nullable=True),
|
||||
sa.Column('reg_com', sa.String(length=30), nullable=True),
|
||||
sa.Column('telefon', sa.String(length=20), nullable=True),
|
||||
sa.Column('email', sa.String(length=200), nullable=True),
|
||||
sa.Column('adresa', sa.Text(), nullable=True),
|
||||
sa.Column('judet', sa.String(length=50), nullable=True),
|
||||
sa.Column('oras', sa.String(length=100), nullable=True),
|
||||
sa.Column('cod_postal', sa.String(length=10), nullable=True),
|
||||
sa.Column('tara', sa.String(length=2), nullable=True),
|
||||
sa.Column('cont_iban', sa.String(length=34), nullable=True),
|
||||
sa.Column('banca', sa.String(length=100), nullable=True),
|
||||
sa.Column('activ', sa.Integer(), server_default='1', nullable=False),
|
||||
sa.Column('oracle_id', sa.Integer(), nullable=True),
|
||||
)
|
||||
|
||||
# Add client_id to vehicles
|
||||
with op.batch_alter_table('vehicles') as batch_op:
|
||||
batch_op.add_column(sa.Column('client_id', sa.String(length=36), nullable=True))
|
||||
|
||||
# Add client_id to orders
|
||||
with op.batch_alter_table('orders') as batch_op:
|
||||
batch_op.add_column(sa.Column('client_id', sa.String(length=36), nullable=True))
|
||||
|
||||
# Add client_id and tip_document to invoices
|
||||
with op.batch_alter_table('invoices') as batch_op:
|
||||
batch_op.add_column(sa.Column('client_id', sa.String(length=36), nullable=True))
|
||||
batch_op.add_column(sa.Column('tip_document', sa.String(length=20), server_default='FACTURA', nullable=True))
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
with op.batch_alter_table('invoices') as batch_op:
|
||||
batch_op.drop_column('tip_document')
|
||||
batch_op.drop_column('client_id')
|
||||
|
||||
with op.batch_alter_table('orders') as batch_op:
|
||||
batch_op.drop_column('client_id')
|
||||
|
||||
with op.batch_alter_table('vehicles') as batch_op:
|
||||
batch_op.drop_column('client_id')
|
||||
|
||||
op.drop_table('clients')
|
||||
Reference in New Issue
Block a user