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 .= ''; } if (in_array('deleteRecouvrement', $this->permission)) { $buttons .= ' '; } $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 .= ''; } if (in_array('deleteRecouvrement', $this->permission)) { $buttons .= ' '; } $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 "
";
        // 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);
    }
}