You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

418 lines
16 KiB

<?php
namespace App\Controllers;
use App\Controllers\AdminController;
use App\Models\Orders;
use App\Models\Recouvrement;
use App\Models\SortieCaisse;
use App\Models\Avance;
class RecouvrementController extends AdminController
{
public function __construct()
{
parent::__construct();
}
private $pageTitle = 'Recouvrements';
public function index()
{
$this->verifyRole('viewRecouvrement');
$data = $this->getTotalsArray();
$this->render_template('recouvrement/index', $data);
}
// Create an AJAX endpoint to access the fetchTotal() function
public function getTotalData()
{
echo $this->fetchTotal();
exit;
}
public function fetchTotal()
{
$data = $this->getTotalsArray();
return $this->response->setJSON($data);
}
private function getTotalsArray(): array
{
$orders = new Orders();
$recouvrement = new Recouvrement();
$sortieCaisse = new SortieCaisse();
$avance = new Avance();
// Récupère les données brutes
$paymentDataOrders = $orders->getPaymentModes();
$paymentDataAvance = $avance->getPaymentModesAvance();
$total_sortie_caisse = $sortieCaisse->getTotalSortieCaisse()->mr ?? 0;
$totalRecouvrement = $recouvrement->getTotalRecouvrements();
// Totaux recouvrement
$me = $totalRecouvrement->me ?? 0;
$bm = $totalRecouvrement->bm ?? 0;
$be = $totalRecouvrement->be ?? 0;
$mb = $totalRecouvrement->mb ?? 0;
// Totaux paiements Orders
$total_orders = $paymentDataOrders->total ?? 0;
$mv1_orders = $paymentDataOrders->total_mvola1 ?? 0;
$mv2_orders = $paymentDataOrders->total_mvola2 ?? 0;
$es1_orders = $paymentDataOrders->total_espece1 ?? 0;
$es2_orders = $paymentDataOrders->total_espece2 ?? 0;
$vb1_orders = $paymentDataOrders->total_virement_bancaire1 ?? 0;
$vb2_orders = $paymentDataOrders->total_virement_bancaire2 ?? 0;
// Totaux paiements Avances
$total_avances = $paymentDataAvance->total ?? 0;
$mv_avances = $paymentDataAvance->total_mvola ?? 0;
$es_avances = $paymentDataAvance->total_espece ?? 0;
$vb_avances = $paymentDataAvance->total_virement_bancaire ?? 0;
$ta = $avance->getTotalAvance()->ta ?? 0;
// Combinaison Orders + Avances
$total_mvola = $mv1_orders + $mv2_orders + $mv_avances;
$total_espece = $es1_orders + $es2_orders + $es_avances;
$total_vb = $vb1_orders + $vb2_orders + $vb_avances;
$total = $total_orders + $total_avances;
// Ajustements avec recouvrements et sorties caisse
$total_mvola_final = $total_mvola - $me - $mb + $bm;
$total_espece_final = $es1_orders + $es2_orders + $es_avances - $total_sortie_caisse;
$total_virement_bancaire_final = $total_vb - $be - $bm + $mb;
return [
'total' => $total,
'total_mvola' => $total_mvola_final,
'total_espece' => $total_espece_final,
'total_virement_bancaire'=> $total_virement_bancaire_final,
'page_title' => $this->pageTitle,
'permission' => $this->permission
];
}
public function fetchRecouvrementData()
{
helper(['url', 'form']);
$Recouvrement = new Recouvrement();
// Initialiser les variables pour DataTables
$draw = intval($this->request->getVar('draw'));
$session = session();
$users = $session->get('user');
if($users['group_name'] === "Caissière"){
$data = $Recouvrement->getAllRecouvrements($users['id'] );
$totalRecords = count($data); // Nombre total de recouvrements
$result = [
"draw" => $draw,
"recordsTotal" => $totalRecords,
"recordsFiltered" => $totalRecords,
"data" => []
];
foreach ($data as $key => $value) {
$buttons = '';
if (in_array('updateRecouvrement', $this->permission)) {
$buttons .= '<button type="button" class="btn btn-default" onclick="editFunc(' . $value['recouvrement_id'] . ')" data-toggle="modal" data-target="#updateModal"><i class="fa fa-pencil"></i></button>';
}
if (in_array('deleteRecouvrement', $this->permission)) {
$buttons .= ' <button type="button" class="btn btn-danger" onclick="removeFunc(' . $value['recouvrement_id'] . ')" data-toggle="modal" data-target="#removeModal"><i class="fa fa-trash"></i></button>';
}
$result['data'][$key] = [
$value['recouvrement_id'],
number_format($value['recouvrement_montant'], 0, '.', ' '),
$value['recouvrement_date'],
$value['recouvrement_personnel'],
$value['send_money'],
$value['get_money'],
$buttons
];
}
return $this->response->setJSON($result);
}
$data = $Recouvrement->getAllRecouvrements();
$totalRecords = count($data); // Nombre total de recouvrements
$result = [
"draw" => $draw,
"recordsTotal" => $totalRecords,
"recordsFiltered" => $totalRecords,
"data" => []
];
foreach ($data as $key => $value) {
$buttons = '';
if (in_array('updateRecouvrement', $this->permission)) {
$buttons .= '<button type="button" class="btn btn-default" onclick="editFunc(' . $value['recouvrement_id'] . ')" data-toggle="modal" data-target="#updateModal"><i class="fa fa-pencil"></i></button>';
}
if (in_array('deleteRecouvrement', $this->permission)) {
$buttons .= ' <button type="button" class="btn btn-danger" onclick="removeFunc(' . $value['recouvrement_id'] . ')" data-toggle="modal" data-target="#removeModal"><i class="fa fa-trash"></i></button>';
}
$result['data'][$key] = [
$value['recouvrement_id'],
number_format($value['recouvrement_montant'], 0, '.', ' '),
$value['recouvrement_date'],
$value['recouvrement_personnel'],
$value['send_money'],
$value['get_money'],
$buttons
];
}
return $this->response->setJSON($result);
}
public function removeRecouvrement()
{
$this->verifyRole('deleteRecouvrement');
$recouvrement_id = $this->request->getPost('recouvrement_id');
$response = [];
if ($recouvrement_id) {
$Recouvrement = new Recouvrement();
if ($Recouvrement->deleteRecouvrement($recouvrement_id)) {
$response['success'] = true;
$response['messages'] = "Recouvrement supprimé avec succès !";
} else {
$response['success'] = false;
$response['messages'] = "Erreur lors de la suppression du recouvrement.";
}
} else {
$response['success'] = false;
$response['messages'] = "Veuillez actualiser la page.";
}
return $this->response->setJSON($response);
}
public function createRecouvrement()
{
$this->verifyRole('createRecouvrement');
$data['page_title'] = $this->pageTitle;
// echo "<pre>";
// die(var_dump($this->request->getPost()));
// Load validation service
$validation = \Config\Services::validation();
$validation->setRules([
'send_mode' => 'required',
'get_mode' => 'required',
'recouvrement_montant' => 'required',
'recouvrement_date' => 'required',
]);
$validationData = [
'send_mode' => $this->request->getPost('send_mode'),
'get_mode' => $this->request->getPost('get_mode'),
'recouvrement_montant' => $this->request->getPost('recouvrement_montant'),
'recouvrement_date' => $this->request->getPost('recouvrement_date'),
];
// Set validation rules
$Notification = new NotificationController();
$Recouvrement = new Recouvrement();
// $recouvrement_id = $this->request->getPost('recouvrement_id');
$session = session();
$users = $session->get('user');
if ($users && isset($users['firstname'], $users['lastname'])) {
$fullname = $users['firstname'] . ' ' . $users['lastname'];
}
// $orders = new Orders();
// $Recouvrement = new Recouvrement();
// $paymentData = $orders->getPaymentModes();
// $totalRecouvrement = $Recouvrement->getTotalRecouvrements();
// $total_recouvrement = $totalRecouvrement->total_recouvrement;
// Initialisation des totaux avec 0 au cas où il n'y aurait pas de données
// $total_mvola1 = isset($paymentData->total_mvola1) ? $paymentData->total_mvola1 : 0;
// $total_mvola2 = isset($paymentData->total_mvola2) ? $paymentData->total_mvola2 : 0;
// $total_mvola = $total_mvola1 + $total_mvola2;
// $total_mvola1 = $total_mvola - $total_recouvrement;
// die(var_dump($data['recouvrement']))
// if ($data['recouvrement_montant'] <= $total_mvola1) {
// if ($Recouvrement->addRecouvrement($data)) {
// session()->setFlashdata('success', 'Créé avec succès');
// $Notification->createNotification("Un nouveau recouvrement crée", "TOUS", 0, 'recouvrement/');
// return redirect()->to('recouvrement/');
// } else {
// session()->setFlashdata('errors', 'Error occurred while creating the product');
// return redirect()->to('recouvrement/');
// }
// } else {
// session()->setFlashdata('errors', 'Solde MVOLA insuffisant');
// return redirect()->to('recouvrement/');
// }
if ($validation->run($validationData)) {
// // Prepare data
$session = session();
$users = $session->get('user');
$data = [
'recouvrement_montant' => $this->request->getPost('recouvrement_montant'),
'recouvrement_date' => $this->request->getPost('recouvrement_date'),
'recouvrement_personnel' => $fullname,
'get_money' => $this->request->getPost('get_mode'),
'send_money' => $this->request->getPost('send_mode'),
'user_id' => $users['id'],
'store_id' => $users['store_id'],
];
if ($Recouvrement->addRecouvrement($data)) {
$Notification->createNotification("Un nouveau recouvrement a été crée", "Direction", (int)$users["store_id"], 'recouvrement');
$response['success'] = true;
$response['messages'] = 'Recouvrement créé avec succès';
} else {
$response['success'] = false;
$response['messages'] = 'Erreur lors de la création du recouvrement.';
}
} else {
// Validation failed, return error messages
$response['success'] = false;
$response['messages'] = $validation->getErrors();
}
return $this->response->setJSON($response);
}
public function updateRecouvrement($recouvrement_id)
{
$this->verifyRole('updateRecouvrement');
$data['page_title'] = $this->pageTitle;
// Load validation service
$validation = \Config\Services::validation();
// Set validation rules
$validation->setRules([
'product[]' => 'required'
]);
$validationData = [
'product[]' => $this->request->getPost('product[]')
];
$Recouvrement = new Recouvrement();
// $recouvrement_id = (int) $this->request->getPost('recouvrement_id');
if ($this->request->getMethod() === 'post') {
$data = [
'recouvrement_montant' => (int) $this->request->getPost('recouvrement_montant_edit'),
'recouvrement_date' => $this->request->getPost('recouvrement_date_edit')
];
if ($Recouvrement->updateRecouvrement($recouvrement_id, $data)) {
// $Notification->createNotification("Un nouveau recouvrement crée", "Conseil", $users['store_id'], 'recouvrement');
return $this->response->setJSON([
'success' => true,
'messages' => 'Recouvrement modifié avec succès !'
]);
} else {
return $this->response->setJSON([
'success' => false,
'messages' => 'Erreur lors de la modification du recouvrement.'
]);
}
}
}
public function fetchRecouvrementSingle($id)
{
// die(var_dump('hghjbhj'));
if ($id) {
$recouvrement = new Recouvrement();
$data = $recouvrement->getRecouvrementSingle($id);
echo json_encode($data);
}
}
public function fetchTotalRecouvrementData() {
helper(['url', 'form']);
$Recouvrement = new Recouvrement();
$start_date = $this->request->getGet('start_date');
$end_date = $this->request->getGet('end_date');
if ($start_date && $end_date) {
// Initialiser les variables pour DataTables
$draw = intval($this->request->getVar('draw'));
$session = session();
$users = $session->get('user');
if($users['group_name'] === "Caissière"){
$data = $Recouvrement->getTotalRecouvrements($users['id'] );
$result = [
"draw" => $draw,
"recordsTotal" => 1,
"recordsFiltered" => 1,
"data" => []
];
$totalRecouvrement = $Recouvrement->getTotalRecouvrements($users['id'], $start_date, $end_date );
$total_recouvrement_me = $totalRecouvrement->me;
$total_recouvrement_bm = $totalRecouvrement->bm;
$total_recouvrement_be = $totalRecouvrement->be;
$total_recouvrement_mb = $totalRecouvrement->mb;
$total_recouvrement = $total_recouvrement_me + $total_recouvrement_me + $total_recouvrement_be + $total_recouvrement_mb;
$data = [
number_format($total_recouvrement_me,0,'.',' '),
number_format($total_recouvrement_bm,0,'.',' '),
number_format($total_recouvrement_be,0,'.',' '),
number_format($total_recouvrement_mb,0,'.',' '),
number_format($total_recouvrement,0,'.',' '),
];
}
return $this->response->setJSON($result);
}
// Initialiser les variables pour DataTables
$draw = intval($this->request->getVar('draw'));
$session = session();
$users = $session->get('user');
if($users['group_name'] === "Caissière"){
$data = $Recouvrement->getTotalRecouvrements($users['id'] );
$result = [
"draw" => $draw,
"recordsTotal" => 1,
"recordsFiltered" => 1,
"data" => []
];
$totalRecouvrement = $Recouvrement->getTotalRecouvrements($users['id'] );
$total_recouvrement_me = $totalRecouvrement->me;
$total_recouvrement_bm = $totalRecouvrement->bm;
$total_recouvrement_be = $totalRecouvrement->be;
$total_recouvrement_mb = $totalRecouvrement->mb;
$total_recouvrement = $total_recouvrement_me + $total_recouvrement_me + $total_recouvrement_be + $total_recouvrement_mb;
$data = [
number_format($total_recouvrement_me,0,'.',' '),
number_format($total_recouvrement_bm,0,'.',' '),
number_format($total_recouvrement_be,0,'.',' '),
number_format($total_recouvrement_mb,0,'.',' '),
number_format($total_recouvrement,0,'.',' '),
];
}
return $this->response->setJSON($result);
}
}