diff --git a/client/src/app/quotes/edit.tsx b/client/src/app/quotes/edit.tsx index 9d7cf65..f0ae32f 100644 --- a/client/src/app/quotes/edit.tsx +++ b/client/src/app/quotes/edit.tsx @@ -300,7 +300,7 @@ export const QuoteEdit = () => { diff --git a/client/src/app/quotes/layout.tsx b/client/src/app/quotes/layout.tsx index 9278a25..9e88cbe 100644 --- a/client/src/app/quotes/layout.tsx +++ b/client/src/app/quotes/layout.tsx @@ -14,29 +14,10 @@ export const QuotesLayout = ({ children }: PropsWithChildren) => { - {" "} -
-
- -
- {isEditing && ( -
- -
- )} -
+
); - - return ( - - - - {children} - - - ); }; diff --git a/client/src/app/quotes/list.tsx b/client/src/app/quotes/list.tsx index a0730c3..1fa6815 100644 --- a/client/src/app/quotes/list.tsx +++ b/client/src/app/quotes/list.tsx @@ -2,10 +2,23 @@ import { DataTableProvider } from "@/lib/hooks"; import { Trans } from "react-i18next"; import { QuotesDataTable } from "./components"; -import { Button, Tabs, TabsContent, TabsList, TabsTrigger, Toggle } from "@/ui"; +import { + Button, + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, + DialogTrigger, + Tabs, + TabsContent, + TabsList, + TabsTrigger, + Toggle, +} from "@/ui"; import { useToggle } from "@wojtekmaj/react-hooks"; import { t } from "i18next"; -import { EyeIcon, EyeOffIcon, PlusIcon } from "lucide-react"; +import { EyeIcon, EyeOffIcon, HelpCircleIcon, PlusIcon } from "lucide-react"; import { useNavigate } from "react-router-dom"; export const QuotesList = () => { @@ -33,7 +46,56 @@ export const QuotesList = () => {
- Status +
+ + + + + + + + Ayuda sobre el Estado de Cotizaciones + + El estado de una cotización indica su posición actual en el proceso de negocio. + + +
+

Los estados posibles son:

+
    +
  • + Borrador: La cotización está en proceso de creación o + edición. +
  • +
  • + Preparado: La cotización está lista para ser enviada al + cliente. +
  • +
  • + Entregado: La cotización ha sido enviada al cliente. +
  • +
  • + Aceptado: El cliente ha aprobado la cotización. +
  • +
  • + Rechazado: El cliente no ha aceptado la cotización. +
  • +
  • + Arcivado: La cotización ha sido guardada para referencia + futura y ya no está activa. +
  • +
+

+ Utiliza estos estados para hacer un seguimiento eficiente de tus cotizaciones y + optimizar tu proceso de ventas. El estado Archivado es útil + para mantener un historial de cotizaciones pasadas sin que interfieran con las + cotizaciones activas. +

+
+
+
+
diff --git a/server/src/infrastructure/express/app.ts b/server/src/infrastructure/express/app.ts index 69d5fe1..61ddacd 100644 --- a/server/src/infrastructure/express/app.ts +++ b/server/src/infrastructure/express/app.ts @@ -48,6 +48,14 @@ app.use( // secure apps by setting various HTTP headers app.use(helmet()); +// Middleware global para desactivar la caché en todas las rutas +app.use((req, res, next) => { + res.setHeader("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0"); + res.setHeader("Pragma", "no-cache"); + res.setHeader("Expires", "0"); + next(); // Continúa con la siguiente función middleware o la ruta +}); + // request logging. dev: console | production: file //app.use(morgan('common')); app.use(morgan("dev")); diff --git a/server/src/infrastructure/sequelize/initStructure.ts b/server/src/infrastructure/sequelize/initStructure.ts index 10a8c47..169824d 100644 --- a/server/src/infrastructure/sequelize/initStructure.ts +++ b/server/src/infrastructure/sequelize/initStructure.ts @@ -8,7 +8,7 @@ const createCatalogTableIfNotExists = async (sequelize: Sequelize) => { try { // Consulta para verificar si la tabla existe const checkTableQuery = ` - SELECT COUNT(*) + SELECT COUNT(*) as count FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = 'catalog';`; @@ -56,7 +56,7 @@ const createCatalogTranslationsTableIfNotExists = async (sequelize: Sequelize) = try { // Consulta para verificar si la tabla existe const checkTableQuery = ` - SELECT COUNT(*) + SELECT COUNT(*) as count FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = 'catalog_translations'; @@ -104,7 +104,7 @@ const createVCatalogViewIfNotExists = async (sequelize: Sequelize) => { try { // Consulta para verificar si la tabla existe const checkViewQuery = ` - SELECT COUNT(*) + SELECT COUNT(*) as count FROM information_schema.views WHERE table_schema = DATABASE() AND table_name = 'v_catalog';