diff --git a/app/Config/Routes.php b/app/Config/Routes.php
index f20770c..e0f01c0 100644
--- a/app/Config/Routes.php
+++ b/app/Config/Routes.php
@@ -76,6 +76,8 @@ $routes->get('Customer/getReceiptDetails/(:num)', 'Customer::getReceiptDetails/$
$routes->post("insert_donor", "Customer::insert_donor");
$routes->post("insert_ajaxdonor", "Customer::insert_ajaxdonor");
$routes->get("delete_donor/(:any)", "Customer::delete_donor/$1");
+$routes->get("export_Donor", "Customer::export_donor");
+$routes->post("import_Donor", "Customer::import_donor");
#Donor group Routes (renamed as contributor group : 20/03/2024)
$routes->get('contributor_group/', 'Customer::donor_group');
@@ -103,6 +105,8 @@ $routes->post("get_donor_details", "Invoice::get_donor_details");
$routes->post("save_invoice/", "Invoice::save_invoice/");
$routes->add('approve_invoice/(:num)', 'Invoice::approve_invoice/$1');
$routes->get('generate_invoice_pdf/(:num)', 'Invoice::generate_invoice_pdf/$1');
+$routes->get("export_receipt", "Invoice::export_receipt");
+$routes->post("import_receipt", "Invoice::import_receipt");
#Report Routes
$routes->match(['get','post'],'/general_inv_rp','Invoice::general_inv_rp');
diff --git a/app/Controllers/BaseController.php b/app/Controllers/BaseController.php
index 924d1cb..6fed567 100644
--- a/app/Controllers/BaseController.php
+++ b/app/Controllers/BaseController.php
@@ -85,6 +85,10 @@ abstract class BaseController extends Controller
$mergedData['browser_title']= $mergedData['company_name'] . ' | ' . $mergedData['company_short_name'] . ' ' . $mergedData['page_name'];
$mergedData['heading']= $mergedData['page_name'] === "Dashboard" ? 'Welcome to ' . $mergedData['company_name'] : "";
+ $reminder = $this->reminderMessage();
+ if((int)count($reminder['reminder']) > 0){
+ session()->setFlashdata('reminder', $reminder['reminder']);
+ }
echo view('template/header.php', $mergedData );
echo view('template/topbar.php', $mergedData);
echo view($viewpage, $mergedData);
@@ -161,4 +165,41 @@ abstract class BaseController extends Controller
}
+ public function reminderMessage(){
+
+ helper('session');
+ $session_bid = get_business_id();
+ // $reminderMessage = "";
+ $reminderMessage = [];
+
+ // $c = 0; //count
+
+ $am = new AuthenticationModel();
+ $bwhere = ['business_id'=> $session_bid,'isactive'=> 1];
+ $getreminder = $am->getreminder($bwhere);
+
+ $reminderThreshold = 30; // Set the reminder days (e.g., 30 days before expiration)
+
+ if (!empty($getreminder['80G_vaildupto'])) {
+ $expirationDate1 = strtotime($getreminder['80G_vaildupto']);
+ $daysUntilExpiration1 = ($expirationDate1 - time()) / (60 * 60 * 24);
+ if ($daysUntilExpiration1 <= $reminderThreshold && $daysUntilExpiration1 >= 0) {
+ // $reminderMessage .= "Reminder: The 80G registration will expire in " . ceil($daysUntilExpiration1) . " days.";
+ array_push($reminderMessage, "Reminder: The 80G registration will expire in " . ceil($daysUntilExpiration1) . " days.");
+ // $c++;
+ }
+ }
+
+ if (!empty($getreminder['12AA_vaildupto'])) {
+ $expirationDate2 = strtotime($getreminder['12AA_vaildupto']);
+ $daysUntilExpiration2 = ($expirationDate2 - time()) / (60 * 60 * 24);
+ if ($daysUntilExpiration2 <= $reminderThreshold && $daysUntilExpiration2 >= 0) {
+ // $reminderMessage .= "
Reminder: The 12AA registration will expire in " . ceil($daysUntilExpiration2) . " days.";
+ array_push($reminderMessage, "Reminder: The 12AA registration will expire in " . ceil($daysUntilExpiration2) . " days.");
+ // $c++;
+ }
+ }
+ return ["reminder"=>$reminderMessage];//,"count"=>$c];
+
+ }
}
\ No newline at end of file
diff --git a/app/Controllers/Business.php b/app/Controllers/Business.php
index 1c6d92a..07ec03e 100644
--- a/app/Controllers/Business.php
+++ b/app/Controllers/Business.php
@@ -141,6 +141,9 @@ class Business extends BaseController
'org_reg_no' => $this->request->getPost('org_reg_no'),
'terms' => $this->request->getPost('bterms'),
'80G' => $this->request->getPost('80G'),
+ '12AA' => $this->request->getPost('12AA'),
+ '80G_vaildupto' => $this->request->getPost('80G_vaildupto'),
+ '12AA_vaildupto' => $this->request->getPost('12AA_vaildupto'),
'site_name' => $this->request->getPost('site_name'),
'site_title' => $this->request->getPost('site_title'),
'admin_email' => $this->request->getPost('admin_email'),
@@ -228,7 +231,6 @@ class Business extends BaseController
if (!empty($missingValues)) {
$where = ['isactive' => 1, 'business_id'=>$bid];
$model->inactiveMissingBuinessBranchDetails($where, $missingValues);
- echo
$this->logger->info("BuinessBranch: Inactived Missing Count = " . count($missingValues)." That Primary ID = ".implode(",",$BBprimaryid));
}
}
diff --git a/app/Controllers/Customer.php b/app/Controllers/Customer.php
index c42d283..427fbc8 100644
--- a/app/Controllers/Customer.php
+++ b/app/Controllers/Customer.php
@@ -5,6 +5,12 @@ namespace App\Controllers;
use App\Models\CustomerModel;
use App\Models\SubscriptionModel;
+use PhpOffice\PhpSpreadsheet\Spreadsheet;
+use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
+use PhpOffice\PhpSpreadsheet\Reader\Csv as ReaderCsv;
+use PhpOffice\PhpSpreadsheet\Reader\Xlsx as ReaderXlsx;
+
+
class Customer extends BaseController
{
@@ -510,16 +516,183 @@ class Customer extends BaseController
}
return redirect()->route('donor_group');
}
- // Example in your controller
-public function getReceiptDetails($donorId)
-{
- $CustomerModel = new CustomerModel();
- // Fetch receipt details from the model based on $donorId
- $receiptDetails = $CustomerModel->getReceiptDetailsByDonorId($donorId);
- // Return the details as JSON
- return $this->response->setJSON($receiptDetails);
-}
+ public function getReceiptDetails($donorId)
+ {
+ $CustomerModel = new CustomerModel();
+
+ $receiptDetails = $CustomerModel->getReceiptDetailsByDonorId($donorId);
+
+ return $this->response->setJSON($receiptDetails);
+ }
+
+ public function export_donor()
+ {
+ helper('session');
+
+ $session_bid = get_business_id();
+
+ $CustomerModel = new CustomerModel();
+
+ $data = $CustomerModel->export_excel($session_bid);
+
+ $spreadsheet = new Spreadsheet();
+ $sheet = $spreadsheet->getActiveSheet();
+
+ $sheet->mergeCells('B3:P3');
+ $sheet->getStyle('B3')->getAlignment()->setHorizontal('center');
+ $sheet->setTitle('Contributor details');
+
+ $headers = [
+ 'B3' => 'Contributor Details',
+ 'A5' => 'Contributor Name',
+ 'B5' => 'Contributor Type',
+ 'C5' => 'Organization Name',
+ 'D5' => 'Organization Reg Details',
+ 'E5' => 'Contact Number',
+ 'F5' => 'Email Address',
+ 'G5' => 'PAN',
+ 'H5' => 'Aadhaar Number',
+ 'I5' => 'Passport Number',
+ 'J5' => 'Address',
+ 'K5' => 'Country',
+ 'L5' => 'State',
+ 'M5' => 'City',
+ 'N5' => 'Postal Code',
+ 'O5' => 'CreatedBy',
+ 'P5' => 'UpdatedBy',
+ 'Q5' => 'CreatedAt',
+ 'R5' => 'UpdatedAt',
+ 'S5' => 'IsActive'
+ ];
+
+ foreach ($headers as $cell => $value) {
+ $sheet->setCellValue($cell, $value);
+ $sheet->getStyle($cell)->getFont()->setSize($cell == 'B3' ? 14 : 12);
+ $sheet->getStyle($cell)->getFont()->setBold(true);
+ }
+
+ if ($data) {
+ $row = 6;
+ foreach ($data as $d) {
+ $col = 'A'; // Start from column A
+ foreach ($d as $value) {
+ $sheet->setCellValue($col . $row, $value);
+ $col++;
+ }
+ $row++;
+ }
+ }
+
+ ob_clean();
+
+ $writer = new Xlsx($spreadsheet);
+ $filename = 'exportDonor.xlsx';
+
+ header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
+ header('Content-Disposition: attachment;filename="'. $filename .'"');
+ header('Cache-Control: max-age=0');
+ header('Expires: 0');
+ header('Pragma: public');
+
+ $writer->save('php://output');
+ exit;
+ }
+
+ public function import_donor()
+ {
+
+ $ip_address = $_SERVER['REMOTE_ADDR'];
+
+ helper('session');
+ $session_uid = get_logged_user_id();
+ $session_bid = get_business_id();
+
+ $json = []; // Arr - Json For Message FrontEnd
+ $list = []; // Arr - Store on DB
+ $path = ROOTPATH . 'public/import/donor/';
+ $fileNewName = "";
+
+ $file = $this->request->getFile('file');
+
+ if (!is_dir($path)) {
+ mkdir($path, 0777, true);
+ }
+
+ $fileName = $file->getName();
+ if ($fileName !== "") {
+ if ($file->isValid() && !$file->hasMoved()) {
+ $newName = $file->getRandomName();
+ $file->move($path, $newName);
+ $fileNewName = $newName;
+ }
+ }
+
+ if (!$fileNewName) {
+ $json = ['error_message' => "Failed to upload file"];
+ return $this->response->setJSON($json);
+ }
+
+ $arr_file = explode('.', $fileName);
+ $extension = $arr_file[1];
+ if ('csv' == $extension) {
+ $reader = new ReaderCsv();
+ } else if ('xlsx' == $extension) {
+ $reader = new ReaderXlsx();
+ } else {
+ $json = ['error_message' => "Unsupported file type"];
+ return $this->response->setJSON($json);
+ }
+
+ if (!$reader) {
+ $json = ['error_message' => "Failed to initialize reader"];
+ return $this->response->setJSON($json);
+ }
+
+ $spreadsheet = $reader->load($path.$fileNewName);
+ $sheet_data = $spreadsheet->getActiveSheet()->toArray();
+
+ if(!empty($sheet_data)){
+ foreach ($sheet_data as $key => $val) {
+ if ($key != 0) { // key zero - header
+ $list[] = [
+ 'business_id' => $session_bid,
+ 'first_name' => $val[0],
+ 'donor_type' => $val[1],
+ 'org_name' => $val[2] ? $val[2] : null ,
+ 'org_reg_details' => $val[3] ? $val[3] : null,
+ 'mobile_no' => $val[4] ? $val[4] : null,
+ 'email' => $val[5],
+ 'pan_no' => $val[6],
+ 'adhar_no' => $val[7],
+ 'passport_no' => $val[8] ? $val[8] : null ,
+ 'address' => $val[9],
+ 'country' => $val[10],
+ 'state' => $val[11],
+ 'city' => $val[12],
+ 'postal_code' => $val[13],
+ 'created_by' => $session_uid,
+ 'XL_file_name' => $fileNewName,
+ 'ip_address' => $ip_address
+ ];
+ }
+ }
+ }else{
+ $json = ['error_message' => "There is no record to import"];
+ return $this->response->setJSON($json);
+ }
+
+ if (count($list) > 0) {
+ $CustomerModel = new CustomerModel();
+
+ $result = $CustomerModel->bulkInsert($list);
+ ($result) ? ['success_message' => "All Entries are imported successfully."]
+ : ['error_message' => "Something went wrong. Please try again."];
+ } else {
+ $json = ['error_message' => "No new record is found."];
+ }
+ return $this->response->setJSON($json);
+ }
}
diff --git a/app/Controllers/Invoice.php b/app/Controllers/Invoice.php
index d494240..9ee95c3 100644
--- a/app/Controllers/Invoice.php
+++ b/app/Controllers/Invoice.php
@@ -15,6 +15,10 @@ use Mpdf\Mpdf;
use Dompdf\Dompdf;
use Dompdf\Options;
+use PhpOffice\PhpSpreadsheet\Spreadsheet;
+use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
+use PhpOffice\PhpSpreadsheet\Reader\Csv as ReaderCsv;
+use PhpOffice\PhpSpreadsheet\Reader\Xlsx as ReaderXlsx;
class Invoice extends BaseController
{
@@ -509,7 +513,7 @@ class Invoice extends BaseController
$where = ['business_id' => (int)get_business_id()];
$currency_data = $model->setTable('business')->select('currency')->where($where)->findAll();
- $terms_data = $this->BusinessModel->select('terms,signature')->where($where)->findAll();
+ $terms_data = $this->BusinessModel->select('terms,signature,80G,12AA,80G_vaildupto,12AA_vaildupto')->where($where)->findAll();
$data = $model->getInvoiceData($id);
// print_r($data);die;
// Check if data is empty
@@ -544,6 +548,7 @@ class Invoice extends BaseController
}
$digits = strlen((string)$data[0]->amount);
$amount_in_words = $digits <= 9 ? $this->convertNumberToWords($data[0]->amount) : $data[0]->amount;
+ ;
$html = view('invoice_pdf_template', [
'data' => $data[0],
'currency' => $data[0]->currency,
@@ -551,7 +556,11 @@ class Invoice extends BaseController
'baseurl' => $baseurl,
'signature' => $data[0]->signature,
'staff_name' => $user[0]['first_name'] . ' ' .$user[0]['last_name'],
- 'Notes' => $terms_data[0]['terms']
+ 'Notes' => $terms_data[0]['terms'],
+ 'eightyG' => $terms_data[0]['80G'] ? '