From ada8a7548c06a8b2fc57c21ccd47d137aebfa43b Mon Sep 17 00:00:00 2001 From: nickpons666 Date: Sat, 21 Feb 2026 22:49:20 -0600 Subject: [PATCH] =?UTF-8?q?Fix:=20Guardar=20concepto=20en=20finanzas=20y?= =?UTF-8?q?=20acci=C3=B3n=20save=5Fall=5Fconcept=5Fpayments?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Improved error handling in CollectionConcept::update - Added save_all_concept_payments action for concept_view page - Added logs directory to Dockerfile --- dashboard.php | 71 ++++++++++++++++++++++++++++++++---- docker/Dockerfile | 2 + models/CollectionConcept.php | 36 ++++++++++-------- 3 files changed, 87 insertions(+), 22 deletions(-) diff --git a/dashboard.php b/dashboard.php index 60dc92b..80dded7 100755 --- a/dashboard.php +++ b/dashboard.php @@ -466,13 +466,18 @@ switch ($page) { exit; } - $result = CollectionConcept::save($input, $userId); - if ($result) { - Auth::logActivity('save_concept', 'Concepto ' . ($input['id'] ? 'editado' : 'creado') . ': ' . $input['name']); - echo json_encode(['success' => true, 'message' => 'Concepto guardado exitosamente', 'id' => $result]); - } - else { - echo json_encode(['success' => false, 'message' => 'Error al guardar concepto']); + try { + $result = CollectionConcept::save($input, $userId); + if ($result !== false) { + Auth::logActivity('save_concept', 'Concepto ' . ($input['id'] ? 'editado' : 'creado') . ': ' . $input['name']); + echo json_encode(['success' => true, 'message' => 'Concepto guardado exitosamente', 'id' => $result]); + } + else { + echo json_encode(['success' => false, 'message' => 'Error al guardar concepto: No se realizaron cambios']); + } + } catch (Exception $e) { + error_log("Error save_concept: " . $e->getMessage()); + echo json_encode(['success' => false, 'message' => 'Error al guardar concepto: ' . $e->getMessage()]); } } else { @@ -1427,6 +1432,58 @@ switch ($page) { } exit; + case 'save_all_concept_payments': + if ($_SERVER['REQUEST_METHOD'] !== 'POST') { + echo json_encode(['success' => false, 'message' => 'Método no permitido']); + exit; + } + $input = json_decode(file_get_contents('php://input'), true); + if ($input) { + $conceptId = $input['concept_id'] ?? 0; + $payments = $input['payments'] ?? []; + + if (!$conceptId || empty($payments)) { + echo json_encode(['success' => false, 'message' => 'Datos incompletos']); + exit; + } + if (!Auth::isCapturist()) { + echo json_encode(['success' => false, 'message' => 'Permiso denegado']); + exit; + } + + require_once __DIR__ . '/models/CollectionConcept.php'; + $saved = 0; + $errors = []; + + foreach ($payments as $payment) { + $houseId = $payment['house_id'] ?? 0; + $amount = $payment['amount'] ?? 0; + $paymentDate = $payment['payment_date'] ?? null; + + if (!$houseId || !is_numeric($amount)) { + $errors[] = "Casa {$houseId}: datos inválidos"; + continue; + } + + $result = CollectionPayment::update($conceptId, $houseId, $amount, $userId, 'Pago actualizado', $paymentDate); + if ($result) { + $saved++; + } else { + $errors[] = "Casa {$houseId}: error al guardar"; + } + } + + if ($saved > 0) { + Auth::logActivity('save_all_concept_payments', "Guardados {$saved} pagos para concepto ID {$conceptId}"); + echo json_encode(['success' => true, 'message' => "{$saved} pagos guardados correctamente" . (count($errors) > 0 ? '. Errors: ' . implode(', ', $errors) : '')]); + } else { + echo json_encode(['success' => false, 'message' => 'Error al guardar pagos: ' . implode(', ', $errors)]); + } + } else { + echo json_encode(['success' => false, 'message' => 'Datos inválidos']); + } + exit; + default: echo json_encode(['success' => false, 'message' => 'Acción no válida para la vista de concepto']); exit; diff --git a/docker/Dockerfile b/docker/Dockerfile index 0d137c9..89c0972 100755 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -62,11 +62,13 @@ RUN composer install --no-dev --optimize-autoloader --no-interaction || true # Crear directorios necesarios RUN mkdir -p /var/www/html/ibiza/uploads +RUN mkdir -p /var/www/html/ibiza/logs # Configurar permisos RUN chown -R www-data:www-data /var/www/html/ibiza \ && chmod -R 755 /var/www/html/ibiza \ && chmod -R 777 /var/www/html/ibiza/uploads \ + && chmod -R 777 /var/www/html/ibiza/logs \ && touch /var/www/html/ibiza/.env \ && chown www-data:www-data /var/www/html/ibiza/.env diff --git a/models/CollectionConcept.php b/models/CollectionConcept.php index 157eabf..8e80895 100755 --- a/models/CollectionConcept.php +++ b/models/CollectionConcept.php @@ -46,21 +46,27 @@ class CollectionConcept { public static function update($id, $data) { $db = Database::getInstance(); - return $db->execute( - "UPDATE finance_collection_concepts - SET name = ?, description = ?, total_amount = ?, amount_per_house = ?, concept_date = ?, due_date = ?, category = ? - WHERE id = ?", - [ - $data['name'], - $data['description'] ?? null, - $data['total_amount'] ?? null, - $data['amount_per_house'], - $data['concept_date'], - $data['due_date'] ?? null, - $data['category'] ?? null, - $id - ] - ); + try { + $result = $db->execute( + "UPDATE finance_collection_concepts + SET name = ?, description = ?, total_amount = ?, amount_per_house = ?, concept_date = ?, due_date = ?, category = ? + WHERE id = ?", + [ + $data['name'], + $data['description'] ?? null, + $data['total_amount'] ?? null, + $data['amount_per_house'], + $data['concept_date'], + $data['due_date'] ?? null, + $data['category'] ?? null, + $id + ] + ); + return $result; + } catch (Exception $e) { + error_log("Error updating CollectionConcept ID $id: " . $e->getMessage()); + throw $e; + } } public static function save($data, $userId) {