diff --git a/README.md b/README.md
index d7be4f1..25866fa 100644
--- a/README.md
+++ b/README.md
@@ -10,7 +10,7 @@ Este es un sistema de Punto de Venta (POS) simple y eficiente, diseñado para ge
- **Sistema de descuentos**: Descuentos por porcentaje o monto fijo con motivo
- **Cálculo automático de totales**: Subtotal, descuento y total final en tiempo real
- **Programación de citas**: Fecha y hora integradas en el flujo de ventas
- - **Generación de tickets**: Recibos optimizados para impresión térmica de 58mm
+ - **Generación de tickets**: Recibos optimizados para impresión térmica de 58mm con notas automáticas para anticipos
- **Exportación a CSV**: Historial completo de ventas exportable
- **Gestión de Clientes:** Registro y consulta de clientes, con expediente completo incluyendo historial de servicios y cursos.
- **Gestión de Productos:** Administración completa de servicios y cursos con precios actualizables.
@@ -128,6 +128,15 @@ El sistema está diseñado para ser desplegado fácilmente utilizando Docker y D
---
+## Historial - Versión 1.5.5
+
+### 🎫 **Mejoras en Tickets de Anticipo**
+- **Notas automáticas**: Los tickets de anticipo incluyen automáticamente notas sobre compromiso de tiempo y política de cancelación
+- **Optimización 58mm**: Tickets optimizados específicamente para impresoras térmicas de 58mm con mejor aprovechamiento del espacio
+- **Formato mejorado**: Capitalización automática de títulos de servicios y mejor espaciado visual
+
+---
+
## Historial - Versión 1.5.0
### 🎫 **Reorganización de Interface**
diff --git a/package.json b/package.json
index 672cc77..62e357c 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "ap-pos",
- "version": "1.5.4",
+ "version": "1.5.5",
"main": "app.js",
"scripts": {
"start": "node server.js"
diff --git a/print.js b/print.js
index b4fa34d..54d90f8 100644
--- a/print.js
+++ b/print.js
@@ -40,7 +40,8 @@ function templateTicket(mov, settings) {
}
const montoFormateado = Number(mov.monto).toFixed(2);
- const tipoServicio = mov.subtipo === 'Retoque' ? `Retoque de ${mov.tipo}` : mov.tipo;
+ const tipoServicio = mov.subtipo === 'Retoque' ? `Retoque de ${mov.tipo}` :
+ (mov.tipo.charAt(0).toUpperCase() + mov.tipo.slice(1).toLowerCase());
const lines = [];
lines.push('
');
@@ -144,6 +145,16 @@ function templateTicket(mov, settings) {
}
}
+ // Add special notes for anticipo tickets
+ const isAnticipo = mov.tipo === 'Anticipo' || (mov.concepto && mov.concepto.toLowerCase().includes('anticipo'));
+ if (isAnticipo) {
+ lines.push('
');
+ lines.push('
Al dejar tu anticipo, te agradecemos tu compromiso con nuestro tiempo, de la misma forma en que nosotros respetamos el tuyo.
');
+ lines.push('
');
+ lines.push('
Las cancelaciones con menos de 24 horas no son reembolsables.
');
+ lines.push('
');
+ }
+
if (mov.notas) lines.push(`
Notas: ${esc(mov.notas)}
`);
lines.push('
');
@@ -154,6 +165,9 @@ function templateTicket(mov, settings) {
// MÉTODO DE PAGO DEBAJO DEL TOTAL - ALINEADO A LA IZQUIERDA
if (mov.metodo) lines.push(`
Método: ${esc(mov.metodo)}
`);
+ // PEQUEÑO ESPACIO ANTES DE TE ATENDIÓ
+ if (mov.staff) lines.push('
');
+
// TE ATENDIÓ DEBAJO DEL MÉTODO DE PAGO
if (mov.staff) lines.push(`
Te atendió: ${esc(mov.staff)}
`);
diff --git a/styles.css b/styles.css
index 734cfc7..84b208b 100644
--- a/styles.css
+++ b/styles.css
@@ -870,11 +870,11 @@ button.action-btn {
/* Estilos del Ticket */
.ticket {
- width: 72mm;
- max-width: 72mm;
+ width: 58mm;
+ max-width: 58mm;
background: #fff;
color: #000;
- padding: 8px 2px;
+ padding: 6px 1mm;
box-sizing: border-box;
font: 13px/1.4 ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
border: 1px solid #ccc; /* Visible en pantalla, no en impresión */
@@ -895,12 +895,18 @@ button.action-btn {
.t-small { font-size: 11px; line-height: 1.3; }
.t-service-title { margin-bottom: 6px; font-size: 12px; }
.t-service-detail { margin-bottom: 3px; }
+.t-anticipo-note {
+ word-wrap: break-word;
+ width: 100%;
+ text-align: left;
+ line-height: 1.4;
+}
.t-divider { border-top: 1px dashed #000; margin: 8px 0; }
.t-row { display: flex; justify-content: space-between; margin-bottom: 2px; }
.t-row-label { font-weight: bold; }
.t-service-detail-label { font-weight: bold; }
.t-footer { margin-top: 10px; }
-.t-total-large { font-size: 13px; }
+.t-total-large { font-size: 15px; margin: 6px 0; }
.t-qr-section {
margin-top: 12px;
@@ -962,15 +968,15 @@ button.action-btn {
}
@page {
- size: 72mm auto;
- margin: 0.3cm 0.1cm;
+ size: 58mm auto;
+ margin: 0.1cm 0.05cm;
}
/* Configuración adicional para impresión PDF */
@media print {
body {
- width: 72mm !important;
- max-width: 72mm !important;
+ width: 58mm !important;
+ max-width: 58mm !important;
}
}