2025-12-10 17:00:48 +00:00
<! DOCTYPE html >
< html lang = " en " >
< head >
< meta charset = " UTF-8 " >
< meta name = " viewport " content = " width=device-width, initial-scale=1.0 " >
< title > Agency | Banking Management </ title >
2026-01-20 14:16:54 +00:00
<!-- CSS DataTables & Plugins -->
< link rel = " stylesheet " href = " https://cdn.datatables.net/1.13.6/css/dataTables.bootstrap.min.css " >
< link rel = " stylesheet " href = " https://cdn.datatables.net/buttons/2.4.1/css/buttons.bootstrap.min.css " >
2025-12-10 17:00:48 +00:00
< link rel = " stylesheet " href = " https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.15/css/bootstrap-multiselect.css " >
< link rel = " stylesheet " href = " <?= base_url('bower_components/toastr/toastr.css') ?> " >
< link rel = " stylesheet " href = " https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css " >
< style >
2026-01-20 14:16:54 +00:00
div . dataTables_wrapper { width : 100 % ; margin : 0 auto ; }
. action - buttons { display : flex ; gap : 6 px ; justify - content : center ; }
. action - buttons button { display : inline - flex ; align - items : center ; justify - content : center ; }
/* Styles pour les modals de vérification (Review) */
. view - label { font - weight : bold ; color : #555; font-size: 13px; }
. view - value { color : #000; margin-bottom: 10px; display: block; border-bottom: 1px solid #eee; padding-bottom: 5px; font-size: 14px; }
. section - header { border - bottom : 2 px solid #3c8dbc; padding-bottom: 5px; margin-bottom: 15px; margin-top: 10px; color: #3c8dbc; font-weight: 600; }
2025-12-10 17:00:48 +00:00
</ style >
</ head >
< body >
< div class = " content-wrapper " >
< section class = " content-header " >
2026-01-20 14:16:54 +00:00
< h1 >< ? = $this -> lang -> line ( 'management_bank_accounts' ); ?> </h1>
2025-12-10 17:00:48 +00:00
</ section >
< section class = " content " >
2026-01-20 14:16:54 +00:00
<!-- =======================================================
TABLEAU 1 : COMPTES AGENCE
======================================================= -->
< div class = " box box-primary " >
2025-12-10 17:00:48 +00:00
< div class = " box-header with-border " >
2026-01-20 14:16:54 +00:00
< h3 class = " box-title " >< ? = $this -> lang -> line ( 'list_of_request_opening_bank_accounts' ); ?> </h3>
< div class = " box-tools pull-right " >
< button type = " button " class = " btn btn-box-tool " data - widget = " collapse " >< i class = " fa fa-minus " ></ i ></ button >
</ div >
2025-12-10 17:00:48 +00:00
</ div >
< div class = " box-body " >
< table class = " table table-bordered table-striped " id = " accountsTable " >
< thead >
< tr >
< th class = " text-center " > ID </ th >
< th class = " text-center " >< ? = $this -> lang -> line ( 'lastname' ); ?> </th>
< th class = " text-center " >< ? = $this -> lang -> line ( 'firstname' ); ?> </th>
< th class = " text-center " >< ? = $this -> lang -> line ( 'account' ); ?> </th>
< th class = " text-center " > IBAN </ th >
< th class = " text-center " > Type </ th >
2026-02-02 10:08:12 +00:00
< th class = " text-center " >< ? = $this -> lang -> line ( 'nationality' ); ?> </th>
< th class = " text-center " >< ? = $this -> lang -> line ( 'birth_date' ); ?> </th>
< th class = " text-center " >< ? = $this -> lang -> line ( 'birth_country' ); ?> </th>
< th class = " text-center " >< ? = $this -> lang -> line ( 'marital_status' ); ?> </th>
< th class = " text-center " >< ? = $this -> lang -> line ( 'phone_number' ); ?> </th>
< th class = " text-center " >< ? = $this -> lang -> line ( 'reason' ); ?> </th>
2025-12-10 17:00:48 +00:00
< th class = " text-center " >< ? = $this -> lang -> line ( 'status' ); ?> </th>
< th class = " text-center " > Actions </ th >
</ tr >
</ thead >
< tbody >
2026-01-20 14:16:54 +00:00
< ? php if ( ! empty ( $request_bank_accounts )) : ?>
< ? php $j = 1 ; ?>
< ? php foreach ( $request_bank_accounts as $a ) : ?>
< tr >
< td class = " text-center " >< ? = $j ++ ; ?> </td>
< td class = " text-center " >< ? = $a -> lastname ?> </td>
< td class = " text-center " >< ? = $a -> firstname ?> </td>
< td class = " text-center " >< ? = $a -> account_number ?> </td>
< td class = " text-center " >< ? = $a -> iban ?> </td>
2026-02-02 10:08:12 +00:00
< td class = " text-center " >< ? = $a -> type ?> </td>
< td class = " text-center " >< ? = $a -> nationality ?> </td>
< td class = " text-center " >< ? = $a -> birth_date ?> </td>
< td class = " text-center " >< ? = $a -> birth_country ?> </td>
< td class = " text-center " >< ? = ucfirst ( $a -> marital_status ) ?> </td>
< td class = " text-center " >< ? = $a -> phone_number ?> </td>
< td class = " text-center " >< ? = $a -> reason ?> </td>
2026-01-20 14:16:54 +00:00
< td class = " text-center " >
< ? = getStatusBadge ( $a -> status , $this -> lang ) ?>
</ td >
< td class = " text-center action-buttons " >
<!-- BOUTON VOIR ( REVIEW ) -->
< button
class = " open-review-modal btn btn-info btn-sm "
data - toggle = " modal "
data - target = " #reviewModal "
title = " Vérifier "
data - id = " <?= $a->id ?> "
data - lastname = " <?= $a->lastname ?> "
data - firstname = " <?= $a->firstname ?> "
data - account_number = " <?= $a->account_number ?> "
2026-02-02 10:08:12 +00:00
data - customer_number = " <?= $a->customer_number ?> "
2026-01-20 14:16:54 +00:00
data - iban = " <?= $a->iban ?> "
2026-02-02 10:08:12 +00:00
data - phone_number = " <?= $a->phone_number ?> "
2026-01-20 14:16:54 +00:00
data - status = " <?= $a->status ?> "
data - reason = " <?= $a->reason ?> "
data - balance = " <?= $a->balance ?> "
2026-02-02 10:08:12 +00:00
data - type = " <?= $a->type ?> "
2026-01-20 14:16:54 +00:00
data - birth_date = " <?= $a->birth_date ?> "
data - birth_country = " <?= $a->birth_country ?> "
data - birth_city = " <?= $a->birth_city ?> "
data - nationality = " <?= $a->nationality ?> "
data - marital_status = " <?= $a->marital_status ?> "
data - profession = " <?= $a->profession ?> "
2026-02-02 10:08:12 +00:00
data - identification_number = " <?= $a->identification_number ?> "
data - niu = " <?= $a->niu ?> "
data - spouse_name = " <?= $a->spouse_name ?> "
data - employer_city = " <?= $a->employer_city ?> "
2026-01-20 14:16:54 +00:00
data - employer_name = " <?= $a->employer_name ?> "
data - employer_address = " <?= $a->employer_address ?> "
2026-02-02 10:08:12 +00:00
data - doc_front = " <?= $a->document_image_front ? $a->document_image_front : '' ?> "
data - doc_back = " <?= $a->document_image_back ? $a->document_image_back : '' ?> "
data - created_at = " <?= $a->created_at ?> "
2026-01-20 14:16:54 +00:00
>
< i class = 'fa fa-eye' ></ i >
</ button >
<!-- BOUTON MODIFIER ( EDIT ) -->
< button
data - toggle = " modal "
data - target = " #editModal "
class = " open-edit-modal btn btn-primary btn-sm "
data - id = " <?= $a->id ?> "
data - lastname = " <?= $a->lastname ?> "
data - firstname = " <?= $a->firstname ?> "
data - account_number = " <?= $a->account_number ?> "
2026-02-02 10:08:12 +00:00
data - customer_number = " <?= $a->customer_number ?> "
2026-01-20 14:16:54 +00:00
data - iban = " <?= $a->iban ?> "
data - status = " <?= $a->status ?> "
data - reason = " <?= $a->reason ?> "
data - balance = " <?= $a->balance ?> "
2026-02-02 10:08:12 +00:00
data - type = " <?= $a->type ?> "
2026-01-20 14:16:54 +00:00
data - birth_date = " <?= $a->birth_date ?> "
data - birth_country = " <?= $a->birth_country ?> "
data - birth_city = " <?= $a->birth_city ?> "
data - nationality = " <?= $a->nationality ?> "
data - marital_status = " <?= $a->marital_status ?> "
data - profession = " <?= $a->profession ?> "
2026-02-02 10:08:12 +00:00
data - employer_city = " <?= $a->employer_city ?> "
data - spouse_name = " <?= $a->spouse_name ?> "
data - identification_number = " <?= $a->identification_number ?> "
data - phone_number = " <?= $a->phone_number ?> "
data - niu = " <?= $a->niu ?> "
2026-01-20 14:16:54 +00:00
data - employer_name = " <?= $a->employer_name ?> "
data - employer_address = " <?= $a->employer_address ?> "
data - created_at = " <?= $a->created_at ?> "
>
< i class = 'fa fa-edit' ></ i >
</ button >
< button class = " delete-account btn btn-danger btn-sm " onclick = " deleteRequest(<?= $a->id ?>) " >
< i class = 'fa fa-trash' ></ i >
</ button >
</ td >
</ tr >
< ? php endforeach ; ?>
< ? php endif ; ?>
2025-12-10 17:00:48 +00:00
</ tbody >
2026-01-20 14:16:54 +00:00
</ table >
</ div >
</ div >
<!-- =======================================================
TABLEAU 2 : DEMANDES DE RATTACHEMENT
======================================================= -->
< div class = " box box-info " style = " margin-top: 30px; " >
< div class = " box-header with-border " >
< h3 class = " box-title " > Demandes de Rattachement ( Comptes Bancaires ) </ h3 >
< div class = " box-tools pull-right " >
< button type = " button " class = " btn btn-box-tool " data - widget = " collapse " >< i class = " fa fa-minus " ></ i ></ button >
</ div >
</ div >
2025-12-10 17:00:48 +00:00
2026-01-20 14:16:54 +00:00
< div class = " box-body " >
< table class = " table table-bordered table-striped " id = " linksTable " >
< thead >
< tr >
< th class = " text-center " > ID </ th >
< th class = " text-center " > Nom complet </ th >
< th class = " text-center " > User Code </ th >
< th class = " text-center " > Client </ th >
< th class = " text-center " > Téléphone </ th >
< th class = " text-center " > Banque </ th >
< th class = " text-center " > IBAN / Compte </ th >
< th class = " text-center " >< ? = $this -> lang -> line ( 'status' ); ?> </th>
< th class = " text-center " > Actions </ th >
</ tr >
</ thead >
< tbody >
< ? php if ( ! empty ( $request_links_bank_accounts )) : ?>
< ? php $i = 1 ; ?>
< ? php foreach ( $request_links_bank_accounts as $l ) : ?>
< ? php
$statusStr = 'pending' ;
if ( $l -> is_verified == 1 ) $statusStr = 'active' ;
if ( $l -> is_verified == 2 ) $statusStr = 'rejected' ;
?>
< tr >
< td class = " text-center " >< ? = $i ++ ; ?> </td>
< td class = " text-center " >< ? = $l -> lastname . ' ' . $l -> firstname ?> </td>
< td class = " text-center " >< ? = $l -> user_code ?> </td>
< td class = " text-center " >
< ? = $l -> lastname ?> <?= $l->firstname ?><br>
< small class = " text-muted " >< ? = $l -> email ?> </small>
</ td >
< td class = " text-center " >< ? = $l -> phone ?> </td>
< td class = " text-center " >
< strong >< ? = $l -> bank_name ?> </strong><br>
< small >< ? = substr ( $l -> bank_address , 0 , 20 ) ?> ...</small>
</ td >
< td class = " text-center " >< ? = $l -> iban ?> </td>
< td class = " text-center " >
< ? = getStatusBadge ( $statusStr , $this -> lang ) ?>
</ td >
< td class = " text-center action-buttons " >
< button
class = " open-link-review-modal btn btn-info btn-sm "
data - toggle = " modal "
data - target = " #reviewLinkModal "
title = " Vérifier le rattachement "
data - id = " <?= $l->id_transaction ?> "
data - user_code = " <?= $l->user_code ?> "
data - fullname = " <?= $l->lastname . ' ' . $l->firstname ?> "
data - email = " <?= $l->email ?> "
data - phone = " <?= $l->phone ?> "
data - bank_name = " <?= $l->bank_name ?> "
data - bank_address = " <?= $l->bank_address ?> "
data - iban = " <?= $l->iban ?> "
data - status = " <?= $statusStr ?> "
data - created_at = " <?= $l->created_at ?> "
>
< i class = 'fa fa-eye' ></ i >
</ button >
</ td >
</ tr >
< ? php endforeach ; ?>
< ? php endif ; ?>
</ tbody >
2025-12-10 17:00:48 +00:00
</ table >
</ div >
</ div >
</ section >
</ div >
2026-01-20 14:16:54 +00:00
<!-- =======================================================
MODAL 1 : VÉRIFICATION AGENCE ( AGENCY BANKING )
======================================================= -->
< div class = " modal fade " id = " reviewModal " >
< div class = " modal-dialog modal-lg " >
< div class = " modal-content " >
< div class = " modal-header " >
< button type = " button " class = " close " data - dismiss = " modal " >< span >& times ; </ span ></ button >
< h4 class = " modal-title text-center " > Vérification de la demande d ' ouverture de compte </ h4 >
</ div >
< div class = " modal-body " >
< input type = " hidden " id = " review_id " >
2026-02-02 10:08:12 +00:00
<!-- HIDDEN INPUTS FOR DOCUMENT -->
< input type = " hidden " id = " hidden_doc_front " >
< input type = " hidden " id = " hidden_doc_back " >
2026-01-20 14:16:54 +00:00
< div class = " row " >
< div class = " col-md-12 " >< h5 class = " section-header " > Informations Personnelles </ h5 ></ div >
< div class = " col-md-4 " >< span class = " view-label " > Nom :</ span > < span class = " view-value " id = " view_lastname " ></ span ></ div >
< div class = " col-md-4 " >< span class = " view-label " > Prénom :</ span > < span class = " view-value " id = " view_firstname " ></ span ></ div >
< div class = " col-md-4 " >< span class = " view-label " > Date Nais . :</ span > < span class = " view-value " id = " view_birth_date " ></ span ></ div >
< div class = " col-md-4 " >< span class = " view-label " > Nationalité :</ span > < span class = " view-value " id = " view_nationality " ></ span ></ div >
< div class = " col-md-4 " >< span class = " view-label " > Matrimonial :</ span > < span class = " view-value " id = " view_marital_status " ></ span ></ div >
2026-02-02 10:08:12 +00:00
< div class = " col-md-4 " >< span class = " view-label " > Nom du conjoint :</ span > < span class = " view-value " id = " view_spouse_name " ></ span ></ div >
2026-01-20 14:16:54 +00:00
< div class = " col-md-4 " >< span class = " view-label " > Ville de Naissance :</ span > < span class = " view-value " id = " view_birth_city " ></ span ></ div >
2026-02-02 10:08:12 +00:00
< div class = " col-md-4 " >< span class = " view-label " > Numero de telephone :</ span > < span class = " view-value " id = " view_phone_number " ></ span ></ div >
< div class = " col-md-4 " >< span class = " view-label " > NIU :</ span > < span class = " view-value " id = " view_niu " ></ span ></ div >
< div class = " col-md-4 " >< span class = " view-label " > Piece d ' identité :</ span > < span class = " view-value " id = " view_identification_number " ></ span ></ div >
2026-01-20 14:16:54 +00:00
< div class = " col-md-4 " >< span class = " view-label " > Pays de Naissance :</ span > < span class = " view-value " id = " view_birth_country " ></ span ></ div >
2026-02-02 10:08:12 +00:00
< div class = " col-md-12 " style = " margin-top: 20px; " >
< h5 class = " section-header " > Pièces Justificatives ( Identité ) </ h5 >
</ div >
< div class = " col-md-6 " >
< span class = " view-label " > Recto :</ span >
< div id = " container_doc_front " style = " margin-top:5px; " >
</ div >
</ div >
< div class = " col-md-6 " >
< span class = " view-label " > Verso :</ span >
< div id = " container_doc_back " style = " margin-top:5px; " >
</ div >
</ div >
2026-01-20 14:16:54 +00:00
< div class = " col-md-12 " >< h5 class = " section-header " > Détails du Compte </ h5 ></ div >
< div class = " col-md-4 " >< span class = " view-label " > Numéro :</ span > < span class = " view-value " id = " view_account_number " ></ span ></ div >
2026-02-02 10:08:12 +00:00
< div class = " col-md-4 " >< span class = " view-label " > Code du client :</ span > < span class = " view-value " id = " view_customer_number " ></ span ></ div >
< div class = " col-md-4 " >< span class = " view-label " > Type :</ span > < span class = " view-value " id = " view_type " ></ span ></ div >
2026-01-20 14:16:54 +00:00
< div class = " col-md-4 " >< span class = " view-label " > Solde :</ span > < span class = " view-value " id = " view_balance " ></ span ></ div >
< div class = " col-md-6 " >< span class = " view-label " > IBAN :</ span > < span class = " view-value " id = " view_iban " ></ span ></ div >
< div class = " col-md-12 " >< h5 class = " section-header " > Informations Professionnelles </ h5 ></ div >
< div class = " col-md-4 " >< span class = " view-label " > Profession :</ span > < span class = " view-value " id = " view_profession " ></ span ></ div >
2026-02-02 10:08:12 +00:00
2026-01-20 14:16:54 +00:00
< div class = " col-md-4 " >< span class = " view-label " > Employeur :</ span > < span class = " view-value " id = " view_employer_name " ></ span ></ div >
< div class = " col-md-4 " >< span class = " view-label " > Adresse employeur :</ span > < span class = " view-value " id = " view_employer_address " ></ span ></ div >
2026-02-02 10:08:12 +00:00
< div class = " col-md-4 " >< span class = " view-label " > Ville employeur :</ span > < span class = " view-value " id = " view_employer_city " ></ span ></ div >
2026-01-20 14:16:54 +00:00
</ div >
</ div >
2026-02-02 10:08:12 +00:00
< div class = " modal-footer " style = " background-color: #f9f9f9; " >
<!-- BLOC 1 : Boutons par défaut ( Fermer , Rejeter , Valider ) -->
< div id = " default-actions " style = " display: flex; justify-content: space-between; " >
< button type = " button " class = " btn btn-default " data - dismiss = " modal " > Fermer </ button >
< div >
< button type = " button " class = " btn btn-danger btn-lg " id = " btn-show-reject-input " >
< i class = " fa fa-times " ></ i > REJETER
</ button >
< button type = " button " class = " btn btn-success btn-lg " id = " btn-validate-request " style = " margin-left: 10px; " >
< i class = " fa fa-check " ></ i > VALIDER
</ button >
</ div >
2026-01-20 14:16:54 +00:00
</ div >
2026-02-02 10:08:12 +00:00
<!-- BLOC 2 : Zone de saisie du motif ( Cachée par défaut ) -->
< div id = " reject-area " style = " display: none; " >
< div class = " form-group text-left " >
< label class = " text-danger " > Motif du rejet * :</ label >
< textarea id = " reject_reason " class = " form-control " rows = " 3 " placeholder = " Veuillez expliquer la raison du rejet (Ex: Document illisible, ID incorrect...) " ></ textarea >
</ div >
< div class = " text-right " >
< button type = " button " class = " btn btn-default " id = " btn-cancel-reject " > Annuler </ button >
< button type = " button " class = " btn btn-danger " id = " btn-confirm-reject " >
Confirmer le rejet
</ button >
</ div >
</ div >
2026-01-20 14:16:54 +00:00
</ div >
</ div >
</ div >
</ div >
<!-- =======================================================
MODAL 2 : VÉRIFICATION RATTACHEMENT
======================================================= -->
< div class = " modal fade " id = " reviewLinkModal " >
< 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 text-center " > Vérification des informations de la demande de rattachment de compte </ h4 >
</ div >
< div class = " modal-body " >
< input type = " hidden " id = " link_id_transaction " >
< div class = " row " >
< 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 " > 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 " > Téléphone :</ span > < span class = " view-value " id = " link_phone " ></ span ></ div >
< div class = " col-md-12 " >< h5 class = " section-header " > Information Banque & Compte </ h5 ></ 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 " > 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-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 >
</ div >
< div class = " modal-footer " style = " background-color: #f9f9f9; display: flex; justify-content: space-between; " >
< button type = " button " class = " btn btn-default " data - dismiss = " modal " > Fermer </ button >
< div >
< button type = " button " class = " btn btn-danger " id = " btn-reject-link " >< i class = " fa fa-times " ></ i > Rejeter </ button >
< button type = " button " class = " btn btn-success " id = " btn-validate-link " style = " margin-left: 10px; " >< i class = " fa fa-check " ></ i > Valider </ button >
</ div >
</ div >
</ div >
</ div >
</ div >
<!-- =======================================================
MODAL 3 : EDIT ( COMPLET AVEC TOUS LES CHAMPS )
======================================================= -->
2025-12-10 17:00:48 +00:00
< div class = " modal fade " id = " editModal " >
< div class = " modal-dialog modal-lg " >
< div class = " modal-content " >
< div class = " modal-header " >
< button type = " button " class = " close " data - dismiss = " modal " >< span >& times ; </ span ></ button >
< h4 class = " modal-title text-center " > Modifier la demande </ h4 >
</ div >
< div class = " modal-body " >
< form id = " update-form " class = " bottom-75 center-block " >
< input type = " hidden " name = " id " id = " edit_id " >
< div class = " row " >
2026-01-20 14:16:54 +00:00
< div class = " col-md-6 " >< label > Nom </ label >< input id = " edit_lastname " name = " lastname " class = " form-control input-lg " required ></ div >
< div class = " col-md-6 " >< label > Prénom </ label >< input id = " edit_firstname " name = " firstname " class = " form-control input-lg " required ></ div >
< div class = " col-md-6 " >< label > Numéro de compte </ label >< input id = " edit_account_number " name = " account_number " class = " form-control input-lg " ></ div >
2026-02-02 10:08:12 +00:00
< div class = " col-md-6 " >< label > Code client </ label >< input id = " edit_customer_number " name = " customer_number " class = " form-control input-lg " ></ div >
2026-01-20 14:16:54 +00:00
< div class = " col-md-6 " >< label > IBAN </ label >< input id = " edit_iban " name = " iban " class = " form-control input-lg " ></ div >
2026-02-02 10:08:12 +00:00
< div class = " col-md-6 " >< label > Type de compte </ label >< input id = " edit_type " name = " type " class = " form-control input-lg " readonly ></ div >
< div class = " col-md-6 " >< label > Balance </ label >< input id = " edit_balance " name = " balance " class = " form-control input-lg " disabled ></ div >
2025-12-10 17:00:48 +00:00
< div class = " col-md-6 " >
< label > Statut du compte </ label >
< select id = " edit_status " name = " status " class = " form-control input-lg " required >
< option value = " pending " > En attente </ option >
< option value = " active " > Activé </ option >
2026-01-20 14:16:54 +00:00
< option value = " validated " > Validé </ option >
2025-12-10 17:00:48 +00:00
< option value = " rejected " > Rejeté </ option >
< option value = " close " > Fermé </ option >
</ select >
</ div >
2026-01-20 14:16:54 +00:00
< div class = " col-md-6 " >< label > Motif </ label >< input id = " edit_reason " name = " reason " class = " form-control input-lg " required ></ div >
2025-12-10 17:00:48 +00:00
2026-01-20 14:16:54 +00:00
< div class = " col-md-6 " >< label > Date de naissance </ label >< input id = " edit_birth_date " name = " birth_date " class = " form-control input-lg " required ></ div >
< div class = " col-md-6 " >< label > Pays de naissance </ label >< input id = " edit_birth_country " name = " birth_country " class = " form-control input-lg " required ></ div >
< div class = " col-md-6 " >< label > Ville de naissance </ label >< input id = " edit_birth_city " name = " birth_city " class = " form-control input-lg " required ></ div >
< div class = " col-md-6 " >< label > Nationalité </ label >< input id = " edit_nationality " name = " nationality " class = " form-control input-lg " required ></ div >
2025-12-10 17:00:48 +00:00
< div class = " col-md-6 " >
< label > Statut matrimonial </ label >
< select id = " edit_marital_status " name = " marital_status " class = " form-control input-lg " required >
< option value = " celibataire " > Célibataire </ option >
< option value = " marie " > Marié </ option >
< option value = " veuf " > Veuf </ option >
< option value = " divorce " > Divorcé </ option >
</ select >
</ div >
2026-02-02 10:08:12 +00:00
< div class = " col-md-6 " >< label > Nom du conjoint </ label >< input id = " edit_spouse_name " name = " spouse_name " class = " form-control input-lg " ></ div >
< div class = " col-md-6 " >< label > Numéro de téléphone </ label >< input id = " edit_phone_number " name = " phone_number " class = " form-control input-lg " required ></ div >
< div class = " col-md-6 " >< label > Numéro d ' identification </ label >< input id = " edit_identification_number " name = " identification_number " class = " form-control input-lg " required ></ div >
2026-01-20 14:16:54 +00:00
< div class = " col-md-6 " >< label > Profession </ label >< input id = " edit_profession " name = " profession " class = " form-control input-lg " required ></ div >
2025-12-10 17:00:48 +00:00
2026-01-20 14:16:54 +00:00
< div class = " col-md-6 " >< label > Nom de l’ employeur </ label >< input id = " edit_employer_name " name = " employer_name " class = " form-control input-lg " ></ div >
< div class = " col-md-6 " >< label > Adresse de l’ employeur </ label >< input id = " edit_employer_address " name = " employer_address " class = " form-control input-lg " ></ div >
2026-02-02 10:08:12 +00:00
< div class = " col-md-6 " >< label > Ville de l’ employeur </ label >< input id = " edit_employer_city " name = " employer_city " class = " form-control input-lg " ></ div >
2026-01-20 14:16:54 +00:00
< div class = " col-md-6 " >< label > Date de création </ label >< input id = " edit_created_at " readonly class = " form-control input-lg " ></ div >
2025-12-10 17:00:48 +00:00
</ div >
< br >
< button type = " submit " class = " btn btn-primary " id = " btn-save-edit " > Enregistrer </ button >
< button type = " button " class = " btn btn-default pull-right " data - dismiss = " modal " > Fermer </ button >
</ form >
</ div >
</ div >
</ div >
</ div >
2026-01-20 14:16:54 +00:00
<!-- MODAL DELETE ( Agency ) -->
2025-12-10 17:00:48 +00:00
< div class = " modal fade " id = " deleteModal " >
< div class = " modal-dialog " >
< div class = " modal-content " >
2026-01-20 14:16:54 +00:00
< div class = " modal-header " >< button type = " button " class = " close " data - dismiss = " modal " >< span >& times ; </ span ></ button >< h4 class = " modal-title " > Confirmation </ h4 ></ div >
< div class = " modal-body " >< p > Voulez - vous vraiment supprimer ce compte ? </ p >< input type = " hidden " id = " delete_id " ></ div >
2025-12-10 17:00:48 +00:00
< div class = " modal-footer " >
< button type = " button " class = " btn btn-default " data - dismiss = " modal " > Annuler </ button >
< button type = " button " id = " confirmDelete " class = " btn btn-danger " > Supprimer </ button >
</ div >
</ div >
</ div >
</ div >
2026-01-20 14:16:54 +00:00
<!-- Scripts -->
2025-12-10 17:00:48 +00:00
< script src = " https://code.jquery.com/jquery-2.2.4.min.js " ></ script >
< script src = " <?= base_url('bower_components/bootstrap/dist/js/bootstrap.min.js') ?> " ></ script >
< script src = " https://cdn.datatables.net/1.13.6/js/jquery.dataTables.min.js " ></ script >
< script src = " https://cdn.datatables.net/1.13.6/js/dataTables.bootstrap.min.js " ></ script >
2026-01-20 14:16:54 +00:00
<!-- Export Scripts -->
< script src = " https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js " ></ script >
< script src = " https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.53/pdfmake.min.js " ></ script >
< script src = " https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.53/vfs_fonts.js " ></ script >
< script src = " https://cdn.datatables.net/buttons/2.4.1/js/dataTables.buttons.min.js " ></ script >
< script src = " https://cdn.datatables.net/buttons/2.4.1/js/buttons.bootstrap.min.js " ></ script >
< script src = " https://cdn.datatables.net/buttons/2.4.1/js/buttons.html5.min.js " ></ script >
< script src = " https://cdn.datatables.net/buttons/2.4.1/js/buttons.print.min.js " ></ script >
2025-12-10 17:00:48 +00:00
< script src = " <?= base_url('bower_components/toastr/toastr.js') ?> " ></ script >
< script src = " https://cdn.jsdelivr.net/npm/flatpickr " ></ script >
< script >
$ ( document ) . ready ( function () {
2026-01-20 14:16:54 +00:00
// Configuration commune pour l'exportation
const exportButtonsConfig = [
'pageLength' ,
{
extend : 'excelHtml5' ,
text : '<i class="fa fa-file-excel-o"></i> Excel' ,
titleAttr : 'Exporter en Excel' ,
className : 'btn btn-success btn-sm' ,
exportOptions : { columns : ':not(:last-child)' }
},
{
extend : 'csvHtml5' ,
text : '<i class="fa fa-file-text-o"></i> CSV' ,
titleAttr : 'Exporter en CSV' ,
className : 'btn btn-info btn-sm' ,
exportOptions : { columns : ':not(:last-child)' }
},
{
extend : 'pdfHtml5' ,
text : '<i class="fa fa-file-pdf-o"></i> PDF' ,
titleAttr : 'Exporter en PDF' ,
className : 'btn btn-danger btn-sm' ,
orientation : 'landscape' ,
pageSize : 'LEGAL' ,
exportOptions : { columns : ':not(:last-child)' }
}
];
// TABLEAU 1 : COMPTES AGENCE
2025-12-10 17:00:48 +00:00
$ ( '#accountsTable' ) . DataTable ({
" pageLength " : 10 ,
" ordering " : true ,
2026-01-20 14:16:54 +00:00
" scrollX " : true ,
" order " : [[ 0 , " desc " ]],
dom : " <'row'<'col-sm-6'B><'col-sm-6'f>> " +
" <'row'<'col-sm-12'tr>> " +
" <'row'<'col-sm-5'i><'col-sm-7'p>> " ,
buttons : exportButtonsConfig
});
2025-12-10 17:00:48 +00:00
2026-01-20 14:16:54 +00:00
// TABLEAU 2 : DEMANDES DE RATTACHEMENT
$ ( '#linksTable' ) . DataTable ({
" pageLength " : 10 ,
" ordering " : true ,
" scrollX " : true ,
" order " : [[ 0 , " desc " ]],
dom : " <'row'<'col-sm-6'B><'col-sm-6'f>> " +
" <'row'<'col-sm-12'tr>> " +
" <'row'<'col-sm-5'i><'col-sm-7'p>> " ,
buttons : exportButtonsConfig
2025-12-10 17:00:48 +00:00
});
2026-01-20 14:16:54 +00:00
// Datepicker pour le champ date de naissance
flatpickr ( " #edit_birth_date " , {
2025-12-10 17:00:48 +00:00
dateFormat : " Y-m-d " ,
maxDate : " today " ,
disableMobile : true
});
2026-01-20 14:16:54 +00:00
/* =====================================================
* LOGIQUE MODAL EDIT ( AGENCY ) - TOUS CHAMPS RESTAURÉS
2025-12-10 17:00:48 +00:00
* ===================================================== */
$ ( document ) . on ( " click " , " .open-edit-modal " , function () {
const fields = [
2026-02-02 10:08:12 +00:00
" id " , " lastname " , " firstname " , " account_number " , " iban " ,
2025-12-10 17:00:48 +00:00
" status " , " reason " , " balance " , " birth_date " , " birth_country " ,
2026-02-02 10:08:12 +00:00
" birth_city " , " identification_number " , " niu " , " phone_number " ,
" spouse_name " , " employer_city " , " nationality " ,
" marital_status " , " profession " , " customer_number " ,
" employer_name " , " employer_address " , " created_at " , " type "
2025-12-10 17:00:48 +00:00
];
fields . forEach ( f => {
$ ( " #edit_ " + f ) . val ( $ ( this ) . data ( f ));
});
});
$ ( " #btn-save-edit " ) . on ( " click " , function ( e ) {
e . preventDefault ();
$ . ajax ({
url : " <?= base_url('Gestion/update_request_agency'); ?> " ,
type : " POST " ,
data : $ ( " #update-form " ) . serialize (),
dataType : " json " ,
success : function ( res ) {
2026-01-20 14:16:54 +00:00
if ( res && res . success === " ok " ) {
$ ( '#editModal' ) . modal ( 'hide' );
toastr . success ( res . message );
setTimeout (() => location . reload (), 1500 );
} else {
toastr . error ( res . message || " Erreur lors de la mise à jour " );
2025-12-10 17:00:48 +00:00
}
},
2026-01-20 14:16:54 +00:00
error : function () { toastr . error ( " Erreur 500 " ); }
});
});
2025-12-10 17:00:48 +00:00
2026-01-20 14:16:54 +00:00
/* =====================================================
* LOGIQUE MODAL REVIEW ( AGENCY & LINK )
* ===================================================== */
2026-02-02 10:08:12 +00:00
$ ( document ) . on ( " click " , " .open-review-modal " , function () {
let id = $ ( this ) . data ( " id " );
$ ( " #review_id " ) . val ( id );
// Reset de l'interface (On remet les boutons par défaut et on vide le motif)
$ ( " #default-actions " ) . show ();
$ ( " #reject-area " ) . hide ();
$ ( " #reject_reason " ) . val ( " " );
// Remplissage des infos 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 " ];
fields . forEach ( f => { $ ( " #view_ " + f ) . text ( $ ( this ) . data ( f ) || " - " ); });
// Gestion des documents
let docFront = $ ( this ) . data ( " doc_front " );
let docBack = $ ( this ) . data ( " doc_back " );
$ ( " #hidden_doc_front " ) . val ( docFront );
$ ( " #hidden_doc_back " ) . val ( docBack );
// Affichage Image Front
if ( docFront && docFront !== " " ) {
$ ( " #container_doc_front " ) . html ( `<a href="${docFront}" target="_blank"><img src="${docFront}" class="img-thumbnail" style="max-height: 150px;"></a>` );
} else {
$ ( " #container_doc_front " ) . html ( '<span class="text-muted">Aucun document</span>' );
}
// Affichage Image Back
if ( docBack && docBack !== " " ) {
$ ( " #container_doc_back " ) . html ( `<a href="${docBack}" target="_blank"><img src="${docBack}" class="img-thumbnail" style="max-height: 150px;"></a>` );
} else {
$ ( " #container_doc_back " ) . html ( '<span class="text-muted">Aucun document</span>' );
}
2026-01-20 14:16:54 +00:00
});
2026-02-02 10:08:12 +00:00
/* =====================================================
* 2. LOGIQUE UI : BASCULEMENT VERS LA ZONE DE REJET
* ===================================================== */
// Quand on clique sur "REJETER" (le gros bouton rouge)
$ ( " #btn-show-reject-input " ) . click ( function () {
$ ( " #default-actions " ) . slideUp (); // On cache les boutons
$ ( " #reject-area " ) . slideDown (); // On affiche le textarea
});
// Quand on clique sur "Annuler" (dans la zone de rejet)
$ ( " #btn-cancel-reject " ) . click ( function () {
$ ( " #reject-area " ) . slideUp ();
$ ( " #default-actions " ) . slideDown ();
$ ( " #reject_reason " ) . val ( " " ); // On nettoie
});
/* =====================================================
* 3. ACTION : CONFIRMER LE REJET ( Update simple )
* ===================================================== */
$ ( " #btn-confirm-reject " ) . click ( function () {
let id = $ ( " #review_id " ) . val ();
let reason = $ ( " #reject_reason " ) . val () . trim ();
// Validation : Le motif est obligatoire
if ( reason === " " ) {
toastr . warning ( " Veuillez saisir un motif pour le rejet. " );
$ ( " #reject_reason " ) . focus ();
return ;
}
// Désactivation pour éviter double clic
$ ( this ) . prop ( 'disabled' , true ) . text ( 'Traitement...' );
$ . ajax ({
url : " <?= base_url('Gestion/update_request_agency'); ?> " ,
type : " POST " ,
data : {
id : id ,
status : 'rejected' ,
reason : reason // On envoie le motif saisi
},
dataType : " json " ,
success : function ( res ) {
if ( res && res . success === " ok " ) {
$ ( '#reviewModal' ) . modal ( 'hide' );
toastr . warning ( " Demande rejetée avec succès. " );
setTimeout (() => location . reload (), 1500 );
} else {
toastr . error ( res . message || " Erreur lors du rejet. " );
$ ( " #btn-confirm-reject " ) . prop ( 'disabled' , false ) . text ( 'Confirmer le rejet' );
}
},
error : function () {
toastr . error ( " Erreur serveur (500). " );
$ ( " #btn-confirm-reject " ) . prop ( 'disabled' , false ) . text ( 'Confirmer le rejet' );
}
});
});
/* =====================================================
* LOGIQUE DE VALIDATION ( AGENCY BANKING )
* ===================================================== */
// 1. Fonction pour VALIDER
function validateAgencyRequest () {
let id = $ ( " #review_id " ) . val ();
// Récupération des documents (stockés dans les inputs cachés lors de l'ouverture du modal)
let docFront = $ ( " #hidden_doc_front " ) . val ();
let docBack = $ ( " #hidden_doc_back " ) . val ();
// On peut désactiver le bouton pour éviter le double clic
$ ( " #btn-validate-request " ) . prop ( 'disabled' , true ) . html ( '<i class="fa fa-spinner fa-spin"></i> Traitement...' );
$ . ajax ({
url : " <?= base_url('Gestion/validate_request_agency'); ?> " , // URL SPÉCIFIQUE
type : " POST " ,
data : {
id : id ,
status : 'active' ,
doc_front : docFront ,
doc_back : docBack
},
dataType : " json " ,
success : function ( res ) {
$ ( " #btn-validate-request " ) . prop ( 'disabled' , false ) . html ( 'VALIDER' );
if ( res && res . success === " ok " ) {
$ ( '#reviewModal' ) . modal ( 'hide' );
toastr . success ( res . message || " Demande validée avec succès ! " );
setTimeout (() => location . reload (), 1500 );
} else {
toastr . error ( res . message || " Erreur lors de la validation. " );
}
},
error : function () {
$ ( " #btn-validate-request " ) . prop ( 'disabled' , false ) . html ( 'VALIDER' );
toastr . error ( " Erreur serveur (500) lors de la validation. " );
}
});
}
// Clic sur VALIDER
$ ( " #btn-validate-request " ) . click ( function () {
validateAgencyRequest ();
});
2026-01-20 14:16:54 +00:00
// Logique Review LINK
$ ( document ) . on ( " click " , " .open-link-review-modal " , function () {
let id = $ ( this ) . data ( " id " );
$ ( " #link_id_transaction " ) . val ( id );
$ ( " #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 " ));
$ ( " #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 " ));
2025-12-10 17:00:48 +00:00
});
2026-01-20 14:16:54 +00:00
function processLinkRequest ( is_verified_status ) {
let id = $ ( " #link_id_transaction " ) . val ();
$ . ajax ({
url : " <?= base_url('Gestion/update_link_request'); ?> " ,
type : " POST " ,
data : { id_transaction : id , is_verified : is_verified_status },
dataType : " json " ,
success : function ( res ) {
if ( res && res . success === " ok " ) {
$ ( '#reviewLinkModal' ) . modal ( 'hide' );
toastr . success ( res . message || " Statut mis à jour ! " );
setTimeout (() => location . reload (), 1500 );
} else { toastr . error ( res . message || " Erreur serveur " ); }
}
});
}
$ ( " #btn-validate-link " ) . click ( function () { processLinkRequest ( 1 ); });
$ ( " #btn-reject-link " ) . click ( function () { processLinkRequest ( 2 ); });
2025-12-10 17:00:48 +00:00
/* =====================================================
2026-01-20 14:16:54 +00:00
* LOGIQUE DELETE
2025-12-10 17:00:48 +00:00
* ===================================================== */
window . deleteRequest = function ( id ) {
$ ( " #delete_id " ) . val ( id );
$ ( " #deleteModal " ) . modal ( " show " );
};
$ ( " #confirmDelete " ) . click ( function () {
$ . ajax ({
url : " <?= base_url('Gestion/delete_request_agency') ?> " ,
method : " POST " ,
2026-01-20 14:16:54 +00:00
data : { id : $ ( " #delete_id " ) . val () },
2025-12-10 17:00:48 +00:00
dataType : " json " ,
success : function ( response ) {
if ( response . success === " ok " ) {
$ ( " #deleteModal " ) . modal ( " hide " );
toastr . success ( response . message );
2026-01-20 14:16:54 +00:00
setTimeout (() => location . reload (), 1500 );
2025-12-10 17:00:48 +00:00
}
}
});
});
});
</ script >
2026-01-20 14:16:54 +00:00
</ body >
</ html >