finish with the integration of created user account fonction

This commit is contained in:
root 2026-02-02 17:53:59 +01:00
parent febaee14a3
commit c5975d9dcd
8 changed files with 400 additions and 79 deletions

View File

@ -79,6 +79,7 @@ $db['default'] = array(
'username' => 'root', 'username' => 'root',
'password' => '@iLink@2025', 'password' => '@iLink@2025',
'database' => 'iLink_preprod', 'database' => 'iLink_preprod',
'database' => 'iLink_world',
'dbdriver' => 'mysqli', 'dbdriver' => 'mysqli',
'dbprefix' => '', 'dbprefix' => '',
'pconnect' => FALSE, 'pconnect' => FALSE,

View File

@ -2651,8 +2651,6 @@ class Gestion extends CI_Controller
$doc_front = $this->input->post('doc_front'); $doc_front = $this->input->post('doc_front');
$doc_back = $this->input->post('doc_back'); $doc_back = $this->input->post('doc_back');
$this->db->trans_begin();
$updateLocal = $this->user_model->updateRequestStatus($id, 'validated'); $updateLocal = $this->user_model->updateRequestStatus($id, 'validated');
log_message('info', 'Validation de la demande d\'ouverture de compte agence bancaire ID_demande ' . $id); log_message('info', 'Validation de la demande d\'ouverture de compte agence bancaire ID_demande ' . $id);
@ -2689,36 +2687,121 @@ class Gestion extends CI_Controller
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch); curl_close($ch);
log_message('info', 'Réponse API lors de l\'ouverture du compte agence bancaire ID_demande ' . $id . ' : ' . $result);
if ($result && ($httpCode >= 200 && $httpCode < 300)) { if ($result && ($httpCode >= 200 && $httpCode < 300)) {
$this->db->trans_commit();
echo json_encode([ echo json_encode([
'success' => 'ok', 'success' => 'ok',
'message' => 'Compte créé avec succès.', 'message' => 'Compte créé avec succès.'
'api_response' => json_decode($result)
]); ]);
} else { } else {
$this->db->trans_rollback();
echo json_encode([ echo json_encode([
'success' => 'false', 'success' => 'false',
'message' => 'Un problème est survenu lors de l\'ouverture du compte (' . $httpCode . ')', 'message' => 'Un problème est survenu lors de l\'ouverture du compte (' . $result . ')'
'api_error' => $result
]); ]);
log_message('error', 'Erreur API lors de l\'ouverture du compte agence bancaire ID_demande ' . $id . ' : ' . $result); log_message('error', '------------- Erreur API lors de l\'ouverture du compte agence bancaire ID_demande ' . $id . ' : ' . $result);
} }
} else { } else {
// ECHEC LOCAL : ON ANNULE LA TRANSACTION (ROLLBACK)
$this->db->trans_rollback();
echo json_encode(['alert' => 'error', 'success' => 'false', 'message' => 'Erreur lors de l\'activation du compte']); echo json_encode(['alert' => 'error', 'success' => 'false', 'message' => 'Erreur lors de l\'activation du compte']);
} }
} }
} }
/* --------------------------------------------------------------------------
GESTION DES RATTACHEMENTS (LINKS)
-------------------------------------------------------------------------- */
public function validate_link_request() {
if ($this->isLogged()) {
$id = $this->input->post('id_transaction');
$iban = $this->input->post('iban');
$code_client = $this->input->post('code_client');
$updateLocal = $this->user_model->updateLinkStatus($id, 1);
log_message('info', 'Validation Rattachement ID: ' . $id);
if ($updateLocal) {
// Appel API
$url = WALLET_SERVICE_URL . '/validate_link_user_bank_account';
$body = [
'iban' => $iban,
'code_client' => $code_client,
'id_transaction' => $id
];
$payload = json_encode($body);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($payload),
'Authorization: ' . WALLET_SERVICE_TOKEN,
'X-localization: ' . ($this->session->userdata('site_lang') == 'french' ? 'fr' : 'en')
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($result && ($httpCode >= 200 && $httpCode < 300)) {
echo json_encode(['success' => 'ok', 'message' => 'Rattachement validé avec succès.']);
} else {
log_message('error', 'Erreur API Link ID '.$id.' : '.$result);
echo json_encode(['success' => 'false', 'message' => 'Erreur API (' . $httpCode . ')', 'api_error' => $result]);
}
} else {
echo json_encode(['success' => 'false', 'message' => 'Erreur DB Locale']);
}
}
}
public function update_link_request() {
if ($this->isLogged()) {
$id = $this->input->post('id_transaction');
// On récupère les données du formulaire
$data = [];
if($this->input->post('iban')) $data['iban'] = $this->input->post('iban');
if($this->input->post('code_client')) $data['code_client'] = $this->input->post('code_client');
// is_verified (Status)
if($this->input->post('is_verified') !== null) {
$data['is_verified'] = $this->input->post('is_verified');
}
$result = $this->user_model->updateLinkRequest($id, $data);
if ($result) {
echo json_encode(['success' => 'ok', 'message' => 'Mise à jour réussie']);
} else {
echo json_encode(['success' => 'false', 'message' => 'Erreur DB']);
}
}
}
// 3. SUPPRESSION
public function delete_link_request() {
if ($this->isLogged()) {
$id = $this->input->post('id_transaction');
$result = $this->user_model->deleteLinkRequest($id);
if ($result) {
echo json_encode(['success' => 'ok', 'message' => 'Suppression effectuée']);
} else {
echo json_encode(['success' => 'ko', 'message' => 'Erreur DB']);
}
}
}
} }

View File

@ -224,7 +224,7 @@ if (!function_exists('getStatusBadge')) {
case 'pending': case 'pending':
return '<span class="label label-warning" style="'.$style.'">'.$label.'</span>'; return '<span class="label label-warning" style="'.$style.'">'.$label.'</span>';
case 'active': case 'actived':
return '<span class="label label-success" style="'.$style.'">'.$label.'</span>'; return '<span class="label label-success" style="'.$style.'">'.$label.'</span>';
case 'validated': case 'validated':

View File

@ -1103,4 +1103,10 @@ $lang['status_validated'] = 'Validated';
$lang['subscriptions_history'] = "Subscription history"; $lang['subscriptions_history'] = "Subscription history";
$lang["list_of_request_opening_bank_accounts"] = "List of bank account opening requests"; $lang["list_of_request_opening_bank_accounts"] = "List of bank account opening requests";
$lang["product"] = "Product"; $lang["product"] = "Product";
$lang["status_actived"] = "Actived";
$lang["status_rejected"] = "Rejected";
$lang["status_validated"] = "Validated";
$lang["status_close"] = "Closed";
$lang["status_closed"] = "Closed";
$lang["status_pernding"]= "Pending";
?> ?>

View File

@ -1110,4 +1110,11 @@ $lang['status_rejected'] = 'Rejeté';
$lang['status_validated'] = 'Validé'; $lang['status_validated'] = 'Validé';
$lang['subscriptions_history'] = 'Historique des souscriptions'; $lang['subscriptions_history'] = 'Historique des souscriptions';
$lang["product"] = "Produit"; $lang["product"] = "Produit";
$lang["status_actived"] = "Activé";
$lang["status_rejected"] = "Rejété";
$lang["status_validated"] = "Validé";
$lang["status_close"] = "Fermé";
$lang["status_closed"] = "Fermé";
$lang["status_pernding"]= "En cours";
?> ?>

View File

@ -2373,7 +2373,8 @@ class User_model extends CI_Model
u.email, u.email,
u.phone, u.phone,
op.nom as bank_name, op.nom as bank_name,
opc.adresse as bank_address opc.adresse as bank_address,
uba.customer_number as code_client
'); ');
$this->db->from('users_banking_account_verification v'); $this->db->from('users_banking_account_verification v');
@ -2381,6 +2382,7 @@ class User_model extends CI_Model
$this->db->join('operators_countries opc', 'opc.id = v.id_bank_country', 'left'); $this->db->join('operators_countries opc', 'opc.id = v.id_bank_country', 'left');
$this->db->join('operators op', 'op.id = opc.id_operator', 'left'); $this->db->join('operators op', 'op.id = opc.id_operator', 'left');
$this->db->join('user_bank_accounts uba', 'uba.id_user = u.id', 'left');
$this->db->order_by('v.created_at', 'ASC'); $this->db->order_by('v.created_at', 'ASC');
@ -2392,4 +2394,22 @@ class User_model extends CI_Model
$this->db->where("id", $id); $this->db->where("id", $id);
return $this->db->update("user_bank_accounts", ['status' => $status, 'reason' => 'En attente d\'activation de compte']); return $this->db->update("user_bank_accounts", ['status' => $status, 'reason' => 'En attente d\'activation de compte']);
} }
/* GESTION DES RATTACHEMENTS */
public function updateLinkStatus($id, $status) {
$this->db->where('id_transaction', $id);
return $this->db->update('users_banking_account_verification', ['is_verified' => $status]);
}
public function updateLinkRequest($id, $data) {
$this->db->where('id_transaction', $id);
return $this->db->update('users_banking_account_verification', $data);
}
// Suppression
public function deleteLinkRequest($id) {
$this->db->where('id_transaction', $id);
return $this->db->delete('users_banking_account_verification');
}
} }

View File

@ -95,12 +95,9 @@
<div class="form-group"> <div class="form-group">
<label class="col-form-label">Parent</label> <label class="col-form-label">Parent</label>
<select class="form-control input-lg" name="parent_id" > <select class="form-control input-lg" name="parent_id" >
<?php if (count($types ?? []) > 1) { ?> <option value="0"><?=$this->lang->line('no_parent')?></option>
<?php foreach ($types ?? [] as $value) { ?> <?php foreach ($types ?? [] as $value) { ?>
<option value="<?=$value->id?>"> <?=$value->name?> </option> <option value="<?=$value->id?>"> <?=$value->name?> </option>
<?php } ?>
<?php } else { ?>
<option value="0"> <?=$this->lang->line('no_parent')?> </option>
<?php } ?> <?php } ?>
</select> </select>
</div> </div>
@ -303,7 +300,7 @@
$("#update-form input[name='opening_amount']").val($(this).data('opening_amount')); $("#update-form input[name='opening_amount']").val($(this).data('opening_amount'));
$("#update-form input[name='opening_amount_payment_period_days']").val($(this).data('opening_amount_payment_period_days')); $("#update-form input[name='opening_amount_payment_period_days']").val($(this).data('opening_amount_payment_period_days'));
$("#update-form select[name='parent_id']").empty().append("<option value='0'>"+ "<?this->lang->line('no_parent')?>" + "</option>"); $("#update-form select[name='parent_id']").empty().append("<option value='0'>"+ "<?= $this->lang->line('no_parent')?>" + "</option>");
$.each(types, function (j, it) { $.each(types, function (j, it) {
$("#update-form select[name='parent_id']").append(`<option value='${it.id}'>${it.name}</option>`); $("#update-form select[name='parent_id']").append(`<option value='${it.id}'>${it.name}</option>`);
}); });

View File

@ -189,6 +189,7 @@
<th class="text-center">Téléphone</th> <th class="text-center">Téléphone</th>
<th class="text-center">Banque</th> <th class="text-center">Banque</th>
<th class="text-center">IBAN / Compte</th> <th class="text-center">IBAN / Compte</th>
<th class="text-center">Code client </th>
<th class="text-center"><?= $this->lang->line('status'); ?></th> <th class="text-center"><?= $this->lang->line('status'); ?></th>
<th class="text-center">Actions</th> <th class="text-center">Actions</th>
</tr> </tr>
@ -199,7 +200,7 @@
<?php foreach ($request_links_bank_accounts as $l): ?> <?php foreach ($request_links_bank_accounts as $l): ?>
<?php <?php
$statusStr = 'pending'; $statusStr = 'pending';
if($l->is_verified == 1) $statusStr = 'active'; if($l->is_verified == 1) $statusStr = 'actived';
if($l->is_verified == 2) $statusStr = 'rejected'; if($l->is_verified == 2) $statusStr = 'rejected';
?> ?>
<tr> <tr>
@ -210,12 +211,13 @@
<?= $l->lastname ?> <?= $l->firstname ?><br> <?= $l->lastname ?> <?= $l->firstname ?><br>
<small class="text-muted"><?= $l->email ?></small> <small class="text-muted"><?= $l->email ?></small>
</td> </td>
<td class="text-center"><?= $l->phone ?></td> <td class="text-center"><?= !empty($l->phone) ? $l->phone : '-'; ?></td>
<td class="text-center"> <td class="text-center">
<strong><?= $l->bank_name ?></strong><br> <strong><?= $l->bank_name ?></strong><br>
<small><?= substr($l->bank_address, 0, 20) ?>...</small> <small><?= substr($l->bank_address, 0, 20) ?>...</small>
</td> </td>
<td class="text-center"><?= $l->iban ?></td> <td class="text-center"><?= $l->iban ?></td>
<td class="text-center"><?= !empty($l->code_client) ? $l->code_client : '-'; ?></td>
<td class="text-center"> <td class="text-center">
<?= getStatusBadge($statusStr, $this->lang) ?> <?= getStatusBadge($statusStr, $this->lang) ?>
</td> </td>
@ -233,11 +235,31 @@
data-bank_name="<?= $l->bank_name ?>" data-bank_name="<?= $l->bank_name ?>"
data-bank_address="<?= $l->bank_address ?>" data-bank_address="<?= $l->bank_address ?>"
data-iban="<?= $l->iban ?>" data-iban="<?= $l->iban ?>"
data-code_client="<?= $l->code_client ?>"
data-status="<?= $statusStr ?>" data-status="<?= $statusStr ?>"
data-created_at="<?= $l->created_at ?>" data-created_at="<?= $l->created_at ?>"
> >
<i class='fa fa-eye'></i> <i class='fa fa-eye'></i>
</button> </button>
<button
class="open-edit-link-modal btn btn-primary btn-sm"
data-toggle="modal"
data-target="#editLinkModal"
title="Modifier"
data-id="<?= $l->id_transaction ?>"
data-iban="<?= $l->iban ?>"
data-code_client="<?= $l->code_client ?>"
data-bank_name="<?= $l->bank_name ?>"
data-status="<?= $l->is_verified ?>"
>
<i class='fa fa-edit'></i>
</button>
<!-- SUPPRIMER -->
<button class="btn btn-danger btn-sm btn-delete-link" data-id="<?= $l->id_transaction ?>" title="Supprimer">
<i class='fa fa-trash'></i>
</button>
</td> </td>
</tr> </tr>
<?php endforeach; ?> <?php endforeach; ?>
@ -250,6 +272,71 @@
</section> </section>
</div> </div>
<!-- === MODAL EDIT LINK === -->
<div class="modal fade" id="editLinkModal">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span>&times;</span></button>
<h4 class="modal-title">Modifier la demande de rattachement</h4>
</div>
<div class="modal-body">
<form id="update-link-form">
<input type="hidden" name="id_transaction" id="edit_link_id">
<div class="form-group">
<label>Nom de la Banque</label>
<input type="text" name="bank_name" id="edit_link_bank_name" class="form-control" readonly>
</div>
<div class="form-group">
<label>IBAN / Numéro de compte</label>
<input type="text" name="iban" id="edit_link_iban" class="form-control">
</div>
<div class="form-group">
<label>Code Client</label>
<input type="text" name="code_client" id="edit_link_code_client" class="form-control" readonly>
</div>
<div class="form-group">
<label>Statut</label>
<select name="is_verified" id="edit_link_status" class="form-control">
<option value="0">En attente</option>
<option value="1">Activé </option>
<option value="2">Rejeté </option>
</select>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Annuler</button>
<button type="button" class="btn btn-primary" id="btn-save-edit-link">Enregistrer</button>
</div>
</div>
</div>
</div>
<!-- MODAL DELETE LINK -->
<div class="modal fade" id="deleteLinkModal">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span>&times;</span></button>
<h4 class="modal-title">Confirmer la suppression</h4>
</div>
<div class="modal-body">
<p>Voulez-vous vraiment supprimer cette demande de rattachement ?</p>
<input type="hidden" id="delete_link_id">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Non</button>
<button type="button" id="confirmDeleteLink" class="btn btn-danger">Oui, supprimer</button>
</div>
</div>
</div>
</div>
<!-- ======================================================= <!-- =======================================================
MODAL 1 : VÉRIFICATION AGENCE (AGENCY BANKING) MODAL 1 : VÉRIFICATION AGENCE (AGENCY BANKING)
======================================================= --> ======================================================= -->
@ -360,7 +447,7 @@
<input type="hidden" id="link_id_transaction"> <input type="hidden" id="link_id_transaction">
<div class="row"> <div class="row">
<div class="col-md-12"><h5 class="section-header">Information du Client</h5></div> <div class="col-md-12"><h5 class="section-header">Information du Client</h5></div>
<div class="col-md-6"><span class="view-label">Code Utilisateur :</span> <span class="view-value" id="link_user_code"></span></div> <div class="col-md-6"><span class="view-label">Code wallet Utilisateur :</span> <span class="view-value" id="link_user_code"></span></div>
<div class="col-md-6"><span class="view-label">Nom Complet :</span> <span class="view-value" id="link_fullname"></span></div> <div class="col-md-6"><span class="view-label">Nom Complet :</span> <span class="view-value" id="link_fullname"></span></div>
<div class="col-md-6"><span class="view-label">Email :</span> <span class="view-value" id="link_email"></span></div> <div class="col-md-6"><span class="view-label">Email :</span> <span class="view-value" id="link_email"></span></div>
<div class="col-md-6"><span class="view-label">Téléphone :</span> <span class="view-value" id="link_phone"></span></div> <div class="col-md-6"><span class="view-label">Téléphone :</span> <span class="view-value" id="link_phone"></span></div>
@ -369,6 +456,7 @@
<div class="col-md-12"><span class="view-label">Nom de la Banque :</span> <span class="view-value" id="link_bank_name"></span></div> <div class="col-md-12"><span class="view-label">Nom de la Banque :</span> <span class="view-value" id="link_bank_name"></span></div>
<div class="col-md-12"><span class="view-label">Adresse Banque :</span> <span class="view-value" id="link_bank_address"></span></div> <div class="col-md-12"><span class="view-label">Adresse Banque :</span> <span class="view-value" id="link_bank_address"></span></div>
<div class="col-md-12"><span class="view-label">IBAN / Numéro Carte :</span> <span class="view-value" id="link_iban" style="font-size: 16px; font-weight:bold; letter-spacing: 1px;"></span></div> <div class="col-md-12"><span class="view-label">IBAN / Numéro Carte :</span> <span class="view-value" id="link_iban" style="font-size: 16px; font-weight:bold; letter-spacing: 1px;"></span></div>
<div class="col-md-12"><span class="view-label">Code Client :</span> <span class="view-value" id="link_code_client" style="font-size: 16px; font-weight:bold; letter-spacing: 1px;"></span></div>
<div class="col-md-6"><span class="view-label">Date Demande :</span> <span class="view-value" id="link_created_at"></span></div> <div class="col-md-6"><span class="view-label">Date Demande :</span> <span class="view-value" id="link_created_at"></span></div>
<div class="col-md-6"><span class="view-label">Statut Actuel :</span> <span class="view-value" id="link_status"></span></div> <div class="col-md-6"><span class="view-label">Statut Actuel :</span> <span class="view-value" id="link_status"></span></div>
@ -418,7 +506,7 @@
<label>Statut du compte</label> <label>Statut du compte</label>
<select id="edit_status" name="status" class="form-control input-lg" required> <select id="edit_status" name="status" class="form-control input-lg" required>
<option value="pending">En attente</option> <option value="pending">En attente</option>
<option value="active">Activé</option> <option value="actived">Activé</option>
<option value="validated">Validé</option> <option value="validated">Validé</option>
<option value="rejected">Rejeté</option> <option value="rejected">Rejeté</option>
<option value="close">Fermé</option> <option value="close">Fermé</option>
@ -529,7 +617,7 @@ $(document).ready(function () {
"pageLength": 10, "pageLength": 10,
"ordering": true, "ordering": true,
"scrollX": true, "scrollX": true,
"order": [[ 0, "desc" ]], "order": [[ 0, "asc" ]],
dom: "<'row'<'col-sm-6'B><'col-sm-6'f>>" + dom: "<'row'<'col-sm-6'B><'col-sm-6'f>>" +
"<'row'<'col-sm-12'tr>>" + "<'row'<'col-sm-12'tr>>" +
"<'row'<'col-sm-5'i><'col-sm-7'p>>", "<'row'<'col-sm-5'i><'col-sm-7'p>>",
@ -541,7 +629,7 @@ $(document).ready(function () {
"pageLength": 10, "pageLength": 10,
"ordering": true, "ordering": true,
"scrollX": true, "scrollX": true,
"order": [[ 0, "desc" ]], "order": [[ 0, "asc" ]],
dom: "<'row'<'col-sm-6'B><'col-sm-6'f>>" + dom: "<'row'<'col-sm-6'B><'col-sm-6'f>>" +
"<'row'<'col-sm-12'tr>>" + "<'row'<'col-sm-12'tr>>" +
"<'row'<'col-sm-5'i><'col-sm-7'p>>", "<'row'<'col-sm-5'i><'col-sm-7'p>>",
@ -592,41 +680,48 @@ $(document).ready(function () {
}); });
}); });
/* ===================================================== /* =====================================================
* LOGIQUE MODAL REVIEW (AGENCY & LINK) * 1. OUVERTURE MODAL REVIEW (AGENCY)
* ===================================================== */ * ===================================================== */
$(document).on("click", ".open-review-modal", function () { $(document).on("click", ".open-review-modal", function () {
let id = $(this).data("id"); let id = $(this).data("id");
let status = $(this).data("status"); // On récupère le statut
$("#review_id").val(id); $("#review_id").val(id);
// Reset de l'interface (On remet les boutons par défaut et on vide le motif) if (status === 'actived') {
// Si actif, on désactive le bouton et on change le texte éventuellement
$("#btn-validate-request").prop("disabled", true).text("Déjà Actif");
$("#btn-reject-request").prop("disabled", true); // Optionnel : désactiver aussi le rejet
} else {
// Sinon, on le réactive (important si on ouvre une autre ligne après)
$("#btn-validate-request").prop("disabled", false).html('<i class="fa fa-check"></i> VALIDER');
$("#btn-reject-request").prop("disabled", false);
}
// Reset de l'interface UI (Motif rejet caché, etc.)
$("#default-actions").show(); $("#default-actions").show();
$("#reject-area").hide(); $("#reject-area").hide();
$("#reject_reason").val(""); $("#reject_reason").val("");
// Remplissage des infos textes // Remplissage des données textes
const fields = ["lastname", "firstname", "account_number", "customer_number", "iban", "balance", "status", "profession", "employer_name", "type", "birth_date", "birth_country", "birth_city", "nationality", "marital_status", "spouse_name", "phone_number", "identification_number", "niu", "employer_address", "employer_city"]; const fields = ["lastname", "firstname", "account_number", "iban", "balance", "profession", "employer_name", "sector_activity", "account_type", "birth_date", "phone_number", "customer_number", "spouse_name", "niu", "identification_number", "employer_address", "employer_city", "birth_country", "birth_city", "nationality", "marital_status"];
fields.forEach(f => { $("#view_" + f).text($(this).data(f) || "-"); }); fields.forEach(f => { $("#view_" + f).text($(this).data(f) || "-"); });
// Gestion des documents // Gestion des documents (inchangé)
let docFront = $(this).data("doc_front"); let docFront = $(this).data("doc_front");
let docBack = $(this).data("doc_back"); let docBack = $(this).data("doc_back");
$("#hidden_doc_front").val(docFront); $("#hidden_doc_front").val(docFront);
$("#hidden_doc_back").val(docBack); $("#hidden_doc_back").val(docBack);
// Affichage Image Front // Affichage images... (inchangé)
if(docFront && docFront !== "") { if(docFront && docFront !== "") {
$("#container_doc_front").html(`<a href="${docFront}" target="_blank"><img src="${docFront}" class="img-thumbnail" style="max-height: 150px;"></a>`); $("#container_doc_front").html(`<a href="${docFront}" target="_blank"><img src="${docFront}" class="img-thumbnail" style="max-height: 150px;"></a>`);
} else { } else { $("#container_doc_front").html('<span class="text-muted">Aucun document</span>'); }
$("#container_doc_front").html('<span class="text-muted">Aucun document</span>');
}
// Affichage Image Back
if(docBack && docBack !== "") { if(docBack && docBack !== "") {
$("#container_doc_back").html(`<a href="${docBack}" target="_blank"><img src="${docBack}" class="img-thumbnail" style="max-height: 150px;"></a>`); $("#container_doc_back").html(`<a href="${docBack}" target="_blank"><img src="${docBack}" class="img-thumbnail" style="max-height: 150px;"></a>`);
} else { } else { $("#container_doc_back").html('<span class="text-muted">Aucun document</span>'); }
$("#container_doc_back").html('<span class="text-muted">Aucun document</span>');
}
}); });
/* ===================================================== /* =====================================================
@ -710,7 +805,7 @@ $(document).ready(function () {
type: "POST", type: "POST",
data: { data: {
id: id, id: id,
status: 'active', status: 'actived',
doc_front: docFront, doc_front: docFront,
doc_back: docBack doc_back: docBack
}, },
@ -739,39 +834,151 @@ $(document).ready(function () {
}); });
// Logique Review LINK /* =====================================================
$(document).on("click", ".open-link-review-modal", function () { * GESTION RATTACHEMENT : REVIEW
let id = $(this).data("id"); * ===================================================== */
$("#link_id_transaction").val(id); $(document).on("click", ".open-link-review-modal", function () {
$("#link_user_code").text($(this).data("user_code"));
$("#link_fullname").text($(this).data("fullname")); let status = $(this).data("status"); // Récupère 'active', 'pending', etc.
$("#link_email").text($(this).data("email"));
$("#link_phone").text($(this).data("phone"));
$("#link_bank_name").text($(this).data("bank_name"));
$("#link_bank_address").text($(this).data("bank_address"));
$("#link_iban").text($(this).data("iban"));
$("#link_status").text($(this).data("status"));
$("#link_created_at").text($(this).data("created_at"));
});
function processLinkRequest(is_verified_status) { // --- GESTION DU BOUTON VALIDATION ---
let id = $("#link_id_transaction").val(); if (status === 'active' || status === 'validated' || status == 1) {
$.ajax({ $("#btn-validate-link").prop("disabled", true).text("Déjà Validé");
url: "<?= base_url('Gestion/update_link_request'); ?>", $("#btn-reject-link").prop("disabled", true);
type: "POST", } else {
data: { id_transaction: id, is_verified: is_verified_status }, $("#btn-validate-link").prop("disabled", false).html('<i class="fa fa-check"></i> Valider');
dataType: "json", $("#btn-reject-link").prop("disabled", false);
success: function (res) { }
if (res && res.success === "ok") { // -------------------------------------
$('#reviewLinkModal').modal('hide');
toastr.success(res.message || "Statut mis à jour !"); $("#link_id_transaction").val($(this).data("id"));
setTimeout(() => location.reload(), 1500);
} else { toastr.error(res.message || "Erreur serveur"); } $("#link_user_code").text($(this).data("user_code"));
} $("#link_fullname").text($(this).data("fullname"));
}); $("#link_email").text($(this).data("email"));
} $("#link_phone").text($(this).data("phone"));
$("#btn-validate-link").click(function() { processLinkRequest(1); });
$("#btn-reject-link").click(function() { processLinkRequest(2); }); $("#link_bank_name").text($(this).data("bank_name"));
$("#link_bank_address").text($(this).data("bank_address"));
$("#link_iban").text($(this).data("iban"));
$("#link_code_client").text($(this).data("code_client"));
$("#link_status").text(status);
$("#link_created_at").text($(this).data("created_at"));
});
// 2. Valider (API + Transaction)
$("#btn-validate-link").click(function() {
let iban = $("#link_iban").text();
let code_client = $("#link_code_client").text();
let transactionId = $("#link_id_transaction").val();
$(this).prop('disabled', true).html('<i class="fa fa-spinner fa-spin"></i>');
$.ajax({
url: "<?= base_url('Gestion/validate_link_request'); ?>",
type: "POST",
data: {
iban: iban,
code_client: code_client,
id_transaction: transactionId
},
dataType: "json",
success: function (res) {
if (res && res.success === "ok") {
$('#reviewLinkModal').modal('hide');
toastr.success(res.message);
setTimeout(() => location.reload(), 1500);
} else {
toastr.error(res.message);
$("#btn-validate-link").prop('disabled', false).html('Valider');
}
},
error: function () {
toastr.error("Erreur serveur (500)");
$("#btn-validate-link").prop('disabled', false).html('Valider');
}
});
});
// 3. Rejeter (Update Local Simple)
$("#btn-reject-link").click(function() {
let id = $("#link_id_transaction").val();
if(!confirm("Rejeter cette demande ?")) return;
$.ajax({
url: "<?= base_url('Gestion/update_link_request'); ?>",
type: "POST",
data: { id_transaction: id, is_verified: 2 }, // 2 = Rejected
dataType: "json",
success: function (res) {
if (res.success === "ok") {
$('#reviewLinkModal').modal('hide');
toastr.warning("Demande rejetée");
setTimeout(() => location.reload(), 1500);
} else {
toastr.error("Erreur lors du rejet");
}
}
});
});
/* =====================================================
* GESTION RATTACHEMENT : MODIFIER (EDIT)
* ===================================================== */
$(document).on("click", ".open-edit-link-modal", function () {
$("#edit_link_id").val($(this).data("id"));
$("#edit_link_iban").val($(this).data("iban"));
$("#edit_link_code_client").val($(this).data("code_client"));
$("#edit_link_bank_name").val($(this).data("bank_name"));
$("#edit_link_status").val($(this).data("status"));
});
$("#btn-save-edit-link").click(function() {
$.ajax({
url: "<?= base_url('Gestion/update_link_request'); ?>",
type: "POST",
data: $("#update-link-form").serialize(),
dataType: "json",
success: function (res) {
if (res.success === "ok") {
$('#editLinkModal').modal('hide');
toastr.success("Modifications enregistrées");
setTimeout(() => location.reload(), 1500);
} else {
toastr.error("Erreur lors de la mise à jour");
}
}
});
});
/* =====================================================
* GESTION RATTACHEMENT : SUPPRIMER (DELETE)
* ===================================================== */
$(document).on("click", ".btn-delete-link", function() {
let id = $(this).data('id');
$("#delete_link_id").val(id);
$("#deleteLinkModal").modal("show");
});
$("#confirmDeleteLink").click(function() {
$.ajax({
url: "<?= base_url('Gestion/delete_link_request'); ?>",
type: "POST",
data: { id_transaction: $("#delete_link_id").val() },
dataType: "json",
success: function (res) {
if (res.success === "ok") {
$('#deleteLinkModal').modal('hide');
toastr.success("Suppression réussie");
setTimeout(() => location.reload(), 1500);
} else {
toastr.error("Erreur lors de la suppression");
}
}
});
});
/* ===================================================== /* =====================================================