diff --git a/app/controllers/proveedores.php b/app/controllers/proveedores.php index 1044a54..042c6a9 100644 --- a/app/controllers/proveedores.php +++ b/app/controllers/proveedores.php @@ -1,6 +1,5 @@ $dataList]); } -/** - * GET /IMPORTADORES/proveedores/eliminar - * Llama a DELETE /api/proveedores/:clave y redirige - */ +/** GET /IMPORTADORES/proveedores/eliminar + * Llama a DELETE /api/proveedores/:clave y redirige **/ function eliminar() { $token = getApiToken(); @@ -207,10 +193,8 @@ function crear() include __DIR__ . '/../../views/proveedores/crear.php'; } -/** - * POST /IMPORTADORES/proveedores/guardar - * Procesa el alta de un nuevo proveedor contra la API WinSAAI. - */ +/** POST /IMPORTADORES/proveedores/guardar + * Procesa el alta de un nuevo proveedor contra la API WinSAAI. **/ function guardar() { // 1) Validar sesión diff --git a/app/controllers/solicitud_importacion.php b/app/controllers/solicitud_importacion.php index 809e206..4e9944a 100644 --- a/app/controllers/solicitud_importacion.php +++ b/app/controllers/solicitud_importacion.php @@ -164,7 +164,7 @@ function guardar() $transportista_id = $_POST['transportista_id'] ?? null; $chofer_id = $_POST['chofer_id'] ?? null; $status = isset($_POST['status']) ? 1 : 0; - $proveedor_clave = trim($_POST['proveedor_id'] ?? ''); + $proveedor_clave = trim($_POST['proveedor_id'] ?? ''); if (empty($num_factura) || empty($fecha) || empty($transportista_id) || empty($chofer_id)) { die("❌ Faltan campos obligatorios."); @@ -933,14 +933,80 @@ function generarHTMLPDF($solicitud, $partidas, $nombre_sistema, $siglas, $logo_u ($solicitud['codigo_postal'] ?? '') ); - // Calcular totales - $subtotal = 0; + // Calcular el total sumando todas las partidas + $total = 0; foreach ($partidas as $partida) { - $subtotal += (float)$partida['valor_factura']; + $total += (float)($partida['valor_factura'] ?? 0); + } + + // Función para convertir número a texto + function numeroATexto($numero) { + $unidades = ['', 'uno', 'dos', 'tres', 'cuatro', 'cinco', 'seis', 'siete', 'ocho', 'nueve']; + $decenas = ['', '', 'veinte', 'treinta', 'cuarenta', 'cincuenta', 'sesenta', 'setenta', 'ochenta', 'noventa']; + $especiales = ['diez', 'once', 'doce', 'trece', 'catorce', 'quince', 'dieciséis', 'diecisiete', 'dieciocho', 'diecinueve']; + $centenas = ['', 'ciento', 'doscientos', 'trescientos', 'cuatrocientos', 'quinientos', 'seiscientos', 'setecientos', 'ochocientos', 'novecientos']; + + if ($numero == 0) return 'cero'; + if ($numero == 100) return 'cien'; + if ($numero == 1000) return 'mil'; + if ($numero == 1000000) return 'un millón'; + + $resultado = ''; + + // Millones + if ($numero >= 1000000) { + $millones = intval($numero / 1000000); + if ($millones == 1) { + $resultado .= 'un millón '; + } else { + $resultado .= numeroATexto($millones) . ' millones '; + } + $numero %= 1000000; + } + + // Miles + if ($numero >= 1000) { + $miles = intval($numero / 1000); + if ($miles == 1) { + $resultado .= 'mil '; + } else { + $resultado .= numeroATexto($miles) . ' mil '; + } + $numero %= 1000; + } + + // Centenas + if ($numero >= 100) { + $resultado .= $centenas[intval($numero / 100)] . ' '; + $numero %= 100; + } + + // Decenas y unidades + if ($numero >= 20) { + $resultado .= $decenas[intval($numero / 10)]; + if ($numero % 10 != 0) { + $resultado .= ' y ' . $unidades[$numero % 10]; + } + } elseif ($numero >= 10) { + $resultado .= $especiales[$numero - 10]; + } elseif ($numero > 0) { + $resultado .= $unidades[$numero]; + } + + return trim($resultado); + } + + // Convertir total a texto + $partes = explode('.', number_format($total, 2, '.', '')); + $pesos = (int)$partes[0]; + $centavos = (int)$partes[1]; + + $total_texto = strtoupper(numeroATexto($pesos)) . ' PESOS'; + if ($centavos > 0) { + $total_texto .= ' CON ' . str_pad($centavos, 2, '0', STR_PAD_LEFT) . '/100 M.N.'; + } else { + $total_texto .= ' 00/100 M.N.'; } - $descuento_pct = 0; // Puedes calcularlo si tienes descuentos - $descuento = $subtotal * ($descuento_pct / 100); - $total = $subtotal - $descuento; $html = ' @@ -950,83 +1016,86 @@ function generarHTMLPDF($solicitud, $partidas, $nombre_sistema, $siglas, $logo_u Solicitud de Importación -
-
- -
' . htmlspecialchars($siglas) . '
-
- -
-
' . htmlspecialchars($nombre_sistema) . '
-
' . htmlspecialchars($direccion_completa ?: 'Dirección no disponible') . '
-
RFC: ' . htmlspecialchars($solicitud['importador_rfc'] ?? 'No disponible') . '
-
Tel: ' . htmlspecialchars($solicitud['telefono'] ?? 'No disponible') . '
-
Email: ' . htmlspecialchars($solicitud['correo'] ?? 'No disponible') . '
-
- -
-
Solicitud de Importación
-
No. ' . htmlspecialchars($solicitud['id_solicitud']) . '
-
Régimen simplificado de confianza (RESICO) - 626
-
-
+ + + + + + +
+
+
+
' . htmlspecialchars($nombre_sistema) . '
+
' . htmlspecialchars($direccion_completa ?: 'Dirección no disponible') . '
+
RFC: ' . htmlspecialchars($solicitud['importador_rfc'] ?? 'No disponible') . '
+
Tel: ' . htmlspecialchars($solicitud['telefono'] ?? 'No disponible') . '
+
Email: ' . htmlspecialchars($solicitud['correo'] ?? 'No disponible') . '
+
+
Solicitud de Importación
+
No. ' . htmlspecialchars($solicitud['id_solicitud']) . '
+
+



-
-
-
RAZÓN SOCIAL / ' . htmlspecialchars($solicitud['importador_nombre'] ?? 'No disponible') . '
-
DOMICILIO FISCAL: ' . htmlspecialchars($direccion_completa) . '
-
-
RFC: ' . htmlspecialchars($solicitud['importador_rfc'] ?? 'No disponible') . '
-
TELÉFONO: ' . htmlspecialchars($solicitud['telefono'] ?? 'No disponible') . '
-
-
-
RÉGIMEN FISCAL: 601-General de Ley Personas Morales
-
-
- -
-
FECHA DE EXPEDICIÓN
-
' . $fecha_expedicion . '
-
FECHA DE VENCIMIENTO
-
' . $fecha_vencimiento . '
-
-
+ + + + + +
+
RAZÓN SOCIAL: ' . htmlspecialchars($solicitud['importador_nombre'] ?? 'No disponible') . '
+
DOMICILIO FISCAL: ' . htmlspecialchars($direccion_completa) . '
+
RFC: ' . htmlspecialchars($solicitud['importador_rfc'] ?? 'No disponible') . '
+
TELÉFONO: ' . htmlspecialchars($solicitud['telefono'] ?? 'No disponible') . '
+
RÉGIMEN FISCAL: 601-General de Ley Personas Morales
+
+ + + + + +
FECHA DE EXPEDICIÓN
' . $fecha_expedicion . '
FECHA DE VENCIMIENTO
' . $fecha_vencimiento . '
+
+


- +
- @@ -1041,10 +1110,9 @@ function generarHTMLPDF($solicitud, $partidas, $nombre_sistema, $siglas, $logo_u $html .= ' - - - - + + + '; } @@ -1052,19 +1120,19 @@ function generarHTMLPDF($solicitud, $partidas, $nombre_sistema, $siglas, $logo_u
Producto Unidad de Medida Precio Unitario CantidadDescuento Total
' . htmlspecialchars($partida['descripcion']) . ' ' . htmlspecialchars($partida['unidad_descripcion'] ?? 'Unidad de servicio (E48)') . '$' . number_format($precio_unitario > 0 ? $precio_unitario : $valor_partida, 2) . '' . number_format($cantidad > 0 ? $cantidad : 1, 0) . '' . number_format($descuento_pct, 1) . '%$' . number_format($valor_partida, 2) . '$' . number_format($precio_unitario > 0 ? $precio_unitario : $valor_partida, 2) . '' . number_format($cantidad > 0 ? $cantidad : 1, 0) . '$' . number_format($valor_partida, 2) . '
+ + +
-
+
Total: $' . number_format($total, 2) . '
- - - ';