v1.0.64 Backend / v1.0.58 Frontend - Renombrar cliente a N° de Pedido
Backend (1.0.64): - Renombrado campo client_name a order_number en modelo Inspection - Actualizado InspectionBase schema con nuevo campo order_number - Comentario descriptivo: "Número de pedido asociado a la inspección" Frontend (1.0.58): - Renombrado client_name a order_number en toda la aplicación - Actualizado label: "Nombre del Cliente" → "Nº de Pedido" - Actualizado placeholder: "Juan Pérez" → "PED-12345" - Actualizado título sección: "Información del Cliente" → "Información del Pedido" - Actualizado filtro de búsqueda para incluir número de pedido - Actualizado texto de búsqueda: "cliente" → "Nº pedido" Database: - Script de migración: rename_client_name_to_order_number.sql - Comando: ALTER TABLE inspections RENAME COLUMN client_name TO order_number Nota: Ejecutar migración SQL antes de usar esta versión
This commit is contained in:
@@ -204,7 +204,7 @@ def send_completed_inspection_to_n8n(inspection, db):
|
|||||||
# No lanzamos excepción para no interrumpir el flujo normal
|
# No lanzamos excepción para no interrumpir el flujo normal
|
||||||
|
|
||||||
|
|
||||||
BACKEND_VERSION = "1.0.63"
|
BACKEND_VERSION = "1.0.64"
|
||||||
app = FastAPI(title="Checklist Inteligente API", version=BACKEND_VERSION)
|
app = FastAPI(title="Checklist Inteligente API", version=BACKEND_VERSION)
|
||||||
|
|
||||||
# S3/MinIO configuration
|
# S3/MinIO configuration
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ class Inspection(Base):
|
|||||||
vehicle_brand = Column(String(50))
|
vehicle_brand = Column(String(50))
|
||||||
vehicle_model = Column(String(100))
|
vehicle_model = Column(String(100))
|
||||||
vehicle_km = Column(Integer)
|
vehicle_km = Column(Integer)
|
||||||
client_name = Column(String(200))
|
order_number = Column(String(200)) # Nº de Pedido
|
||||||
|
|
||||||
# Datos del mecánico
|
# Datos del mecánico
|
||||||
mechanic_employee_code = Column(String(50)) # Código de operario del mecánico
|
mechanic_employee_code = Column(String(50)) # Código de operario del mecánico
|
||||||
|
|||||||
@@ -168,7 +168,7 @@ class InspectionBase(BaseModel):
|
|||||||
vehicle_brand: Optional[str] = None
|
vehicle_brand: Optional[str] = None
|
||||||
vehicle_model: Optional[str] = None
|
vehicle_model: Optional[str] = None
|
||||||
vehicle_km: Optional[int] = None
|
vehicle_km: Optional[int] = None
|
||||||
client_name: Optional[str] = None
|
order_number: Optional[str] = None # Nº de Pedido
|
||||||
mechanic_employee_code: Optional[str] = None
|
mechanic_employee_code: Optional[str] = None
|
||||||
|
|
||||||
class InspectionCreate(InspectionBase):
|
class InspectionCreate(InspectionBase):
|
||||||
|
|||||||
10
backend/migrations/rename_client_name_to_order_number.sql
Normal file
10
backend/migrations/rename_client_name_to_order_number.sql
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
-- Migration: Rename client_name to order_number
|
||||||
|
-- Date: 2025-11-27
|
||||||
|
-- Description: Cambiar campo client_name a order_number en tabla inspections
|
||||||
|
|
||||||
|
-- Renombrar la columna
|
||||||
|
ALTER TABLE inspections
|
||||||
|
RENAME COLUMN client_name TO order_number;
|
||||||
|
|
||||||
|
-- Actualizar comentario de la columna
|
||||||
|
COMMENT ON COLUMN inspections.order_number IS 'Número de pedido asociado a la inspección';
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "checklist-frontend",
|
"name": "checklist-frontend",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "1.0.57",
|
"version": "1.0.58",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
|
|||||||
@@ -2671,13 +2671,13 @@ function InspectionDetailModal({ inspection, user, onClose, onUpdate }) {
|
|||||||
</div>
|
</div>
|
||||||
) : (
|
) : (
|
||||||
<>
|
<>
|
||||||
{/* Client Info */}
|
{/* Order Info */}
|
||||||
<div className="bg-gray-50 rounded-lg p-4 mb-6">
|
<div className="bg-gray-50 rounded-lg p-4 mb-6">
|
||||||
<h3 className="font-semibold text-gray-900 mb-2">Información del Cliente</h3>
|
<h3 className="font-semibold text-gray-900 mb-2">Información del Pedido</h3>
|
||||||
<div className="grid grid-cols-2 gap-4 text-sm">
|
<div className="grid grid-cols-2 gap-4 text-sm">
|
||||||
<div>
|
<div>
|
||||||
<span className="text-gray-600">Cliente:</span>
|
<span className="text-gray-600">Nº de Pedido:</span>
|
||||||
<span className="ml-2 font-medium">{inspection.client_name || 'N/A'}</span>
|
<span className="ml-2 font-medium">{inspection.order_number || 'N/A'}</span>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<span className="text-gray-600">Fecha:</span>
|
<span className="text-gray-600">Fecha:</span>
|
||||||
@@ -3180,7 +3180,7 @@ function InspectionsTab({ inspections, user, onUpdate }) {
|
|||||||
inspection.vehicle_plate?.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
inspection.vehicle_plate?.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
||||||
inspection.vehicle_brand?.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
inspection.vehicle_brand?.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
||||||
inspection.vehicle_model?.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
inspection.vehicle_model?.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
||||||
inspection.client_name?.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
inspection.order_number?.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
||||||
inspection.or_number?.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
inspection.or_number?.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
||||||
inspection.id?.toString().includes(searchTerm)
|
inspection.id?.toString().includes(searchTerm)
|
||||||
|
|
||||||
@@ -3210,7 +3210,7 @@ function InspectionsTab({ inspections, user, onUpdate }) {
|
|||||||
<div className="flex-1 min-w-[300px]">
|
<div className="flex-1 min-w-[300px]">
|
||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="Buscar por placa, marca, modelo, cliente, OR o ID..."
|
placeholder="Buscar por placa, marca, modelo, Nº pedido, OR o ID..."
|
||||||
value={searchTerm}
|
value={searchTerm}
|
||||||
onChange={(e) => setSearchTerm(e.target.value)}
|
onChange={(e) => setSearchTerm(e.target.value)}
|
||||||
className="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent"
|
className="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent"
|
||||||
@@ -3321,7 +3321,7 @@ function InspectionModal({ checklist, user, onClose, onComplete }) {
|
|||||||
vehicle_brand: '',
|
vehicle_brand: '',
|
||||||
vehicle_model: '',
|
vehicle_model: '',
|
||||||
vehicle_km: '',
|
vehicle_km: '',
|
||||||
client_name: '',
|
order_number: '',
|
||||||
or_number: ''
|
or_number: ''
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -3395,7 +3395,7 @@ function InspectionModal({ checklist, user, onClose, onComplete }) {
|
|||||||
vehicle_brand: vehicleData.vehicle_brand || null,
|
vehicle_brand: vehicleData.vehicle_brand || null,
|
||||||
vehicle_model: vehicleData.vehicle_model || null,
|
vehicle_model: vehicleData.vehicle_model || null,
|
||||||
vehicle_km: vehicleData.vehicle_km ? parseInt(vehicleData.vehicle_km) : null,
|
vehicle_km: vehicleData.vehicle_km ? parseInt(vehicleData.vehicle_km) : null,
|
||||||
client_name: vehicleData.client_name || null,
|
order_number: vehicleData.order_number || null,
|
||||||
or_number: vehicleData.or_number || null
|
or_number: vehicleData.or_number || null
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4082,14 +4082,14 @@ function InspectionModal({ checklist, user, onClose, onComplete }) {
|
|||||||
|
|
||||||
<div className="col-span-2">
|
<div className="col-span-2">
|
||||||
<label className="block text-sm font-medium text-gray-700 mb-1">
|
<label className="block text-sm font-medium text-gray-700 mb-1">
|
||||||
Nombre del Cliente
|
Nº de Pedido
|
||||||
</label>
|
</label>
|
||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
value={vehicleData.client_name}
|
value={vehicleData.order_number}
|
||||||
onChange={(e) => setVehicleData({ ...vehicleData, client_name: e.target.value })}
|
onChange={(e) => setVehicleData({ ...vehicleData, order_number: e.target.value })}
|
||||||
className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500"
|
className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500"
|
||||||
placeholder="Juan Pérez"
|
placeholder="PED-12345"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user