From e9d1abc26fcf2825f638e82fc8c1dd7376446e80 Mon Sep 17 00:00:00 2001 From: VE10-Sanjeev Date: Fri, 7 Jun 2024 12:32:22 +0000 Subject: [PATCH] FIX_Bug : ps --- app/Controllers/Customer.php | 13 +++- app/Controllers/Invoice.php | 7 +- app/Models/CustomerModel.php | 2 +- app/Views/customer_form.php | 32 ++++---- app/Views/customer_list.php | 5 ++ app/Views/invoice_pdf_template.php | 21 +++++- composer.lock | 101 +++++++++++++------------- public/import/sample_contributor.xlsx | Bin 0 -> 6791 bytes 8 files changed, 110 insertions(+), 71 deletions(-) create mode 100644 public/import/sample_contributor.xlsx diff --git a/app/Controllers/Customer.php b/app/Controllers/Customer.php index 427fbc8..0e3b7c4 100644 --- a/app/Controllers/Customer.php +++ b/app/Controllers/Customer.php @@ -9,7 +9,8 @@ use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; use PhpOffice\PhpSpreadsheet\Reader\Csv as ReaderCsv; use PhpOffice\PhpSpreadsheet\Reader\Xlsx as ReaderXlsx; - +use PhpOffice\PhpSpreadsheet\Cell\DataType; +use PhpOffice\PhpSpreadsheet\Style\NumberFormat; class Customer extends BaseController { @@ -137,7 +138,7 @@ class Customer extends BaseController 'date_of_birth' => $dob, 'pan_no' => $pan, 'adhar_no' => $this->request->getPost('adhar_no'), - + 'passport_no' => $this->request->getPost('DonorType') == 'individual' && $this->request->getPost('passport_no') ? $this->request->getPost('passport_no') : null, 'donor_type' => $this->request->getPost('DonorType'), 'org_name' => $this->request->getPost('org_name') !== '' || $this->request->getPost('org_name') !== null ? $this->request->getPost('org_name') : NULL, 'org_reg_details'=> $this->request->getPost('org_reg_Details'), @@ -577,6 +578,14 @@ class Customer extends BaseController foreach ($data as $d) { $col = 'A'; // Start from column A foreach ($d as $value) { + + + if (is_numeric($value)) { + $sheet->setCellValueExplicit($col . $row, $value, DataType::TYPE_STRING); + $sheet->getStyle($col . $row)->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_NUMBER); + } else { + $sheet->setCellValue($col . $row, $value); + } $sheet->setCellValue($col . $row, $value); $col++; } diff --git a/app/Controllers/Invoice.php b/app/Controllers/Invoice.php index caac569..d823e3c 100644 --- a/app/Controllers/Invoice.php +++ b/app/Controllers/Invoice.php @@ -556,8 +556,11 @@ class Invoice extends BaseController 'signature' => $data[0]->signature, 'staff_name' => $user[0]['first_name'] . ' ' .$user[0]['last_name'], 'Notes' => $terms_data[0]['terms'], - 'eightyG' => $terms_data[0]['eightyG'] ? '
80G Registration No: '.$terms_data[0]['eightyG'].'Valid Upto : '. (!empty($terms_data[0]['eightyGVaildUpto'])) ?? date("d-m-Y", strtotime($terms_data[0]['eightyGVaildUpto'])) .'
' : '', - 'twelveAA' => $terms_data[0]['twelveAA'] ? '
12AA Registration No: '.$terms_data[0]['twelveAA'].'Valid Upto : '. (!empty($terms_data[0]['twelveAAVaildUpto'])) ?? date("d-m-Y", strtotime($terms_data[0]['twelveAAVaildUpto'])) .'
' : '' + 'eightyG' => $terms_data[0]['eightyG'], + 'eightyGVaildUpto' => $terms_data[0]['eightyGVaildUpto'], + 'twelveAA' => $terms_data[0]['twelveAA'], + 'twelveAAVaildUpto' => $terms_data[0]['twelveAAVaildUpto'], + ]); // echo $html;die; diff --git a/app/Models/CustomerModel.php b/app/Models/CustomerModel.php index 4366fb5..faf1dea 100644 --- a/app/Models/CustomerModel.php +++ b/app/Models/CustomerModel.php @@ -10,7 +10,7 @@ class CustomerModel extends Model protected $table = 'donor'; protected $primaryKey = 'donor_id '; // protected $allowedFields = ['donor_id ','first_name','city','last_name','email','mobile_no','country','state','postal_code' ,'address','profile_picture','date_of_birth','gender','mode','isactive','business_id']; - protected $allowedFields = ['donor_id ','first_name','city','last_name','email','mobile_no','country','state','postal_code' ,'address','org_name','date_of_birth','pan_no','adhar_no','org_reg_details','donor_type','isactive','business_id','created_by','updated_by','XL_file_name','ip_address']; + protected $allowedFields = ['donor_id ','first_name','city','last_name','email','mobile_no','country','state','postal_code' ,'address','org_name','date_of_birth','pan_no','adhar_no','org_reg_details','donor_type','isactive','business_id','created_by','updated_by','XL_file_name','ip_address','passport_no']; public function insertCustomer($data) { diff --git a/app/Views/customer_form.php b/app/Views/customer_form.php index d7560bd..4ed5320 100644 --- a/app/Views/customer_form.php +++ b/app/Views/customer_form.php @@ -94,7 +94,7 @@ - + @@ -176,28 +176,32 @@ var panInput = document.getElementById('pan_no'); var passportInput = document.getElementById('passport_no'); var errorMessage = document.getElementById('errorMessage'); - + var errorMessage = document.getElementById('passportValidationMessage'); if (type === 'organization') { panInput.setAttribute('required', 'required'); passportInput.removeAttribute('required'); errorMessage.textContent = ""; // Clear any existing error message + passportValidationMessage.textContent = ""; } else if (type === 'individual') { if (panInput.value === "" && passportInput.value === "") { // If both PAN and Passport are empty, require either one panInput.setAttribute('required', 'required'); passportInput.setAttribute('required', 'required'); errorMessage.textContent = "Either PAN or Passport is required."; + passportValidationMessage.textContent = "Either PAN or Passport is required."; } else { // If either PAN or Passport is filled, reset requirements panInput.removeAttribute('required'); passportInput.removeAttribute('required'); errorMessage.textContent = ""; // Clear error message + passportValidationMessage.textContent = ""; } } else { // For other type, set PAN or Passport as required based on the default logic panInput.removeAttribute('required'); passportInput.removeAttribute('required'); errorMessage.textContent = ""; // Clear any existing error message + passportValidationMessage.textContent = ""; } } @@ -238,21 +242,23 @@ invalidFields.forEach(function(field) { } } - - if (panValue !== '') { - if (!validatePANNumber(panValue)) { + if (panValue === '' && passportValue === '') { event.preventDefault(); // Prevent form submission return; + }else{ + if (panValue !== '') { + if (!validatePANNumber(panValue)) { + event.preventDefault(); // Prevent form submission + return; + } } - } - - - if (passportValue !== '') { - if (!validatePassport(passportValue)) { - event.preventDefault(); // Prevent form submission - return; + if (passportValue !== '') { + if (!validatePassport(passportValue)) { + event.preventDefault(); // Prevent form submission + return; + } } - } + } } if (form.checkValidity() === true) { diff --git a/app/Views/customer_list.php b/app/Views/customer_list.php index 7692264..8481693 100644 --- a/app/Views/customer_list.php +++ b/app/Views/customer_list.php @@ -7,6 +7,11 @@ " class="btn btn-info"> Export Contributor +
+ +

diff --git a/app/Views/invoice_pdf_template.php b/app/Views/invoice_pdf_template.php index 1061046..20e973a 100644 --- a/app/Views/invoice_pdf_template.php +++ b/app/Views/invoice_pdf_template.php @@ -104,10 +104,23 @@ " width="100px" alt="Signature"> - - -
-
+ + + + + +80G Registration No:  + Valid Upto:   + + + + +12AA Registration No:  + Valid Upto:   + + + + Note:  diff --git a/composer.lock b/composer.lock index ae3b51b..3a1cecd 100644 --- a/composer.lock +++ b/composer.lock @@ -4380,16 +4380,16 @@ }, { "name": "symfony/console", - "version": "v7.0.7", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "c981e0e9380ce9f146416bde3150c79197ce9986" + "reference": "9b008f2d7b21c74ef4d0c3de6077a642bc55ece3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/c981e0e9380ce9f146416bde3150c79197ce9986", - "reference": "c981e0e9380ce9f146416bde3150c79197ce9986", + "url": "https://api.github.com/repos/symfony/console/zipball/9b008f2d7b21c74ef4d0c3de6077a642bc55ece3", + "reference": "9b008f2d7b21c74ef4d0c3de6077a642bc55ece3", "shasum": "" }, "require": { @@ -4453,7 +4453,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.0.7" + "source": "https://github.com/symfony/console/tree/v7.1.1" }, "funding": [ { @@ -4469,7 +4469,7 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:29:19+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/deprecation-contracts", @@ -4540,16 +4540,16 @@ }, { "name": "symfony/event-dispatcher", - "version": "v7.0.7", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "db2a7fab994d67d92356bb39c367db115d9d30f9" + "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/db2a7fab994d67d92356bb39c367db115d9d30f9", - "reference": "db2a7fab994d67d92356bb39c367db115d9d30f9", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", + "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", "shasum": "" }, "require": { @@ -4600,7 +4600,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v7.0.7" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.1.1" }, "funding": [ { @@ -4616,7 +4616,7 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:29:19+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -4696,22 +4696,24 @@ }, { "name": "symfony/filesystem", - "version": "v7.0.7", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "cc168be6fbdcdf3401f50ae863ee3818ed4338f5" + "reference": "802e87002f919296c9f606457d9fa327a0b3d6b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/cc168be6fbdcdf3401f50ae863ee3818ed4338f5", - "reference": "cc168be6fbdcdf3401f50ae863ee3818ed4338f5", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/802e87002f919296c9f606457d9fa327a0b3d6b2", + "reference": "802e87002f919296c9f606457d9fa327a0b3d6b2", "shasum": "" }, "require": { "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8", + "symfony/polyfill-mbstring": "~1.8" + }, + "require-dev": { "symfony/process": "^6.4|^7.0" }, "type": "library", @@ -4740,7 +4742,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.0.7" + "source": "https://github.com/symfony/filesystem/tree/v7.1.1" }, "funding": [ { @@ -4756,20 +4758,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:29:19+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/finder", - "version": "v7.0.7", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "4d58f0f4fe95a30d7b538d71197135483560b97c" + "reference": "fbb0ba67688b780efbc886c1a0a0948dcf7205d6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/4d58f0f4fe95a30d7b538d71197135483560b97c", - "reference": "4d58f0f4fe95a30d7b538d71197135483560b97c", + "url": "https://api.github.com/repos/symfony/finder/zipball/fbb0ba67688b780efbc886c1a0a0948dcf7205d6", + "reference": "fbb0ba67688b780efbc886c1a0a0948dcf7205d6", "shasum": "" }, "require": { @@ -4804,7 +4806,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.0.7" + "source": "https://github.com/symfony/finder/tree/v7.1.1" }, "funding": [ { @@ -4820,20 +4822,20 @@ "type": "tidelift" } ], - "time": "2024-04-28T11:44:19+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/options-resolver", - "version": "v7.0.7", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "23cc173858776ad451e31f053b1c9f47840b2cfa" + "reference": "47aa818121ed3950acd2b58d1d37d08a94f9bf55" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/23cc173858776ad451e31f053b1c9f47840b2cfa", - "reference": "23cc173858776ad451e31f053b1c9f47840b2cfa", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/47aa818121ed3950acd2b58d1d37d08a94f9bf55", + "reference": "47aa818121ed3950acd2b58d1d37d08a94f9bf55", "shasum": "" }, "require": { @@ -4871,7 +4873,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v7.0.7" + "source": "https://github.com/symfony/options-resolver/tree/v7.1.1" }, "funding": [ { @@ -4887,7 +4889,7 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:29:19+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/polyfill-ctype", @@ -5365,16 +5367,16 @@ }, { "name": "symfony/process", - "version": "v7.0.7", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "3839e56b94dd1dbd13235d27504e66baf23faba0" + "reference": "febf90124323a093c7ee06fdb30e765ca3c20028" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/3839e56b94dd1dbd13235d27504e66baf23faba0", - "reference": "3839e56b94dd1dbd13235d27504e66baf23faba0", + "url": "https://api.github.com/repos/symfony/process/zipball/febf90124323a093c7ee06fdb30e765ca3c20028", + "reference": "febf90124323a093c7ee06fdb30e765ca3c20028", "shasum": "" }, "require": { @@ -5406,7 +5408,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.0.7" + "source": "https://github.com/symfony/process/tree/v7.1.1" }, "funding": [ { @@ -5422,7 +5424,7 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:29:19+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/service-contracts", @@ -5509,16 +5511,16 @@ }, { "name": "symfony/stopwatch", - "version": "v7.0.7", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "41a7a24aa1dc82adf46a06bc292d1923acfe6b84" + "reference": "5b75bb1ac2ba1b9d05c47fc4b3046a625377d23d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/41a7a24aa1dc82adf46a06bc292d1923acfe6b84", - "reference": "41a7a24aa1dc82adf46a06bc292d1923acfe6b84", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5b75bb1ac2ba1b9d05c47fc4b3046a625377d23d", + "reference": "5b75bb1ac2ba1b9d05c47fc4b3046a625377d23d", "shasum": "" }, "require": { @@ -5551,7 +5553,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v7.0.7" + "source": "https://github.com/symfony/stopwatch/tree/v7.1.1" }, "funding": [ { @@ -5567,20 +5569,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:29:19+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/string", - "version": "v7.0.7", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "e405b5424dc2528e02e31ba26b83a79fd4eb8f63" + "reference": "60bc311c74e0af215101235aa6f471bcbc032df2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/e405b5424dc2528e02e31ba26b83a79fd4eb8f63", - "reference": "e405b5424dc2528e02e31ba26b83a79fd4eb8f63", + "url": "https://api.github.com/repos/symfony/string/zipball/60bc311c74e0af215101235aa6f471bcbc032df2", + "reference": "60bc311c74e0af215101235aa6f471bcbc032df2", "shasum": "" }, "require": { @@ -5594,6 +5596,7 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { + "symfony/emoji": "^7.1", "symfony/error-handler": "^6.4|^7.0", "symfony/http-client": "^6.4|^7.0", "symfony/intl": "^6.4|^7.0", @@ -5637,7 +5640,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.0.7" + "source": "https://github.com/symfony/string/tree/v7.1.1" }, "funding": [ { @@ -5653,7 +5656,7 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:29:19+00:00" + "time": "2024-06-04T06:40:14+00:00" }, { "name": "theseer/tokenizer", diff --git a/public/import/sample_contributor.xlsx b/public/import/sample_contributor.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..3ff064ac9067bf210d1a99facdd08a8eae42b61b GIT binary patch literal 6791 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 E0FbOl!T